<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Técnicas &amp; Herramientas on seraldinho.pages.dev</title><link>https://seraldinho.pages.dev/notas/tecnicas/</link><description>Recent content in Técnicas &amp; Herramientas on seraldinho.pages.dev</description><generator>Hugo -- gohugo.io</generator><language>es</language><managingEditor>nseral@proton.me (Nicolás Seral)</managingEditor><webMaster>nseral@proton.me (Nicolás Seral)</webMaster><copyright>© 2026 Nicolás Seral</copyright><atom:link href="https://seraldinho.pages.dev/notas/tecnicas/index.xml" rel="self" type="application/rss+xml"/><item><title>Enumeración de Infraestructuras</title><link>https://seraldinho.pages.dev/notas/tecnicas/inf-enum/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/inf-enum/</guid><description>&lt;h2 class="relative group"&gt;Introducción
 &lt;div id="introducción" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introducci%c3%b3n" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;La enumeración de la infraestructura de una empresa u organización empieza desde el punto de vista más global, desde los sistemas autónomos (AS), y se va volviendo más específico hasta llegar a IPs y servidores específicos.&lt;/p&gt;

&lt;h2 class="relative group"&gt;1. Sistemas Autónomos (AS)
 &lt;div id="1-sistemas-autónomos-as" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#1-sistemas-aut%c3%b3nomos-as" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Un AS es una colección de redes IP (&lt;a href="https://aws.amazon.com/es/what-is/cidr/" target="_blank" rel="noreferrer"&gt;rangos CIDR&lt;/a&gt;) que están bajo el control de una misma entidad administrativa, como pueden ser ISPs o empresas.&lt;/p&gt;</description></item><item><title>Pass-The-Hash</title><link>https://seraldinho.pages.dev/notas/tecnicas/pth/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/pth/</guid><description>&lt;h2 class="relative group"&gt;Introducción
 &lt;div id="introducción" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#introducci%c3%b3n" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Tanto en entornos AD y sistemas Windows independientes es posible realizar un ataque PtH, que consiste en usar el hash NTLM de un usuario ya autenticado y usarlo para autenticarnos en otros servicios, sin necesidad de una contraseña conocida.&lt;/p&gt;
&lt;p&gt;Esto es posible debido al funcionamiento de la autenticación NTLM:&lt;/p&gt;
&lt;blockquote&gt;&lt;p&gt;En sistemas Windows sin AD, las credenciales del usuario se almacenan en el SAM como hashes NT, mientras que en entornos AD se almacenan (también como hashes) en los controladores de dominio (DC).&lt;/p&gt;</description></item><item><title>Port Forwarding</title><link>https://seraldinho.pages.dev/notas/tecnicas/port-forwarding/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/port-forwarding/</guid><description>&lt;h1 class="relative group"&gt;Port Forwarding Estático
 &lt;div id="port-forwarding-estático" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#port-forwarding-est%c3%a1tico" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="tip"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 384 512"&gt;&lt;path fill="currentColor" d="M112.1 454.3c0 6.297 1.816 12.44 5.284 17.69l17.14 25.69c5.25 7.875 17.17 14.28 26.64 14.28h61.67c9.438 0 21.36-6.401 26.61-14.28l17.08-25.68c2.938-4.438 5.348-12.37 5.348-17.7L272 415.1h-160L112.1 454.3zM191.4 .0132C89.44 .3257 16 82.97 16 175.1c0 44.38 16.44 84.84 43.56 115.8c16.53 18.84 42.34 58.23 52.22 91.45c.0313 .25 .0938 .5166 .125 .7823h160.2c.0313-.2656 .0938-.5166 .125-.7823c9.875-33.22 35.69-72.61 52.22-91.45C351.6 260.8 368 220.4 368 175.1C368 78.61 288.9-.2837 191.4 .0132zM192 96.01c-44.13 0-80 35.89-80 79.1C112 184.8 104.8 192 96 192S80 184.8 80 176c0-61.76 50.25-111.1 112-111.1c8.844 0 16 7.159 16 16S200.8 96.01 192 96.01z"/&gt;&lt;/svg&gt;
&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Nota: Objetivo
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;Mapear un puerto específico de una máquina a otra (relación 1 a 1). Útil para acceder a un servicio interno concreto o para recibir una reverse shell desde una subred aislada.&lt;/p&gt;</description></item><item><title>PSExec</title><link>https://seraldinho.pages.dev/notas/tecnicas/psexec/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/psexec/</guid><description>&lt;h2 class="relative group"&gt;Explicación e implementación básica
 &lt;div id="explicación-e-implementación-básica" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#explicaci%c3%b3n-e-implementaci%c3%b3n-b%c3%a1sica" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;PsExec es una herramienta que permite ejecutar procesos en otros sistemas de la red sin tener que instalar nada manualmente. Hay varias implementaciones de la herramienta:&lt;/p&gt;
