Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
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
powerview.py — Enumere e ataque o Active Directory com persistência de sessão LDAP, abuso de ACL, Kerberoasting/ASREProasting, shadow credentials, RBCD e NTLM relay. | Kitploit
Ferramentas/GitHubGitHub/aniqfakhrul/powerview.py
Frameworks de Testes de PenetraçãoEscalada de PrivilégiosReconhecimentoAtaques de SenhaExploraçãoColeta de InformaçõesPós-ExploraçãoTestes de PenetraçãoRed TeamingAnálise de DNS
GitHubaniqfakhrul/powerview.py
98494há 3 mesesRevisado pelo Kitploit

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 →
Compartilhar

powerview.py

Enumere e ataque o Active Directory com persistência de sessão LDAP, abuso de ACL, Kerberoasting/ASREProasting, shadow credentials, RBCD e NTLM relay.

Ver Repositório

Powerview.py


version 2026.2.2 @aniqfakhrul on X @h0j3n on X


Instalação | Uso Básico | Ofuscação | Módulos | Registro de Logs | Regras Definidas pelo Usuário | MCP | Plugins | Agradecimentos

Visão Geral

PowerView.py é uma alternativa ao incrível script original PowerView.ps1. A maioria dos módulos usados no PowerView está disponível aqui (algumas das flags foram alteradas). O objetivo principal é obter uma sessão interativa sem ter que autenticar repetidamente no ldap.

Instalação

https://github.com/aniqfakhrul/powerview.py/wiki/Installation-Guide

Uso Básico

[!NOTE] Observe que algumas das funções kerberos ainda não estão funcionando bem, mas ainda fará a maior parte do trabalho. O uso detalhado pode ser encontrado na seção Wiki

  • Inicializar conexão``` powerview range.net/lowpriv:[email protected] [-k] [--use-ldap | --use-ldaps | --use-gc | --use-gc-ldaps | --use-adws]
root@kitploit:~
* Manter conexão persistente
> [!TIP]
> A persistência de conexão está desativada por padrão. As sessões LDAP expiram após inatividade. Use `--keepalive-interval` para enviar consultas periódicas que mantêm o estado da sessão.

* Iniciar interface web```
powerview range.net/lowpriv:[email protected] --web [--web-host 0.0.0.0] [--web-port 3000] [--web-auth user:password1234]

IMG_4602

  • Inicia a conexão com autenticação específica. Note que --use-sign-and-seal e --use-channel-binding só estão disponíveis se você instalar a biblioteca ldap3 diretamente deste branch``` powerview range.net/lowpriv:[email protected] [--use-channel-binding | --use-sign-and-seal | --use-simple-auth]
root@kitploit:~
* Init com schannel. A flag `--pfx` aceita arquivo de certificado no formato pfx.
> [!NOTE]  
> o powerview tentará carregar o certificado sem senha na primeira tentativa. Se falhar, ele solicitará a senha. Portanto, nenhum parâmetro de senha é necessário.```
powerview 10.10.10.10 --pfx administrator.pfx

intro

  • Consulta para usuário específico``` Get-DomainUser Administrator Get-DomainUser -Identity Administrator
root@kitploit:~
* Especificar atributos de pesquisa```
Get-DomainUser -Properties samaccountname,description
  • Filtrar resultados``` Get-DomainUser -Where 'samaccountname [contains][in][eq] admins'
root@kitploit:~
* Contar resultados```
Get-DomainUser -Count
  • Exportar resultado para arquivo``` Get-DomainUser -OutFile ~/domain_user.txt
root@kitploit:~
* Formatar a saída em uma tabela.```
Get-DomainUser -Properties samaccountname,memberof -TableView
Get-DomainUser -Properties samaccountname,memberof -TableView [csv,md,html,latex]
  • Definir módulo``` Set-DomainObject -Identity "adminuser" -Set 'servicePrincipalname=http/web.ws.local' Set-DomainObject -Identity "adminuser" -Append 'servicePrincipalname=http/web.ws.local' Set-DomainObject -Identity "adminuser" -Clear 'servicePrincipalname'

Reading from local file

Set-DomainObject -Identity "adminuser" -Set 'servicePrincipalname=@/path/to/local/file' Set-DomainObject -Identity "adminuser" -Append 'servicePrincipalname=@/path/to/local/file'

root@kitploit:~
* Modo relay```
powerview 10.10.10.10 --relay [--relay-host] [--relay-port] [--use-ldap | --use-ldaps]

