Go Fuzzing! Escrevendo seu próprio scanner de subdomínios para aprender paralelismo em Golang

Go Fuzzing! Escrevendo seu próprio scanner de subdomínios para aprender paralelismo em Golang

Aprenda a usar goroutines em Go para criar um scanner de subdomínios que utiliza paralelismo. O artigo aborda conceitos como http.Client, sync.WaitGroup e sync.Mutex, além de fornecer um código prático para a enumeração de subdomínios.

MundiX News·23 de maio de 2026·10 min de leitura·👁 17 views

A execução de tarefas como enumeração de subdomínios, força bruta de senhas ou hash cracking se beneficia do paralelismo. A linguagem Go é uma excelente escolha para isso. Hoje, vamos dominar o conceito de goroutines – threads leves gerenciadas por um agendador próprio no espaço do usuário, em vez do sistema operacional, o que muda radicalmente a carga no sistema. Ao mesmo tempo, vamos escrever nosso próprio fuzzing de subdomínios.

Neste e nos artigos subsequentes, analisaremos as principais técnicas para trabalhar com goroutines, ilustrando-as com tarefas simples de enumeração de valores. Não vamos nos aprofundar na metodologia de enumeração – fuzzing, hash cracking e assim por diante. Afinal, estamos aprendendo a codificar e, portanto, agora nos concentraremos nas ferramentas fornecidas pela linguagem de programação.

Teoria e termos serão um pouco mais presentes do que nos artigos anteriores, porque o tema em si é muito amplo e, francamente, não é o mais simples. Tentei apresentar o material de forma que, na primeira leitura, você possa pular o que é completamente chato, mas para uma melhor compreensão, ainda recomendo que você se aprofunde!

Então, vamos escrever uma utilidade simples para encontrar subdomínios (enumeração de subdomínios) da maneira mais óbvia – por força bruta através de uma lista.

A lista não é difícil de encontrar na internet, por exemplo, em SecLists ou n0kovo_subdomains, mas para fins de aprendizado, para não bombardear um host inocente com solicitações (especialmente porque ainda não aprendemos a parar goroutines ou controlar seu número), aconselho você a escrever a sua própria, literalmente a partir de uma dúzia de posições – isso é mais do que suficiente para começar.

Mais detalhes sobre a pesquisa de subdomínios podem ser encontrados no artigo "Web Fuzzing do início. Aprendendo a enumerar diretórios e encontrar arquivos ocultos em sites".

Vamos criar um novo módulo:

mkdir sudbdomain && cd $_ go mod init sudbdomain touch main.go

No arquivo main.go, inseriremos o seguinte código:

go
package main

import (
	"bufio"
	"fmt"
	"io"
	"net/http"
	"os"
	"strings"
	"sync"
	"time"
)

func run() error {
	const srcFileName = "subdomains.txt"
	// Host de destino - argumento de inicialização
	if len(os.Args) <= 1 {
		fmt.Fprintf(os.Stderr, "Target address not specified\n")
		os.Exit(1)
	}
	host := os.Args[1]
	// Abrimos a lista de subdomínios
	srcFile, err := os.Open(srcFileName)
	if err != nil {
		return fmt.Errorf("opening %s: %w", srcFileName, err)
	}
	defer srcFile.Close()
	// Configurando o cliente HTTP
	client := &http.Client{
		Timeout: 1 * time.Second,
		CheckRedirect: func(req *http.Request, via []*http.Request) error {
			// Ignorando redirecionamentos
			return http.ErrUseLastResponse
		},
	}
	// Lemos e verificamos os subdomínios linha por linha
	scanner := bufio.NewScanner(srcFile)
	for scanner.Scan() {
		sub := strings.TrimSpace(scanner.Text())
		if sub == "" {
			continue
		}
		target := "https://" + sub + "." + host
		resp, err := client.Get(target)
		if err != nil {
			continue
		}
		resp.Body.Close()
		io.ReadAll(resp.Body)
		if resp.StatusCode == http.StatusNotFound {
			// 404 não nos interessa
			continue
		}
		fmt.Printf("%s - %d %s\n", target, resp.StatusCode, http.StatusText(resp.StatusCode))
	}
	if err := scanner.Err(); err != nil {
		return fmt.Errorf("reading %s: %w", srcFileName, err)
	}
	return nil
}

func main() {
	if err := run(); err != nil {
		fmt.Fprintln(os.Stderr, err)
		os.Exit(1)
	}
}

