Skip to content
KitploitKITPLOIT
FerramentasExploitsBlog
Log in
Enviar
FerramentasExploitsBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
p3-loader — P³-Shellcode Loader é um loader que implementa uma técnica de injeção de código que utiliza a estrutura Process Parameters como local de execução e preparação para injeção de shellcode em processos remotos, sem acionar mecanismos comuns de detecção. | Kitploit
Ferramentas/GitHubGitHub/orange-cyberdefense/p3-loader
Ferramentas DefensivasEscalada de PrivilégiosExploraçãoShellcodePós-ExploraçãoTestes de PenetraçãoPapers e PesquisaAprendizado e EducaçãoRed Teaming

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Desenvolvimento de Payloads
Exploração de Binários
GitHuborange-cyberdefense/p3-loader

p3-loader

P³-Shellcode Loader é um loader que implementa uma técnica de injeção de código que utiliza a estrutura Process Parameters como local de execução e preparação para injeção de shellcode em processos remotos, sem acionar mecanismos comuns de detecção.

Ver Repositório
2042314há 2 mesesRevisado pelo Kitploit
Compartilhar

P³-Shellcode Loader - Process Parameter Poisoning

Autores: Max Hirschberger & Ogulcan Ugur


Conteúdo

  1. Introdução
  2. Injeção Típica de Processos e APIs de Sistema Envolvidas
  3. Fundamento Técnico dos Internals do Windows Necessários
    • 3.1 API de Criação de Processos e Parâmetros de Inicialização
    • 3.2 O Bloco de Ambiente do Processo (PEB)
  4. Process Parameter Poisoning (P³)
    • 4.1 Iniciando um Processo com um Parâmetro Envenenado
    • 4.2 Localizando os Dados Injetados no Novo Processo
    • 4.3 Executando o Código Injetado
    • 4.4 Injeções de Payload Implementadas
  5. Passando Shellcode Arbitrário em uma String
    • 5.1 Métodos Auxiliares de Baixo Nível Usados pelo Gerador de Shellcode
    • 5.2 Implementação de Operações de Alto Nível
  6. Vantagens da Evasão de Detecção por esta Técnica
  7. Abordagem de Detecção
  8. Conclusão
  9. Referências

1. Introdução

O P³-Shellcode Loader é um carregador que implementa uma técnica de injeção de código que aproveita a estrutura Process Parameters (Process Parameter Poisoning) como local de execução e staging para injeção de shellcode em processos remotos, sem acionar mecanismos comuns de detecção.

Um conceito semelhante foi descrito pelo pesquisador de segurança modexp, que demonstrou que os argumentos passados à API CreateProcess podem ser aproveitados para esse fim [1].


2. Injeção Típica de Processos e APIs de Sistema Envolvidas

Os invasores querem tornar suas atividades menos suspeitas. Com a injeção de processos, os invasores conseguem realizar suas atividades a partir de um processo diferente, que é mais confiável ou do qual se espera que execute a atividade específica, reduzindo assim a suspeita.

As etapas típicas a seguir são necessárias para injetar código em outro processo:

  1. O invasor procura e abre um processo alvo ou inicia um novo processo (via OpenProcess / NtOpenProcess ou CreateProcess / NtCreateProcess).
  2. A memória para o código malicioso é alocada no processo alvo (via VirtualAllocEx ou NtAllocateVirtualMemory).
  3. O código malicioso é escrito na nova alocação (via WriteProcessMemory / NtWriteVirtualMemory).
  4. A proteção de acesso à memória é configurada para permitir a execução do código malicioso (via VirtualProtectEx / NtProtectVirtualMemory).
  5. Uma nova thread é iniciada no processo alvo para executar o código malicioso (via CreateRemoteThread ou NtCreateThreadEx).