relay

[!NOTE]
Esta demonstração mostra que a autenticação forçada foi feita usando printerbug.py. Você pode usar outros métodos que forcem a autenticação HTTP.

Ofuscação

O PowerView usa ldapx-py para ofuscar consultas LDAP e parâmetros relacionados, variando padrões observáveis enquanto preserva a intenção da consulta.

  • Ativar via CLI (cadeia padrão)``` powerview range.net/lowpriv:[email protected] --obfuscate
root@kitploit:~
* Ative via CLI (códigos de cadeia personalizados)```
powerview range.net/lowpriv:[email protected] --obfuscate CZXANDR
  • Ativar via Web

[!TIP] Alterne Obfuscate nas Configurações. Isso se aplica a consultas subsequentes da sessão ativa.

O que é ofuscado

  • Filter: transforma nomes de atributos, operadores e valores antes do envio
  • DN: modifica o distinguishedName da base de pesquisa
  • Attributes: modifica a lista de atributos solicitada

Cadeias padrão (ao usar --obfuscate sem valor)

AlvoCadeiaTécnicas
FilterCZNDRCase, Zeros, aNR, De Morgan, Reorder
BaseDN

Execute ldapx codes --all para ver todos os códigos de ofuscação disponíveis.

[!NOTE] Os resultados são funcionalmente equivalentes na maioria dos casos, mas expansões por aproximação/curinga podem ampliar as correspondências. Alguns códigos (G, O, S) podem não ser compatíveis com ldap3 - use com cautela.

[!WARNING] Ofuscação excessiva pode ser rejeitada por servidores rigorosos ou ferramentas intermediárias. Use apenas quando necessário.

  • ldapx-py: biblioteca de ofuscação de consultas LDAP — https://github.com/j0hnZ3RA/ldapx-py
  • ldapx: proxy LDAP flexível usado como referência — https://github.com/Macmod/ldapx
  • Pesquisa: MaLDAPtive: Obfuscation and De-Obfuscation (palestra DEF CON 32) — https://www.youtube.com/watch?v=mKRS5Iyy7Qo
  • Autores: Sabajete Elezaj — https://x.com/sabi_elezi, Daniel Bohannon — https://x.com/danielhbohannon