O host de destino, para o qual procuraremos subdomínios, é definido como um argumento de inicialização: seu valor é lido como o segundo elemento da matriz os.Args (o primeiro elemento com o índice 0 contém o nome do arquivo executável). A lista de subdomínios para consulta é lida do arquivo. Para simplificar, o nome do arquivo é definido como uma constante srcFileName, mas, é claro, ele também pode ser passado como um argumento, através de uma variável de ambiente ou definido em uma configuração.

Em seguida, usamos a leitura em buffer por meio do pacote bufio: lemos o arquivo com a lista linha por linha e, para cada linha, iniciamos uma verificação de acessibilidade do host. Finalmente, usamos o padrão main-run para facilitar o tratamento de erros.

Quando ocorre um erro, a saída antecipada da função run() é executada com o retorno desse erro. Na função main(), é verificado se ocorreu um erro e, nesse caso, o código 1 é retornado. Ao mesmo tempo, as chamadas defer são tratadas corretamente, o que não teria acontecido se os.Exit(1) fosse chamado imediatamente.

É conveniente trabalhar com configurações usando o pacote Viper. Ele suporta JSON, YAML, INI e muitas outras opções. Como alternativa, você pode considerar koanf e cleanenv com capacidades semelhantes. Além disso, GoDotEnv é frequentemente usado, o que permite carregar variáveis de ambiente definidas no arquivo .env.

Para interação de rede, usaremos http.Client do pacote da biblioteca padrão net/http, que permite enviar solicitações de rede e receber respostas. Observe: criamos uma instância configurada da estrutura http.Client com antecedência e, no futuro, trabalhamos com um ponteiro para ela – este é o símbolo & na definição da variável client. Não queremos copiar o cliente novamente para cada nova solicitação e intencionalmente usamos um ponteiro para reutilizar a mesma instância e, assim, usar os recursos de forma mais eficiente.

http.Client é thread-safe, portanto, usamos a mesma instância através desse ponteiro, mesmo em diferentes goroutines.

O restante do artigo está disponível apenas para membros.

🛡️⚡

Pare de pesquisar. Comece a hackear.

O MundiX é seu copiloto de pentest com IA: comandos exatos, análise de outputs e próximo passo na kill chain — em segundos.

Testar grátis por 7 dias →

Sem cartão para começar · Planos a partir de R$49/mês

📤 Compartilhar & Baixar

🧰 Ferramentas recomendadas

Divulgação: alguns links são patrocinados. Podemos receber comissão se você comprar — sem custo extra para você. Só indicamos o que faz sentido para a comunidade.

Aprendendo Kali Linux: Teste de segurança, pentest e hacking ético

Aprendendo Kali Linux: Teste de segurança, pentest e hacking ético

Com centenas de ferramentas pré-instaladas, a distribuição Kali Linux facilita o trabalho de os profissionais de segurança começarem a fazer testes de segurança rapidamente. No entanto, com mais de 600 ferramentas em seu arsenal, o Kali Linux também pode ser desafiador. A nova edição deste prático livro abrange as atualizações nas ferramentas e inclui uma melhor abordagem da análise forense e da engenharia reversa. Ric Messier, autor, não fica apenas no teste de segurança, mas também faz uma abordagem sobre a execução de análise forense, incluindo a análise em disco e na memória, assim como alguma análise básica de malware. • Explore as diversas ferramentas disponíveis no Kali Linux • Entenda o valor do teste de segurança e examine os tipos de teste disponíveis • Aprenda os aspectos básicos do pentest em todo o ciclo de vida do ataque • Instale o Kali Linux em vários sistemas, tanto físicos quanto virtuais • Descubra como usar diferentes ferramentas destinadas à segurança • Estruture um teste de segurança baseado nas ferramentas do Kali Linux • Estenda as ferramentas do Kali para criar técnicas de ataque avançadas • Use o Kali Linux para ajudar a criar relatórios quando o teste terminar “A abordagem concisa, clara e baseada na experiência adotada por Ric Messier para a introdução do Kali Linux e dos testes de cibersegurança é incomparável. Este livro é uma leitura excelente e acessível para iniciantes e um recurso valioso para qualquer pessoa.” —Alexander Arlt, Consultor sênior de segurança, Google

Ver na Amazon
Gshield 2 em 1 Hub Extensor Conector USB-C + USB-A e Adaptador de Rede Ethernet LAN RJ45 com 3 Entradas USB 3.0 até 5 Gbps em Liga de Alumínio para Computador e Notebook, Cinza

Gshield 2 em 1 Hub Extensor Conector USB-C + USB-A e Adaptador de Rede Ethernet LAN RJ45 com 3 Entradas USB 3.0 até 5 Gbps em Liga de Alumínio para Computador e Notebook, Cinza

