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
Ferramentas/GitHubGitHub/stevenaldinger/decker
Frameworks de Testes de PenetraçãoReconhecimentoScanners de VulnerabilidadesFrameworks de ExploraçãoScripting e AutomaçãoColeta de Informações
GitHubstevenaldinger/decker

decker

Framework declarativo de orquestração de testes de penetração

Ver Repositório
296285há 7 anosRevisado 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

Build Status

Decker - Framework de Orquestração de Testes de Penetração

Propósito

Decker é um framework de orquestração de testes de penetração. Ele utiliza a Linguagem de Configuração HashiCorp 2 (a mesma linguagem de configuração do Terraform) para permitir testes de penetração como código de forma declarativa, de modo que seus testes possam ser versionados, compartilhados, reutilizados e colaborados com sua equipe ou comunidade.

Exemplo de um arquivo de configuração do decker:

root@kitploit:~
// variables are pulled from environment
//   ex: DECKER_TARGET_HOST
// they will be available throughout the config files as var.*
//   ex: ${var.target_host}
variable "target_host" {
  type = "string"
}

// resources refer to plugins
// resources need unique names so plugins can be used more than once
// they are declared with the form: 'resource "plugin_name" "unique_name" {}'
// their outputs will be available to others using the form unique_name.*
//   ex: nmap.443
resource "nmap" "nmap" {
  host = "${var.target_host}"
  plugin_enabled = "true"
}
resource "sslscan" "sslscan" {
  host = "${var.target_host}"
  plugin_enabled = "${nmap.443 == "open"}"
}

Execute um plugin para cada item em uma lista:

root@kitploit:~
variable "target_host" {
  type = "string"
}
resource "nslookup" "nslookup" {
  dns_server = "8.8.4.4"
  host = "${var.target_host}"
}
resource "metasploit" "metasploit" {
  for_each = "${nslookup.ip_address}"
  exploit = "auxiliary/scanner/portscan/tcp"
  options = {
    RHOSTS = "${each.key}/32"
    INTERFACE = "eth0"
  }
}

Configuração complexa combinando for_each com valores aninhados:

root@kitploit:~
variable "target_host" {
  type = "string"
}
resource "nslookup" "nslookup" {
  dns_server = "8.8.4.4"
  host = "${var.target_host}"
}
resource "nmap" "nmap" {
  for_each = "${nslookup.ip_address}"
  host = "${each.key}"
}
// for each IP, check if nmap found port 25 open.
// if yes, run metasploit's smtp_enum scanner
resource "metasploit" "metasploit" {
  for_each = "${nslookup.ip_address}"
  exploit = "auxiliary/scanner/smtp/smtp_enum"
  options = {
    RHOSTS = "${each.key}"
  }
  plugin_enabled = "${nmap["${each.key}"].25 == "open"}"
}

Formatos de saída

Vários formatos de saída estão disponíveis e mais de um pode ser selecionado ao mesmo tempo.

Definir DECKER_OUTPUTS_JSON ou DECKER_OUTPUTS_XML como "true" produzirá arquivos formatados em json e xml, respectivamente.

  1. Produzir arquivos .json além do texto simples: export DECKER_OUTPUTS_JSON="true"
  2. Produzir arquivos .xml além do texto simples: export DECKER_OUTPUTS_XML="true"

Por que o nome decker?

Meu amigo Courtney veio em meu socorro quando eu estava lutando para encontrar um nome e encontrou decker em um glossário de palavras de ficção científica... e soou legal.

Um futuro cracker; um especialista em software habilidoso em manipular o ciberespaço, especialmente em contornar precauções de segurança.

Executando um exemplo de configuração com Docker

Dois volumes são montados:

  1. Diretório chamado decker-reports onde o decker irá gerar um arquivo para cada plugin executado. O nome do arquivo será {unique_resource_name}.report.txt.
  2. Diretório examples contendo arquivos de configuração do decker. Montar este volume permite que você escreva configurações localmente usando seu editor favorito e ainda as execute dentro do contêiner.

Uma variável de ambiente é passada:

  1. DECKER_TARGET_HOST

Esta é referenciada nos arquivos de configuração como {var.target_host}. O Decker percorrerá todas as variáveis de ambiente chamadas DECKER_*, removendo o prefixo e definindo o restante em minúsculas.

root@kitploit:~
docker run -it --rm \
  -v "$(pwd)/decker-reports/":/tmp/reports/ \
  -v "$(pwd)/examples/":/decker-config/ \
  -e DECKER_TARGET_HOST=example.com \
 stevenaldinger/decker:kali decker ./decker-config/example.hcl

Quando o decker terminar de executar a configuração, procure em ./decker-reports pelas saídas.

Executando um exemplo de configuração sem Docker

Você provavelmente vai querer definir o diretório para onde o decker escreve os relatórios usando a variável de ambiente DECKER_REPORTS_DIR.

Algo assim seria apropriado. Apenas certifique-se de que o que você definir seja um diretório existente.

root@kitploit:~
export DECKER_REPORTS_DIR="$HOME/decker-reports"

Você também precisará definir um host alvo se estiver executando um dos arquivos de configuração de exemplo.

root@kitploit:~
export DECKER_TARGET_HOST="<insert hostname here>"

Então basta executar um arquivo de configuração. Mude para o diretório raiz deste repositório e execute:

root@kitploit:~
./decker ./examples/example.hcl

Contribuindo