Módulo disponível (até agora?)```cs

PV > Add-ADComputer Get-ADObject Get-EventLogChannel Login-As Set-ADObject Add-ADUser Get-CA Get-EventLogPublisher Logoff-Session Set-ADObjectDN Add-CATemplate Get-CATemplate Get-ExchangeDatabase Reboot-Computer Set-CATemplate Add-CATemplateAcl Get-DMSA Get-ExchangeMailbox Remove-ADComputer Set-DomainCATemplate Add-DMSA Get-Domain Get-ExchangeServer Remove-ADObject Set-DomainComputerPassword Add-DomainCATemplate Get-DomainCA Get-GMSA Remove-ADUser Set-DomainDNSRecord Add-DomainCATemplateAcl Get-DomainCATemplate Get-GPOLocalGroup Remove-CATemplate Set-DomainObject Add-DomainComputer Get-DomainComputer Get-GPOSettings Remove-DMSA Set-DomainObjectDN Add-DomainDMSA Get-DomainController Get-LocalUser Remove-DomainCATemplate Set-DomainObjectOwner Add-DomainDNSRecord Get-DomainDMSA Get-NamedPipes Remove-DomainComputer Set-DomainRBCD Add-DomainGMSA Get-DomainDNSRecord Get-NetComputerInfo Remove-DomainDMSA Set-DomainUserPassword Add-DomainGPO Get-DomainDNSZone Get-NetLoggedOn Remove-DomainDNSRecord Set-NetService Add-DomainGroup Get-DomainForeignGroupMember Get-NetProcess Remove-DomainGMSA Set-ObjectOwner Add-DomainGroupMember Get-DomainForeignUser Get-NetService Remove-DomainGroupMember Set-RBCD Add-DomainObjectAcl Get-DomainGMSA Get-NetSession Remove-DomainObject Set-ShadowCred Add-DomainOU Get-DomainGPO Get-NetShare Remove-DomainObjectAcl Set-ShadowCredential Add-DomainUser Get-DomainGPOLocalGroup Get-NetTerminalSession Remove-DomainOU Shutdown-Computer Add-GMSA Get-DomainGPOSettings Get-ObjectAcl Remove-DomainUser Start-NetService Add-GPLink Get-DomainGroup Get-ObjectOwner Remove-GMSA Stop-Computer Add-GPO Get-DomainGroupMember Get-RBCD Remove-GPLink Stop-NetProcess Add-GroupMember Get-DomainObject Get-RegLoggedOn Remove-GroupMember Stop-NetService Add-NetService Get-DomainObjectAcl Get-SCCM Remove-NetService Unlock-ADAccount Add-ObjectAcl Get-DomainObjectOwner Get-ShadowCred Remove-NetSession clear Add-OU Get-DomainOU Get-ShadowCredential Remove-NetTerminalSession exit Clear-Cache Get-DomainRBCD Get-TrustKey Remove-ObjectAcl get_pool_stats ConvertFrom-SID Get-DomainSCCM Get-WDS Remove-OU history ConvertFrom-UACValue Get-DomainTrust Invoke-ASREPRoast Remove-ShadowCred taskkill Disable-DomainDNSRecord Get-DomainTrustKey Invoke-DFSCoerce Remove-ShadowCredential tasklist Get-DomainTrustMapping Find-ForeignGroup Get-DomainUser Invoke-Kerberoast Restart-Computer Find-ForeignUser Get-DomainWDS Invoke-MessageBox Restore-ADObject Find-LocalAdminAccess Get-EventLog Invoke-PrinterBug Restore-DomainObject

root@kitploit:~
### Funções de Domínio/LDAP

| Module | Alias | Description |
| ------ | ----- | ---- |
|Get-DomainUser||Consulta todos os usuários ou objetos de usuário específicos no AD|
|Get-DomainComputer||Consulta todos os computadores ou objetos de computador específicos no AD|
|Get-DomainGroup||Consulta todos os grupos ou objetos de grupo específicos no AD|
|Get-DomainGroupMember||Consulta os membros de um grupo de domínio específico|
|Get-DomainOU||Consulta todas as UOs ou objetos de UO específicos no AD|
|Get-Domain||Consulta informações do domínio|
|Get-DomainController||Consulta controladores de domínio disponíveis|
|Get-DomainDNSRecord||Consulta registros disponíveis. Ele percorre recursivamente todas as zonas DNS se -ZoneName não for especificado|
|Get-DomainDNSZone||Consulta zonas DNS disponíveis no domínio|
|Get-DomainObject|Get-ADObject|Consulta todos ou objetos de domínio especificados no AD|
|Get-DomainObjectAcl|Get-ObjectAcl|Consulta ACLs para o objeto de AD especificado|
|Get-DomainSCCM|Get-SCCM|Consulta SCCM|
|Get-DomainRBCD|Get-RBCD|Encontra contas configuradas para delegação restrita baseada em recurso|
|Get-DomainObjectOwner|Get-ObjectOwner|Consulta o proprietário do objeto de AD|
|Get-DomainGMSA|Get-GMSA|Consulta contas de serviço gerenciadas de grupo (gMSA) e recupera seus blobs de senha|
|Get-DomainDMSA|Get-GDSA|Consulta contas de serviço gerenciadas delegadas (dMSA)|
|Remove-DomainGMSA|Remove-GMSA|Exclui uma conta de serviço gerenciada de grupo (GMSA) existente do domínio|
|Remove-DomainDMSA|Remove-DMSA|Exclui uma conta de serviço gerenciada delegada (dMSA) existente do domínio|
|Remove-DomainDNSRecord||Remove o registro DNS do domínio|
|Remove-DomainComputer|Remove-ADComputer|Remove o computador do domínio|
|Remove-DomainGroupMember|Remove-GroupMember|Remove membro de um grupo de domínio específico|
|Remove-DomainOU|Remove-OU|Remove UOs ou objetos de UO específicos no AD|
|Remove-DomainObjectAcl|Remove-ObjectAcl|Remove ACLs para o objeto de AD especificado|
|Remove-DomainObject|Remove-ADObject|Remove o objeto de domínio especificado|
|Remove-DomainUser|Remove-ADUser|Remove o usuário de domínio especificado no AD|
|Set-DomainDNSRecord||Define o registro DNS do domínio|
|Set-DomainUserPassword||Define a senha para o usuário de domínio especificado|
|Set-DomainComputerPassword||Define a senha para o computador de domínio especificado|
|Set-DomainObject|Set-ADObject|Define para objetos de domínio especificados no AD|
|Set-DomainObjectDN|Set-ADObjectDN|Modifica o atributo distinguishedName do objeto, bem como altera a UO|
|Set-DomainObjectOwner|Set-ObjectOwner|Define o proprietário do objeto de AD|
|Set-ShadowCredential|Set-ShadowCred|Gerencia msDS-KeyCredentialLink (Shadow Credentials) para um objeto de domínio|
|Get-ShadowCredential|Get-ShadowCred|Lista shadow credentials (msDS-KeyCredentialLink) para um objeto de domínio ou todos os objetos|
|Remove-ShadowCredential|Remove-ShadowCred|Remove shadow credentials por DeviceId ou limpa todas de um objeto de domínio|
|Add-DomainDNSRecord||Adiciona registro DNS do domínio|
|Disable-DomainDNSRecord||Desabilita o registro DNS apontando para um endereço inválido|
|Add-DomainGMSA|Add-GMSA|Cria uma nova conta de serviço gerenciada de grupo (gMSA) no domínio|
|Add-DomainDMSA|Add-GMSA|Cria uma nova conta de serviço gerenciada delegada (dMSA) no domínio|
|Add-DomainUser|Add-ADUser|Adiciona novo usuário de domínio no AD|
|Add-DomainComputer|Add-ADComputer|Adiciona novo computador de domínio no AD|
|Add-DomainGroupMember|Add-GroupMember|Adiciona novo membro no grupo de domínio especificado no AD|
|Add-DomainOU|Add-OU|Adiciona novo objeto de UO no AD|
|Add-DomainGPO|Add-GPO|Adiciona novo objeto de GPO no AD|
|Add-DomainObjectAcl|Add-ObjectAcl|Os direitos suportados até agora são All, DCsync, RBCD, ShadowCred, WriteMembers|
|Clear-Cache||Limpa o cache|

### Funções de GPO

| Module | Alias | Description |
| ------ | ----- | ---- |
|Get-DomainGPO|| Consulta objetos de política de grupo do domínio |
|Get-DomainGPOLocalGroup|Get-GPOLocalGroup|Consulta todos os GPOs em um domínio que modificam associações de grupos locais por meio de `Restricted Groups` ou `Group Policy preferences`|
|Add-GPLink||Cria um novo vínculo de GPO para uma UO|
|Remove-GPLink||Remove o vínculo de GPO de uma UO|

### Funções de Enumeração de Computadores

| Module | Alias | Description |
| ------ | ----- | ---- |
|Get-NetSession||[MS-SRVS] Consulta informações de sessão para o computador local ou remoto|
|Get-NetShare||Consulta compartilhamentos abertos no computador local ou remoto|
|Get-NetLoggedOn||[MS-WKST] Consulta usuários conectados no computador local ou remoto|
|Get-EventLog||[MS-EVEN6] Consulta logs de eventos do Windows de um computador remoto via RPC|
|Get-EventLogChannel||[MS-EVEN6] Lista canais de log de eventos em um computador remoto com detecção de produtos de segurança|
|Get-EventLogPublisher||[MS-EVEN6] Lista publicadores de log de eventos em um computador remoto com detecção de produtos de segurança|
|Get-NetService||[MS-SCMR] Consulta serviços em execução no computador local ou remoto|
|Stop-NetService||[MS-SCMR] Interrompe um serviço específico no computador local ou remoto|
|Get-NetProcess|tasklist|[MS-TSTS] Consulta processos em execução no computador local ou remoto|
|Stop-NetProcess|taskkill|[MS-TSTS] Encerra um processo específico no computador local ou remoto|
|Get-NetTerminalSession||[MS-TSTS] Consulta sessões de terminal ativas no computador local ou remoto|
|Remove-NetTerminalSession||[MS-TSTS] Encerra uma sessão de terminal específica no computador local ou remoto|
|Stop-Computer|Shutdown-Computer|[MS-TSTS] Desliga um computador remoto|
|Restart-Computer|Reboot-Computer|[MS-TSTS] Reinicia um computador remoto|

### Funções de ADCS

| Module | Alias | Description |
| ------ | ----- | ---- |
|Get-DomainCATemplate|Get-CATemplate|Consulta modelos de CA disponíveis. Suporta filtragem para template vulnerável|
|Get-DomainCA|Get-CA|Consulta a Autoridade de Certificação (CA)|
|Remove-DomainCATemplate|Remove-CATemplate|Remove o modelo de CA de domínio especificado|
|Set-DomainCATemplate|Set-CATemplate|Modifica os atributos do objeto de domínio de um modelo de CA|
|Add-DomainCATemplate|Add-CATemplate|Adiciona novo modelo de CA de domínio|
|Add-DomainCATemplateAcl|Add-CATemplateAcl|Adiciona ACL a um modelo de certificado. Os direitos suportados até agora são All, Enroll, Write|

### Funções do Exchange

| Module | Alias | Description |
| ------ | ----- | ----------- |
|Get-ExchangeServer|Get-Exchange|Recupera a lista de servidores Exchange disponíveis no domínio|

### Funções de Confiança de Domínio

| Module | Alias | Description |
| ------ | ----- | ---- |
|Get-DomainTrust||Consulta todas as relações de confiança do domínio|
|Get-DomainTrustMapping||Mapeia recursivamente todas as relações de confiança alcançáveis a partir do domínio atual. Entra em cada parceiro de confiança e achata os resultados com as colunas `SourceName` / `TargetName` (espelha o `Get-DomainTrustMapping` do PowerView.ps1). Use `-NoRecurse` para limitar ao domínio inicial.|
|Get-DomainForeignUser|Find-ForeignUser|Consulta usuários que estão em grupo fora do domínio do usuário|
|Get-DomainForeignGroupMember|Find-ForeignGroup|Consulta grupos com usuários fora do domínio do grupo e procura membros estrangeiros|

### Funções Diversas

| Module | Alias | Description |
| ------ | ----- | ---- |
|ConvertFrom-SID||Converte um identificador de segurança (SID) fornecido em nome de usuário/grupo|
|ConvertFrom-UACValue||Converte um valor inteiro de UAC em formato legível|
|Get-NamedPipes||Lista os Named Pipes de um computador específico|
|Invoke-DFSCoerce||Coage a autenticação da conta de máquina via MS-DFSNM NetrDfsRemoveStdRoot()|
|Invoke-Kerberoast||Solicita o ticket Kerberos para um nome de principal de serviço (SPN) especificado|
|Invoke-PrinterBug||Aciona a função MS-RPRN RpcRemoteFindFirstPrinterChangeNotificationEx para forçar um servidor a autenticar em uma máquina especificada|
|Unlock-ADAccount||Desbloqueia contas de domínio modificando o atributo lockoutTime|
|Find-LocalAdminAccess||Encontra computadores no domínio local onde o usuário atual tem acesso de Administrador Local|

### Registro de Logs

Nunca deixaremos de registrar logs para manter o controle das ações realizadas. Por padrão, o powerview cria uma pasta `.powerview` no diretório pessoal do usuário atual _(~)_. Cada arquivo de log é gerado com base na data atual.
Exemplo de caminho: `/root/.powerview/logs/bionic.local/2024-02-13.log`

### Detecção de Vulnerabilidades

O PowerView.py inclui um sistema integrado de detecção de vulnerabilidades que identifica automaticamente problemas comuns de segurança do Active Directory. Ao consultar objetos, as vulnerabilidades serão exibidas na saída:```
vulnerabilities: [VULN-026] Domain with high machine account quota (allows users to add computer accounts) (MEDIUM)
                 [VULN-029] Domain with weak minimum password length policy (less than 8 characters) (HIGH)