Compatível com portas USB-C e USB-A, ideal para ampliar a conectividade de dispositivos como MacBook Pro e outros com portas USB-C. Inclui um adaptador USB-A extra, proporcionando uma conexão Ethernet estável e veloz de até 1 Gbps, perfeita para filmes, jogos online e videoconferências. Oferece três portas USB 3.0 com velocidades de transferência de até 5 Gbps, permitindo conectar mouse, teclado, discos rígidos e outros periféricos. Fabricado em alumínio durável, garantindo longa vida útil e resistência ao uso diário. Design compacto e leve, ideal para viagens de negócios e uso diário, facilitando o transporte e armazenamento. Funciona com Windows 10/8.1/8, Mac OS e Chrome OS, oferecendo versatilidade incomparável para diversas necessidades de conectividade. Assegura uma conectividade estável e rápida, perfeita para tarefas exigentes como transferência de dados, streaming e mais.

Ver na Amazon
Hacking APIs: Breaking Web Application Programming Interfaces

Hacking APIs: Breaking Web Application Programming Interfaces

Hacking APIs is a crash course on web API security testing that will prepare you to penetration-test APIs, reap high rewards on bug bounty programs, and make your own APIs more secure. You'll learn how REST and GraphQL APIs work in the wild and set up a streamlined API testing lab with Burp Suite and Postman. Then you'll master tools useful for reconnaissance, endpoint analysis, and fuzzing, such as Kiterunner and OWASP Amass. Next, you'll learn to perform common attacks, like those targeting an API's authentication mechanisms and the injection vulnerabilities commonly found in web applications. You'll also learn techniques for bypassing protections against these attacks. In the book's nine guided labs, which target intentionally vulnerable APIs, you'll practice: Enumerating APIs users and endpoints using fuzzing techniques Using Postman to discover an excessive data exposure vulnerability Performing a JSON Web Token attack against an API authentication process Combining multiple API attack techniques to perform a NoSQL injection Attacking a GraphQL API to uncover a broken object level authorization vulnerability

Ver oferta
Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition

Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition

Up-to-date strategies for thwarting the latest, most insidious network attacks This fully updated, industry-standard security resource shows, step by step, how to fortify computer networks by learning and applying effective ethical hacking techniques. Based on curricula developed by the authors at major security conferences and colleges, the book features actionable planning and analysis methods as well as practical steps for identifying and combating both targeted and opportunistic attacks. Gray Hat Hacking: The Ethical Hacker's Handbook, Sixth Edition clearly explains the enemy's devious weapons, skills, and tactics and offers field-tested remedies, case studies, and testing labs. You will get complete coverage of Internet of Things, mobile, and Cloud security along with penetration testing, malware analysis, and reverse engineering techniques. State-of-the-art malware, ransomware, and system exploits are thoroughly explained. Fully revised content includes 7 new chapters covering the latest threats Includes proof-of-concept code stored on the GitHub repository Authors train attendees at major security conferences, including RSA, Black Hat, Defcon, and B-Sides

Ver na Amazon
Bloqueador USB de privacidade de porta USB para PC, notebook, bloco de laptop,

Bloqueador USB de privacidade de porta USB para PC, notebook, bloco de laptop,

Proteção de privacidade aprimorada: protege o link de transmissão de dados para evitar roubo de informações, fornecendo proteção de segurança robusta que protege a privacidade do usuário durante transferências de arquivos e garante uma conexão segura para interações de dispositivos sem preocupações em vários ambientes Uso a longo prazo: a camada protetora resistente ao desgaste, combinada com um corpo de metal resistente, oferece gerenciamento de calor confiável e qualidade duradoura durante o uso diário Entrega eficiente de energia: a tecnologia de chip inteligente garante a identificação automática dos requisitos de energia, fornecendo carregamento eficiente alinhando-se com vários protocolos de carregamento rápido para maior conveniência Proteção contra sobrecarga: evitando riscos de sobrecarga, este bloqueador de dados USB protege a vida útil da bateria e garante um desempenho estável, mantendo um fluxo estável de energia para melhorar a longevidade do dispositivo de forma eficaz Prático de transportar: com atenção à portabilidade, este bloqueador de dados USB oferece um design compacto que é leve e fácil de transportar, melhorando a conveniência do usuário e operação eficiente

Ver na Amazon

📩 Newsletter MundiX

Receba novidades de cibersegurança + um checklist de pentest grátis. Sem spam.

Ao assinar você concorda em receber e-mails. Cancele quando quiser.