Técnicas adicionais de injeção incluem, mas não se limitam a:

  • Thread Hijacking: Em vez de criar uma nova thread, uma existente é redirecionada (via NtSetContextThread)
  • Early-Bird APC-Injection: Utiliza chamadas de procedimento assíncronas (APCs) para redirecionar a execução de uma thread existente (via NtQueueApcThread)
  • Dirty Vanity: Abusa da API do Windows RtlCreateProcessReflection, que implementa o fork de processos. Em nossos testes, observamos que a maioria dos EDRs se concentra em telemetria específica para detectar injeção de processos. Os EDRs monitoram principalmente o uso de WriteProcessMemory e VirtualAllocEx, bem como suas chamadas de sistema do kernel subjacentes NtWriteVirtualMemory, NtAllocateVirtualMemory e NtAllocateVirtualMemoryEx.

3. Fundamento Técnico dos Internals do Windows Necessários

3.1 API de Criação de Processos e Parâmetros de Inicialização

O Windows fornece a função de API CreateProcessW para criar novos processos, mostrada na Listagem 1. Os três primeiros parâmetros dela — lpCommandLine, lpEnvironment e lpStartupInfo — são relevantes para a técnica de injeção descrita, pois são usados para transferir dados ao novo processo.```c BOOL CreateProcessW( [in, optional] LPCWSTR lpApplicationName, [in, out, optional] LPWSTR lpCommandLine, [in, optional] LPSECURITY_ATTRIBUTES lpProcessAttributes, [in, optional] LPSECURITY_ATTRIBUTES lpThreadAttributes, [in] BOOL bInheritHandles, [in] DWORD dwCreationFlags, [in, optional] LPVOID lpEnvironment, [in, optional] LPCWSTR lpCurrentDirectory, [in] LPSTARTUPINFOW lpStartupInfo, [out] LPPROCESS_INFORMATION lpProcessInformation );

*Listagem 1: Definição da função CreateProcessW da API do Windows*
 
O parâmetro `lpCommandLine` especifica a linha de comando para o novo processo. Ele é limitado a um máximo de 32.767 caracteres Unicode, incluindo o terminador nulo Unicode. Para a variante Unicode, é necessário fornecer uma string na qual a função possa gravar. Se uma string constante for fornecida, qualquer tentativa de gravação feita pela função da API resulta em uma violação de acesso à memória. Se o valor for `NULL`, a linha de comando do processo será obtida do parâmetro `lpApplicationName`. Se `lpApplicationName` for `NULL`, ele deverá ser fornecido no campo `lpCommandLine` e é limitado a `MAX_PATH` caracteres.
 
O parâmetro `lpEnvironment` fornece uma lista de variáveis de ambiente para o processo. Se o valor for `NULL`, o ambiente do processo criador será usado. A lista de variáveis de ambiente consiste em strings sucessivas terminadas em nulo, no formato `NAME=VALUE`, com outro terminador nulo no final.
 
O parâmetro `lpStartupInfo` é uma estrutura mostrada na Listagem 2, com campos como estação de janela, desktop, handles de entrada e saída padrão, bem como campos que configuram a janela principal do novo processo. De acordo com a documentação da Microsoft, o campo `lpReserved` é reservado para uso interno, sem documentação adicional. Por meio de análise com o depurador WinDbg, foi possível relacionar esse parâmetro à variável `ShellInfo` do tipo `UNICODE_STRING` no novo processo.```c
typedef struct _STARTUPINFOW {
    DWORD  cb;
    LPWSTR lpReserved;   // Copied to ShellInfo (UNICODE_STRING)
    LPWSTR lpDesktop;
    LPWSTR lpTitle;
    DWORD  dwX;
    DWORD  dwY;
    DWORD  dwXSize;
    // (...) additional fields
    WORD   wShowWindow;
    WORD   cbReserved2;
    LPBYTE lpReserved2;
    HANDLE hStdInput;
    // (...) additional fields
} STARTUPINFOW, *LPSTARTUPINFOW;

Listagem 2: Layout da estrutura de dados STARTUPINFOW

Baixar ferramenta