Regras Definidas pelo Usuário

Você pode definir regras personalizadas de detecção de vulnerabilidades modificando o arquivo vulns.json localizado no diretório de armazenamento do PowerView (~/.powerview/vulns.json).

Cada regra de vulnerabilidade tem a seguinte estrutura:```json "rule_name": { "description": "Human-readable description of the vulnerability", "rules": [ { "attribute": "attributeName", "condition": "condition_type", "value": "value_to_check" }, { "attribute": "anotherAttribute", "condition": "another_condition", "value": "another_value" } ], "exclusions": [ { "attribute": "attributeName", "condition": "condition_type", "value": "value_to_exclude" } ], "severity": "low|medium|high|critical", "id": "VULN-XXX", "rule_operator": "AND|OR", "exclusion_operator": "AND|OR", "details": "Optional detailed explanation of the vulnerability and remediation steps" }

root@kitploit:~
**Rule Components:**

- **rules**: Lista de condições que devem ser atendidas para que a vulnerabilidade seja detectada
- **exclusions**: Lista de condições que, se atendidas, excluirão um objeto da detecção mesmo que ele corresponda às regras
- **rule_operator**: Como combinar múltiplas regras (padrão: "OR")
  - "AND": Todas as regras devem corresponder
  - "OR": Qualquer regra pode corresponder
- **exclusion_operator**: Como combinar múltiplas exclusões (padrão: "OR")
  - "OR": Qualquer exclusão pode corresponder para excluir o objeto
  - "AND": Todas as exclusões devem corresponder para excluir o objeto
- **negate**: Booleano opcional (True/False) que pode ser adicionado a qualquer regra para inverter o seu resultado

**Supported Conditions:**

| Condição | Descrição |
| --------- | ----------- |
| `exists` | O atributo existe |
| `not_exists` | O atributo não existe |
| `equals` | Correspondência exata (sem diferenciar maiúsculas de minúsculas) |
| `not_equals` | Não é uma correspondência exata |
| `contains` | Correspondência de substring (sem diferenciar maiúsculas de minúsculas) |
| `not_contains` | Nenhuma correspondência de substring |
| `startswith` | Começa com string (sem diferenciar maiúsculas de minúsculas) |
| `endswith` | Termina com string (sem diferenciar maiúsculas de minúsculas) |
| `older_than` | A data é mais antiga que o número de dias especificado |
| `newer_than` | A data é mais recente que o número de dias especificado |
| `greater_than` | O valor numérico é maior que o especificado |
| `less_than` | O valor numérico é menor que o especificado |
| `greater_than_or_equal` | O valor numérico é maior ou igual ao especificado |
| `less_than_or_equal` | O valor numérico é menor ou igual ao especificado |
| `has_flag` | O flag de bit está definido em um valor numérico |
| `missing_flag` | O flag de bit não está definido em um valor numérico |
| `any_flag_set` | Qualquer um dos flags especificados está definido |
| `all_flags_set` | Todos os flags especificados estão definidos |

**Multiple Values:**

Você pode especificar múltiplos valores para uma condição usando:
1. String separada por pipe: `"value": "value1|value2|value3"`
2. Formato de lista: `"value": ["value1", "value2", "value3"]`

**Exemplo de Regra:**```json
"weak_password_policy": {
    "description": "Domain with weak minimum password length policy (less than 8 characters)",
    "rules": [
        {
            "attribute": "objectClass",
            "condition": "contains",
            "value": "domainDNS"
        },
        {
            "attribute": "minPwdLength",
            "condition": "less_than",
            "value": 8
        }
    ],
    "exclusions": [],
    "severity": "high",
    "id": "VULN-029",
    "rule_operator": "AND"
}