&lt;p&gt;Por defecto, al ejecutar &lt;code&gt;psexec.exe&lt;/code&gt;:&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;El programa copia el ejecutable &lt;code&gt;PSEXESVC.exe&lt;/code&gt;, ubicado dentro del propio &lt;code&gt;psexec.exe&lt;/code&gt;, al share &lt;code&gt;ADMIN$&lt;/code&gt; del objetivo (A través de SMB, y que apunta a &lt;code&gt;C:\Windows&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Mediante el API de servicios de Windows (SVCCTL RPC), contactando con él a través de MSRPC (p135) o de named pipes (Share &lt;code&gt;$IPC&lt;/code&gt;, p139,445), crea un nuevo servicio con el ejecutable subido antes, con privilegios &lt;code&gt;SYSTEM&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Ese nuevo servicio crea varios named pipes nuevos en el share a través de los cuales tendrá lugar la comunicación.&lt;/li&gt;
&lt;li&gt;Al terminar, PsExec detiene el servicio y lo borra del sistema, pero &lt;em&gt;el binario de &lt;code&gt;C:\Windows&lt;/code&gt; puede quedar ahí, lo que deja rastro de la conexión&lt;/em&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;Por esto último hay otras implementaciones, algunas que siguen el modelo original, pero reescritas en otros lenguajes, y otras que se ejecutan únicamente en memoria.&lt;/p&gt;</description></item><item><title>Python Cache Poisoning</title><link>https://seraldinho.pages.dev/notas/tecnicas/python-cache-poisoning/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/python-cache-poisoning/</guid><description>&lt;p&gt;El &lt;strong&gt;python cache poisoning&lt;/strong&gt; es una vulnerabilidad (o técnica, según se mire) que permite escalar privilegios aprovechando la confianza de Python en archivos bytecode (&lt;code&gt;.pyc&lt;/code&gt;) precompilados de scripts que ejecuta (normalmente con privilegios elevados).&lt;/p&gt;
&lt;p&gt;Cuando Python ejecuta un script o importa una librería, hace lo siguiente:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Si &lt;strong&gt;no existe&lt;/strong&gt; una versión precompilada, compila el código fuente a bytecode, que normalmente se almacena en &lt;code&gt;__pycache__/NOMBRELIB.cpython-VERSION.pyc&lt;/code&gt; o (menos común) bajo un prefijo &lt;code&gt;PYTHONPYCACHEPREFIX&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Si &lt;strong&gt;existe&lt;/strong&gt; una versión precompilada, comprueba la cabecera (Magic Number que depende de la versión de Python, flags, metadatos como &lt;code&gt;timestamp&lt;/code&gt;, &lt;code&gt;size&lt;/code&gt; o &lt;code&gt;hash&lt;/code&gt;), y, si al compararla con el &lt;code&gt;.py&lt;/code&gt; original está bien, la ejecuta confiando en el &lt;code&gt;.pyc&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="admonition relative overflow-hidden rounded-lg border-l-4 my-3 px-4 py-3 shadow-sm" data-type="danger"&gt;
 &lt;div class="flex items-center gap-2 font-semibold text-inherit"&gt;
 &lt;div class="flex shrink-0 h-5 w-5 items-center justify-center text-lg"&gt;&lt;span class="relative block icon"&gt;&lt;svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"&gt;
&lt;path fill="currentColor" d="M159.3 5.4c7.8-7.3 19.9-7.2 27.7 .1c27.6 25.9 53.5 53.8 77.7 84c11-14.4 23.5-30.1 37-42.9c7.9-7.4 20.1-7.4 28 .1c34.6 33 63.9 76.6 84.5 118c20.3 40.8 33.8 82.5 33.8 111.9C448 404.2 348.2 512 224 512C98.4 512 0 404.1 0 276.5c0-38.4 17.8-85.3 45.4-131.7C73.3 97.7 112.7 48.6 159.3 5.4zM225.7 416c25.3 0 47.7-7 68.8-21c42.1-29.4 53.4-88.2 28.1-134.4c-2.8-5.6-5.6-11.2-9.8-16.8l-50.6 58.8s-81.4-103.6-87.1-110.6C133.1 243.8 112 273.2 112 306.8C112 375.4 162.6 416 225.7 416z"/&gt;&lt;/svg&gt;&lt;/span&gt;&lt;/div&gt;
 &lt;div class="grow"&gt;
 Nota: Escalada de privilegios
 &lt;/div&gt;
 &lt;/div&gt;&lt;div class="admonition-content mt-3 text-base leading-relaxed text-inherit"&gt;&lt;p&gt;&lt;em&gt;Si un proceso con más privilegios ejecuta un .py o importa un módulo cuyo .pyc ha sido manipulado por un usuario menos privilegiado (y pasa la comprobación de cabecera), el payload corre con esos privilegios elevados.&lt;/em&gt;&lt;/p&gt;</description></item><item><title>Python Library Hijacking</title><link>https://seraldinho.pages.dev/notas/tecnicas/python-library-hijacking/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/python-library-hijacking/</guid><description>&lt;p&gt;El Python Library Hijacking es una técnica de escalada de privilegios que consiste en aprovechar la forma en la que Python busca las librerías para cargar código malicioso en lugar de las librerías originales.&lt;/p&gt;

&lt;h2 class="relative group"&gt;Funcionamiento
 &lt;div id="funcionamiento" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#funcionamiento" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Python busca módulos en un órden específico definido por &lt;code&gt;sys.path&lt;/code&gt;, que puede verse de la siguiente manera:&lt;/p&gt;
&lt;div class="highlight-wrapper"&gt;&lt;div class="highlight"&gt;&lt;div style="color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;-webkit-text-size-adjust:none;"&gt;
&lt;table style="border-spacing:0;padding:0;margin:0;border:0;"&gt;&lt;tr&gt;&lt;td style="vertical-align:top;padding:0;margin:0;border:0;"&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&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;1
&lt;/span&gt;&lt;span style="white-space:pre;-webkit-user-select:none;user-select:none;margin-right:0.4em;padding:0 0.4em 0 0.4em;color:#7f7f7f"&gt;2
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/td&gt;
&lt;td style="vertical-align:top;padding:0;margin:0;border:0;;width:100%"&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-bash" data-lang="bash"&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;$ python3 -c &lt;span style="color:#e6db74"&gt;&amp;#39;import sys; print(sys.path)&amp;#39;&lt;/span&gt;
&lt;/span&gt;&lt;/span&gt;&lt;span style="display:flex;"&gt;&lt;span&gt;&lt;span style="color:#f92672"&gt;[&lt;/span&gt;&lt;span style="color:#e6db74"&gt;&amp;#39;&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/lib/python312.zip&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/lib/python3.12&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/lib/python3.12/lib-dynload&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/local/lib/python3.12/dist-packages&amp;#39;&lt;/span&gt;, &lt;span style="color:#e6db74"&gt;&amp;#39;/usr/lib/python3/dist-packages&amp;#39;&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;/td&gt;&lt;/tr&gt;&lt;/table&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;/div&gt;
&lt;p&gt;Normalmente, el orden es el siguiente:&lt;/p&gt;</description></item><item><title>SSRF</title><link>https://seraldinho.pages.dev/notas/tecnicas/ssrf/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/ssrf/</guid><description>&lt;h1 class="relative group"&gt;Server-Side Request Forgery
 &lt;div id="server-side-request-forgery" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#server-side-request-forgery" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Una vulnerabilidad SSRF se da cuando un atacante manipula una aplicación para realizar solicitudes a URLs arbitrarias.&lt;/p&gt;
&lt;p&gt;Por ejemplo, si un servidor debe solicitar datos de otros servidores en función del input de un usuario, un atacante puede hacer que las solicitudes se hagan a sitios o recursos en los que el desarrollador no había pensado en un primer momento.&lt;/p&gt;</description></item><item><title>SSTI</title><link>https://seraldinho.pages.dev/notas/tecnicas/ssti/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/ssti/</guid><description>&lt;h1 class="relative group"&gt;Server-Side Template Injection
 &lt;div id="server-side-template-injection" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#server-side-template-injection" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;

&lt;h2 class="relative group"&gt;Template Engines
 &lt;div id="template-engines" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#template-engines" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h2&gt;
&lt;p&gt;Un &lt;strong&gt;Template Engine&lt;/strong&gt; es &lt;em&gt;un software que combina plantillas predefinidas con datos generados dinámicamente y que las apps web suelen utilizar para generar respuestas dinámicas.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;Por ejemplo, una página web con un header que &amp;ldquo;saluda al usuario&amp;rdquo; podría contener un código como:&lt;/p&gt;</description></item><item><title>XSS</title><link>https://seraldinho.pages.dev/notas/tecnicas/xss/</link><pubDate>Mon, 01 Jan 0001 00:00:00 +0000</pubDate><author>nseral@proton.me (Nicolás Seral)</author><guid>https://seraldinho.pages.dev/notas/tecnicas/xss/</guid><description>&lt;h1 class="relative group"&gt;Cross-Site Scripting
 &lt;div id="cross-site-scripting" class="anchor"&gt;&lt;/div&gt;
 
 &lt;span
 class="absolute top-0 w-6 transition-opacity opacity-0 -start-6 not-prose group-hover:opacity-100 select-none"&gt;
 &lt;a class="text-primary-300 dark:text-neutral-700 !no-underline" href="#cross-site-scripting" aria-label="Ancla"&gt;#&lt;/a&gt;
 &lt;/span&gt;
 
&lt;/h1&gt;
&lt;p&gt;Una aplicación web normal funciona recibiendo código HTML del servidor y renderizándolo en el navegador del cliente. Si una aplicación web no valida ni limpia el input del usuario correctamente, el usuario puede introducir código js en un campo de input para que, cuando él mismo u otro usuario vea la página, ese código js se ejecute en su navegador.&lt;/p&gt;</description></item></channel></rss>