Contribuições são muito bem-vindas e apreciadas. Veja docs/contributions.md para diretrizes.

Desenvolvimento

Usar Docker para desenvolvimento é recomendado para uma experiência tranquila. Isso garante que todas as dependências estejam instaladas e prontas para uso.

Consulte Estrutura de Diretórios abaixo para uma visão geral do código Go.

Início Rápido

  1. (na máquina host): make docker_build
  2. (na máquina host): make docker_run (iniciará o contêiner Docker e abrirá uma sessão bash interativa)
  3. (dentro do contêiner): dep ensure -v
  4. (dentro do contêiner): make build_all
  5. (dentro do contêiner): make run

Inicializar hooks do Git

Execute make init para adicionar um script pre-commit que executará linting e testes em cada commit.

Desenvolvimento de Plugins

O Decker em si é apenas um framework que lê arquivos de configuração, determina dependências nos arquivos de configuração e executa plugins em uma ordem que garante que plugins com dependências de outros plugins (saída de um plugin sendo entrada para outro) sejam executados após aqueles dos quais dependem.

O verdadeiro poder do decker vem dos plugins. Desenvolver um plugin pode ser tão simples ou complexo quanto você quiser, desde que o resultado final seja um arquivo .so contendo o código do plugin compilado e um arquivo .hcl no mesmo diretório declarando as entradas que o plugin espera que o usuário configure.

Confira docs/building_plugins.md para começar com seu primeiro plugin. Deve levar apenas alguns minutos para colocar um plugin decker "Hello World" em funcionamento.

Instalando plugins

Por padrão, espera-se que os plugins estejam em um diretório relativo ao local onde o binário do decker está, em <decker binary>/internal/app/decker/plugins/<plugin name>/<plugin name>.so. Caminhos adicionais podem ser adicionados definindo a variável de ambiente DECKER_PLUGIN_DIRS. O caminho padrão do plugin ainda será usado se DECKER_PLUGIN_DIRS estiver definido.

Exemplo: export DECKER_PLUGIN_DIRS="/path/to/my/plugins:/additional/path/to/plugins"

Deve haver um arquivo HCL ao lado do arquivo .so em <decker binary>/internal/app/decker/plugins/<plugin name>/<plugin name>.hcl que define suas entradas e saídas. Atualmente, apenas entradas do tipo string, list e map são suportadas. Cada entrada deve ter um bloco input parecido com este:

root@kitploit:~
input "my_input" {
  type = "string"
  default = "some default value"
}

Estrutura de Diretórios

root@kitploit:~
.
├── build
│   ├── ci/
│   └── package/
├── cmd
│   ├── decker
│   │   └── main.go
│   └── README.md
├── deployments/
├── docs/
├── examples
│   └── example.hcl
├── githooks
│   ├── pre-commit
├── Gopkg.toml
├── internal
│   ├── app
│   │   └── decker
│   │       └── plugins
│   │           ├── a2sv
│   │           │   ├── a2sv.hcl
│   │           │   ├── main.go
│   │           │   └── README.md
│   │           └── ...
│   │               ├── main.go
│   │               ├── README.md
│   │               └── xxx.hcl
│   ├── pkg
│   │   ├── dependencies/
│   │   ├── gocty/
│   │   ├── hcl/
│   │   ├── paths/
│   │   ├── plugins/
│   │   └── reports/
│   └── README.md
├── LICENSE
├── Makefile
├── README.md
└── scripts
    ├── build-plugins.sh
    └── README.md
  • cmd/decker/main.go é o driver. Sua função é analisar um arquivo de configuração fornecido, carregar os plugins apropriados com base nos blocos resource do arquivo e executar os plugins com as entradas especificadas.
  • examples tem algumas configurações de exemplo para você começar com o decker. Se você usar a imagem docker kali (stevenaldinger/decker:kali), todas as dependências devem estar instaladas para todos os arquivos de configuração e as coisas devem funcionar sem problemas.
  • internal/pkg é onde está a maior parte do código real. Contém todos os pacotes importados por main.go.
    • dependencies é responsável por construir o grafo de dependências dos plugins e retornar um array ordenado topologicamente que garante que os plugins sejam executados em uma ordem funcional.
    • gocty oferece auxiliares para codificar e decodificar valores go-cty que são usados para lidar com tipos de entrada dinâmicos.
    • hcl é responsável por analisar arquivos HCL, incluindo a criação de contextos de avaliação que permitem que os blocos sejam decodificados corretamente quando dependem de outros blocos de plugin.
    • paths é responsável por retornar caminhos de arquivos para o binário do decker, arquivos de configuração, arquivos de configuração de plugin e relatórios gerados.
    • plugins é responsável por determinar se os plugins estão habilitados e executá-los.
    • reports é responsável por escrever relatórios no sistema de arquivos.
  • internal/app/decker/plugins são peças modulares de código escritas como plugins Golang, implementando uma interface simples que permite que sejam carregados e chamados em tempo de execução com entradas e saídas especificadas no arquivo de configuração do plugin (também em HCL). Um exemplo pode ser encontrado em internal/app/decker/plugins/nslookup/nslookup.hcl.
  • Arquivos de configuração do decker oferecem uma forma declarativa de escrever testes de penetração. Os manifestos são escritos na Linguagem de Configuração HashiCorp 2) e descrevem o conjunto de plugins a serem usados no teste, bem como suas entradas.
Baixar ferramenta