MCP

[!note] Isso não está incluído na instalação base do projeto. Você pode executar pip3 install .[mcp] or pip3 install powerview[mcp] para incluir as funcionalidades do MCP.

Isso habilita o servidor Model Context Protocol, permitindo que agentes de IA interajam com as funcionalidades do PowerView por meio de uma interface padronizada via transporte Streamable HTTP. Consulte a documentação do MCP para mais detalhes.

  • Iniciar o servidor MCP```bash powerview domain.local/lowpriv:[email protected] --mcp [--mcp-host 0.0.0.0] [--mcp-port 8888] [--mcp-path powerview]
root@kitploit:~
O servidor MCP expõe a maior parte da funcionalidade do PowerView por meio de uma interface de ferramenta padronizada. Isso inclui a capacidade de:
- Consultar e enumerar objetos do Active Directory (usuários, computadores, grupos, OUs)
- Recuperar informações sobre relações de confiança de domínio, GPOs e associações de grupo
- Procurar vulnerabilidades de segurança e configurações incorretas
- ...

#### Claude Desktop
O Claude Desktop ainda não suporta transporte baseado em HTTP [Github](https://github.com/orgs/modelcontextprotocol/discussions/16). Talvez você queira usar [mcp-proxy](https://github.com/sparfenyuk/mcp-proxy).

* Instale `mcp-proxy````bash
# Option 1: With uv (recommended)
uv tool install mcp-proxy

