
Intercepta la comunicación de Named Pipes de Windows usando Burp o herramientas similares de proxy HTTP.
Los Named Pipes son muy populares para la comunicación entre procesos en Windows. Se utilizan en muchas aplicaciones, incluida la llamada a procedimiento remoto (RPC) de Windows. El propósito de esta herramienta es permitir a los investigadores de seguridad y pentesters realizar evaluaciones de seguridad de aplicaciones que utilizan named pipes. Este proyecto está inspirado en el increíble proyecto MITM_Intercept de CyberArk Labs.
La herramienta crea un proxy de cliente/servidor de pipe con un puente de cliente/servidor WebSocket. El cliente WebSocket se conecta al servidor WebSocket a través de un proxy HTTP como Burp.
Nota importante: Esta herramienta utiliza la API win32 para crear los named pipes, por lo que solo funciona en Windows. Actualmente necesita ejecutarse en la misma máquina que el servidor de pipe objetivo y el proxy HTTP. Podría añadir una opción para usar un proxy remoto y una opción para retransmitir a un servidor de pipe remoto, pero la herramienta aún tendrá que ejecutarse en Windows.
Diagrama de flujo:

Es importante entender que esta herramienta funciona creando instancias de servidor de pipe independientes, aparte de las instancias creadas por la aplicación del servidor objetivo, haciendo que la aplicación cliente objetivo se conecte a estas instancias proxy. Esto implica algunas cosas:
Como puedes ver en los puntos anteriores, el uso de esta herramienta podría cambiar el comportamiento de la aplicación objetivo. Recuerda que esta herramienta es principalmente para pruebas de seguridad; no la utilices en sistemas de producción.
La herramienta fue probada con Python versión 3.13.7. Configuración:
python -m venv .venv
.venv\Scripts\activate.bat
pip install -r requirements.txt
usage: pipe_intercept.py [-h] --pipe-name PIPE_NAME [--ws-port WS_PORT] [--http-proxy-port HTTP_PROXY_PORT] [--log-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}]
options:
-h, --help show this help message and exit
--pipe-name PIPE_NAME
The name of the pipe to be intercepted
--ws-port WS_PORT An available port number for the internal WebSocket server (if not specified, a random port will be used)
--http-proxy-port HTTP_PROXY_PORT
The port number of the HTTP proxy (if not specified, the default is 8080)
--log-level {CRITICAL,ERROR,WARNING,INFO,DEBUG}
Log level (if not specified, the default is INFO)
Desde la carpeta raíz (pipe-intercept):
pytest
Docker en Windows utiliza un named pipe para comunicarse entre el cliente y el servicio de docker. El nombre del pipe es "\\.\pipe\docker_engine". Veamos cómo podemos interceptar esta comunicación. Empezamos ejecutando la herramienta:
C:\pipe-intercept>python pipe_intercept.py --pipe-name docker_engine
INFO:websockets.server:server listening on 127.0.0.1:12037
Ahora podemos iniciar Burp y, desde otro shell, crear un contenedor de Windows:
C:\pipe-intercept>docker run -it --name win mcr.microsoft.com/windows:1809-amd64 cmd
Microsoft Windows [Version 10.0.17763.2803]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\>dir
Volume in drive C has no label.
Volume Serial Number is 5C09-8FFA
Directory of C:\
05/07/2020 06:16 AM 5,510 License.txt
04/04/2022 02:57 PM <DIR> PerfLogs
04/04/2022 04:13 PM <DIR> Program Files
04/04/2022 02:57 PM <DIR> Program Files (x86)
04/04/2022 04:17 PM <DIR> Users
04/04/2022 04:13 PM <DIR> Windows
1 File(s) 5,510 bytes
5 Dir(s) 21,188,812,800 bytes free
C:\>
Ahora, si abrimos la pestaña WebSocket en Burp, podemos ver la comunicación:

También podemos activar la intercepción y cambiar el mensaje:

Microsoft Windows [Version 10.0.17763.2803]
(c) 2018 Microsoft Corporation. All rights reserved.
C:\>dir
Volume in drive C has no label.
Volume Serial Number is 5C09-8FFA
Directory of C:\
05/07/2020 06:16 AM 5,510 License.txt
04/04/2022 02:57 PM <DIR> PerfLogs
04/04/2022 04:13 PM <DIR> Modified Name
04/04/2022 02:57 PM <DIR> Program Files (x86)
04/04/2022 04:17 PM <DIR> Users
04/04/2022 04:13 PM <DIR> Windows
1 File(s) 5,510 bytes
5 Dir(s) 21,188,288,512 bytes free
C:\>