
Intercepte a comunicação de Named Pipes do Windows usando Burp ou ferramentas similares de proxy HTTP.
Named Pipes são muito populares para comunicação entre processos no Windows. São usados em muitas aplicações, incluindo o Windows Remote Procedure Call (RPC). O objetivo desta ferramenta é permitir que pesquisadores de segurança e pentesters realizem avaliações de segurança em aplicações que usam named pipes. Este projeto é inspirado no incrível projeto MITM_Intercept da CyberArk Labs.
A ferramenta cria um proxy de cliente/servidor de pipe com uma ponte WebSocket cliente/servidor. O cliente WebSocket conecta-se ao servidor WebSocket por meio de um proxy HTTP, como o Burp.
Nota importante: Esta ferramenta usa a API win32 para criar os named pipes, portanto só funciona no Windows. Atualmente, ela precisa ser executada na mesma máquina do servidor de pipe alvo e do proxy HTTP. Eu posso adicionar uma opção para usar um proxy remoto e uma opção para retransmitir para um servidor de pipe remoto, mas a ferramenta ainda precisará ser executada no Windows.
Diagrama de fluxo:

É importante entender que esta ferramenta funciona criando instâncias separadas de servidor de pipe, além das instâncias criadas pela aplicação do servidor alvo, fazendo com que a aplicação cliente alvo se conecte a essas instâncias de proxy. Isso significa algumas coisas:
Como você pode ver nos itens acima, usar esta ferramenta pode alterar o comportamento da aplicação alvo. Lembre-se de que esta ferramenta é destinada principalmente a testes de segurança; não a utilize em sistemas de produção.
A ferramenta foi testada com a versão 3.13.7 do Python. Configuração:
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)
A partir da pasta raiz (pipe-intercept):
pytest
O Docker no Windows usa um named pipe para comunicação entre o cliente e o serviço docker. O nome do pipe é "\\.\pipe\docker_engine". Vamos ver como podemos interceptar essa comunicação. Começamos executando a ferramenta:
C:\pipe-intercept>python pipe_intercept.py --pipe-name docker_engine
INFO:websockets.server:server listening on 127.0.0.1:12037
Agora podemos iniciar o Burp e, a partir de outro shell, criar um contêiner do 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:\>
Agora, se abrirmos a aba WebSocket no Burp, podemos ver a comunicação:

Também podemos ativar a interceptação e alterar a mensagem:

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:\>