# Option 2: With pipx (alternative)
pipx install mcp-proxy
  • Modificar `%APPDATA%\Claude\claude_desktop_config.json````json { "mcpServers": { "Powerview": { "command": "mcp-proxy", "args": ["http://10.10.10.10:5000/powerview"] } } }
root@kitploit:~
#### Cursor
Você pode modificar isso nas configurações do Cursor, no botão de opções MCP.

>[!tip]
>Ative o modo YOLO para habilitar o modo autônomo, assim você não precisa clicar no botão "Run Tool" cada vez. Leia mais [aqui](https://docs.cursor.com/chat/agent#yolo-mode)```json
{
  "mcpServers": {
    "Powerview": {
      "url": "http://127.0.0.1:5000/powerview"
    }
  }
}

[!warning] Ao usar MCP com modelos de IA públicos (como Claude, GPT, etc.), seus dados do Active Directory podem ser transmitidos e registrados por esses serviços de acordo com suas políticas de tratamento de dados. Esteja atento à exposição de informações confidenciais ao usar essas ferramentas. Não somos responsáveis por qualquer vazamento de dados ou implicações de segurança resultantes da conexão do PowerView a serviços de IA de terceiros. Auto-hospedado FTW!

Plugins

O PowerView suporta um sistema de plugins baseado em decoradores que permite adicionar novos comandos e criar hooks antes/depois de comandos existentes.

Como Funciona```

root@kitploit:~
                     ┌────────────────────────────────┐
                     │         Plugin Loader          │
                     │  Scans directories on startup  │
                     └──────────────┬─────────────────┘
                                    │
                    ┌───────────────┴───────────────┐
                    ▼                               ▼
        ┌───────────────────┐           ┌───────────────────┐
        │ builtin/ plugins  │           │  ~/.powerview/    │
        │                   │           │  plugins/         │
        │  dehashed.py      │           │                   │
        │  highlight.py     │           │  my_plugin.py     │
        │  recon.py         │           │  ...              │
        └───────────────────┘           └───────────────────┘
                    │                               │
                    └───────────────┬───────────────┘
                                    ▼
                        ┌──────────────────────┐
                        │   Sanity Validation  │
                        │  Check signatures &  │
                        │  required decorators │
                        └──────────┬───────────┘
                                    ▼
                        ┌──────────────────────┐
                        │   Plugin Registry    │
                        │                      │
                        │  commands: {}        │
                        │  before_hooks: {}    │
                        │  after_hooks: {}     │
                        └──────────┬───────────┘
                                    │
                                    ▼
            ┌─────────────────────────────────────────────────┐
            │              Command Execution Flow             │
            │                                                 │
            │  User Input: "Get-DomainUser -Identity admin"   │
            │                       │                         │
            │                       ▼                         │
            │          ┌────────────────────────┐             │
            │          │   @before hooks        │             │
            │          │   (modify args)        │             │
            │          └───────────┬────────────┘             │
            │                      │                          │
            │                      ▼                          │
            │          ┌────────────────────────┐             │
            │          │   Core command OR      │             │
            │          │   @command plugin      │             │
            │          └───────────┬────────────┘             │
            │                      │                          │
            │                      ▼                          │
            │          ┌────────────────────────┐             │
            │          │   @after hooks         │             │
            │          │   (modify results)     │             │
            │          └───────────┬────────────┘             │
            │                      │                          │
            │                      ▼                          │
            │               Format & Display                  │
            └─────────────────────────────────────────────────┘
root@kitploit:~
Plugins são arquivos `.py` únicos descobertos automaticamente a partir de dois caminhos:

| Caminho | Finalidade |
|------|---------|
| `powerview/plugins/builtin/` | Acompanha o pacote |
| `~/.powerview/plugins/` | Plugins gerenciados pelo usuário |

#### Plugins Integrados

| Plugin | Comandos | Hooks | Descrição |
|--------|----------|-------|-------------|
| Recon | `Invoke-DomainRecon` | — | Resumo de reconhecimento de domínio em um único comando |
| Highlight | — | `after:Get-DomainUser` | Destaca senhas encontradas em descrições de usuários |

#### Gerenciamento de Plugins```
Get-Plugin                          # List all plugins with status
Enable-Plugin -Name <plugin_name>   # Enable a disabled plugin
Disable-Plugin -Name <plugin_name>  # Disable a plugin at runtime

Escrevendo um Plugin

Crie um arquivo .py em ~/.powerview/plugins/. Os plugins usam três decoradores: @command para registrar novos comandos, @before para executar lógica antes de um comando existente e @after para executar lógica depois.```python

~/.powerview/plugins/custom_enum.py

from powerview.plugins import command, before, after, PowerviewPlugin

plugin = PowerviewPlugin( name="CustomEnum", description="Custom enumeration helpers", author="yourname", version="1.0", )

@command("Get-DomainAdminUser", args=["-Identity", "-Properties", "-SearchBase"], description="Find users with adminCount=1") def get_domainadminuser(pv, args=None, identity=None, properties=None, searchbase=None): results = pv.get_domainuser( identity=identity or "*", properties=properties or ["sAMAccountName", "adminCount", "memberOf", "description"], searchbase=searchbase, ) if results: return [r for r in results if str(r.get("attributes", r).get("adminCount", "")) == "1"] return results

@before("Get-DomainUser", priority=10) def inject_enabled_filter(pv, args): """Automatically filter out disabled accounts.""" if not hasattr(args, 'ldapfilter') or not args.ldapfilter: args.ldapfilter = "(!(userAccountControl:1.2.840.113556.1.4.803:=2))" return args

@after("Get-DomainUser", priority=20) def add_password_age(pv, args, results): """Enrich results with password age.""" from datetime import datetime, timezone if not results: return results for entry in results: attrs = entry.get("attributes", entry) pwdlast = attrs.get("pwdLastSet") if isinstance(pwdlast, datetime): if pwdlast.tzinfo is None: pwdlast = pwdlast.replace(tzinfo=timezone.utc) age = (datetime.now(timezone.utc) - pwdlast).days attrs["PasswordAge"] = f"{age} days" return results

root@kitploit:~
**Decoradores:**

| Decorador | Assinatura | Descrição |
|-----------|-----------|-------------|
| `@command(name, args, description)` | `func(pv, args=None, **kwargs)` | Registra um novo comando verbo-substantivo |
| `@before(command_name, priority)` | `func(pv, args)` | Executa antes de um comando. Retorna os argumentos modificados ou `None` |
| `@after(command_name, priority)` | `func(pv, args, results)` | Executa depois de um comando. Retorna os resultados modificados ou `None` |

> [!NOTE]
> `@before` e `@after` aceitam um único nome de comando ou uma lista (ex.: `@after(["Get-DomainUser", "Get-DomainComputer"])`). Valores de prioridade menores são executados primeiro.

**Definições avançadas de argumentos:**

Os argumentos de plugins podem ser strings simples (`"-Identity"`) ou dicionários para um controle mais refinado:```python
@command("Get-CustomThing", args=[
    "-Identity",
    {"name": "-Days", "type": int, "default": 90, "help": "Threshold in days"},
    {"name": "-Verbose", "action": "store_true", "help": "Show details"},
])

[!TIP] Todos os comandos de plugins recebem automaticamente os sinalizadores -OutFile, -TableView e -SortBy.

Créditos

  • https://github.com/SecureAuthCorp/impacket
  • https://github.com/CravateRouge/bloodyAD
  • https://github.com/PowerShellMafia/PowerSploit/blob/master/Recon/PowerView.ps1
  • https://github.com/ThePorgs/impacket/
  • https://github.com/the-useless-one/pywerview
  • https://github.com/dirkjanm/ldapdomaindump
  • https://learn.microsoft.com/en-us/powershell/module/grouppolicy/new-gplink
  • https://github.com/ThePirateWhoSmellsOfSunflowers/ldap3/tree/tls_cb_and_seal_for_ntlm
  • https://github.com/ly4k/Certipy
  • https://github.com/MaLDAPtive/Invoke-Maldaptive
  • https://github.com/xforcered/SoaPy
  • https://github.com/Macmod/sopa
Baixar ferramenta
CX
Case, heX encoding
AttributesCRCase, Reorder