OSINT para rastrear pegadas digitais e senhas vazadas em redes sociais


GitHub: https://github.com/ibnaleem/gosearch


Este projeto depende muito de colaboradores. Veja  Contribuiçþes  para mais detalhes.
git clone https://github.com/ibnaleem/gosearch.git && cd gosearch && go build && ./gosearch [username]

      


O que ĂŠ  GoSearch?

GoSearch ĂŠ uma ferramenta OSINT eficiente e confiĂĄvel, projetada para descobrir pegadas digitais associadas a um determinado nome de usuĂĄrio. É rĂĄpido, direto e confiĂĄvel, permitindo que os usuĂĄrios rastreiem a presença online de um indivĂ­duo em vĂĄrias plataformas.  GoSearch tambĂŠm integra dados do Banco de Dados de InteligĂŞncia de Crimes CibernĂŠticos da HudsonRock para fornecer insights sobre informaçþes relacionadas a crimes cibernĂŠticos. Ele tambĂŠm acessa  BreachDirectory.orgo banco de dados do oferecendo acesso a uma lista abrangente de violaçþes de dados, senhas em texto simples e com hash vinculadas ao nome de usuĂĄrio. Esta ferramenta ĂŠ ideal para aqueles que precisam de resultados precisos e sem frescuras ao investigar identidades online.

Instalação e uso

$ git clone https://github.com/ibnaleem/gosearch.git && cd gosearch
$ go build

Para Unix:

$ ./gosearch <username>

Recomendo adicionar o  gosearch binĂĄrio ao seu  /bin para uso universal:

$ sudo mv gosearch ~/usr/bin

Para Windows:

C:\Users\***\gosearch> gosearch.exe <username>

Casos de uso

O GoSearch permite que vocĂŞ pesquise  no breachdirectory.org  por senhas comprometidas associadas a um nome de usuĂĄrio especĂ­fico. Para utilizar totalmente o GoSearch, siga estas etapas:

  1. Obtenha uma   chave de API  gratuitahttps://rapidapi.com/rohan-patra/api/breachdirectory em .
  2. Inclua a chave da API nos argumentos do comando como este:
$ gosearch [username] [api-key]

O GoSearch gerarå automaticamente endereços de e-mail populares para um determinado nome de usuårio.

Por que  GoSearch?

GoSearch ĂŠ inspirado por  Sherlock , uma ferramenta popular de busca de nome de usuĂĄrio. No entanto,  GoSearch melhora Sherlock ao abordar vĂĄrias de suas principais limitaçþes:

  1. Sherlock ĂŠ baseado em Python, o que o torna mais lento quando comparado ao Go.
  2. Sherlock estå desatualizado e carece de atualizaçþes.
  3. Às vezes, Sherlock relata falsos positivos como resultados válidos.
  4. Sherlock frequentemente deixa passar nomes de usuĂĄrios reais, o que leva a falsos negativos.

O problema principal com Sherlock sĂŁo os falsos negativos — quando um nome de usuĂĄrio existe em uma plataforma, mas nĂŁo ĂŠ detectado. O problema secundĂĄrio sĂŁo os falsos positivos, quando um nome de usuĂĄrio ĂŠ incorretamente sinalizado como disponĂ­vel.  GoSearch aborda esses problemas codificando por cores os resultados incertos como amarelo, o que indica potenciais falsos positivos. Isso permite que os usuĂĄrios filtrem facilmente links irrelevantes. Se houver demanda suficiente, podemos implementar uma opção para relatar apenas resultados confirmados ou focar apenas na detecção de falsos negativos.

Contribuindo

GoSearch depende do  arquivo data.json  que contĂŠm uma lista de sites para pesquisar. Os usuĂĄrios podem contribuir adicionando novos sites para expandir os recursos de pesquisa da ferramenta. É aqui que a maioria das contribuiçþes sĂŁo necessĂĄrias. O formato para adicionar novos sites ĂŠ o seguinte:

{
"name": "Nome do site",
"base_url": "https://www.website.com/profiles/{}",
"url_probe": "opcional, veja abaixo",
"errorType": "errorMsg/status_code/profilePresence/unknown",
"errorMsg/errorCode": "errorMsg",
"cookies": [
{
"name": "nome do cookie",
"value": "valor do cookie"
}
]
}

Cada entrada deve incluir um nome de site claro e conciso para facilitar pesquisas manuais, ajudando a evitar envios duplicados.

base_url

O  base_url ĂŠ o URL  GoSearch usado para pesquisar nomes de usuĂĄrios, a menos que a  url_probe seja especificado (veja  url_probe). Sua primeira tarefa ĂŠ identificar a localização dos perfis de usuĂĄrio em um site. Por exemplo, no Twitter, os perfis de usuĂĄrio estĂŁo localizados no caminho raiz  /, entĂŁo vocĂŞ definiria  "base_url": "https://twitter.com/{}". O  {} ĂŠ um  espaço reservado  que  GoSearch serĂĄ substituĂ­do automaticamente pelo nome de usuĂĄrio ao executar a pesquisa.

Por exemplo, se vocĂŞ executar a consulta  ./gosearch ibnaleem,  GoSearch substituirĂĄ o  {} placeholder por "ibnaleem", resultando na URL  https://shaffan.dev/user/ibnaleem, assumindo que o  base_url esteja definido como  https://shaffan.dev/user/{}. Isso permite  GoSearch gerar automaticamente a URL correta para verificar o perfil do usuĂĄrio.

url_probe

Em alguns casos, os sites podem bloquear solicitaçþes diretas por motivos de segurança, mas oferecem uma API ou serviço alternativo para recuperar as mesmas informaçþes. O  url_probe campo ĂŠ usado para especificar uma API ou URL de serviço que verifica a disponibilidade do nome de usuĂĄrio. Ao contrĂĄrio do  base_url, que ĂŠ usado para pesquisar diretamente URLs de perfil, o  url_probe gera uma solicitação de API diferente, e o GoSearch exibirĂĄ a URL da API no terminal em vez da URL do perfil.

Por exemplo, os perfis do Duolingo estĂŁo disponĂ­veis em  https://duolingo.com/profile/{}, mas para verificar se um nome de usuĂĄrio estĂĄ disponĂ­vel, o Duolingo fornece uma URL de API:  https://www.duolingo.com/2017-06-30/users?username={}. Se usĂĄssemos o  url_probe como  base_url, o terminal mostraria algo como  https://www.duolingo.com/2017-06-30/users?username=ibnaleem em vez da URL do perfil do usuĂĄrio  https://duolingo.com/profile/ibnaleem, o que poderia confundir os usuĂĄrios. Essa distinção ajuda a manter o processo mais claro e intuitivo, especialmente para aqueles que podem estar menos familiarizados com programação.

errorType

Existem 4 tipos de erro

  1. status_code - um cĂłdigo de status especĂ­fico que ĂŠ retornado se um nome de usuĂĄrio nĂŁo existir (normalmente  404)
  2. errorMsg - uma mensagem de erro personalizada que o site exibe e que ĂŠ exclusiva para nomes de usuĂĄrios que nĂŁo existem
  3. profilePresence uma mensagem personalizada que o site exibe e que ĂŠ exclusiva para nomes de usuĂĄrios existentes.
  4. unknown - quando nĂŁo hĂĄ como verificar a diferença entre um nome de usuĂĄrio que existe e um que nĂŁo existe no site

status_code

A maneira mais fåcil de contribuir Ê simplesmente encontrar um perfil existente e fazer uma solicitação com o seguinte código:

pacote principal

importação (
"fmt"
"log"
"net/http"
"os"
)

func MakeRequest(url string) {
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}

adiar resp.Body.Close()

fmt.Println("Resposta:", resp.Status)
}

func main() {
var url string = os.Args[1]
MakeRequest(url)
}

$ go build
$ ./request https://yourwebsite.com/username
Response: 200 OK

Onde username Ê o nome de usuårio existente no site. Então, faça a mesma solicitação com um nome de usuårio que não existe no site:

$ ./request https://yourwebsite.com/usernamedoesnotexist
Response: 404 Not Found

Copie e defina  errorCode, o campo abaixo  errorType, como o cĂłdigo que serĂĄ impresso no terminal (neste caso ĂŠ  404).

errorMsg

Isso ĂŠ mais complicado, entĂŁo o que vocĂŞ precisa fazer ĂŠ baixar o corpo da resposta para um arquivo. Felizmente, eu jĂĄ escrevi o cĂłdigo para vocĂŞ:

pacote principal

importação (
"fmt"
"io"
"log"
"net/http"
"os"
)

func MakeRequest(url string) {
resp, err := http.Get(url)
if err != nil {
log.Fatal(err)
}
defer resp.Body.Close()
corpo, err := io.ReadAll(resp.Body)
if err != nil {
log.Fatal(err)
}
fmt.Println(string(corpo))
os.WriteFile("response.txt", []byte(corpo), 0644)
}

func main() {
url := os.Args[1] // Pega URL como argumento da linha de comando
MakeRequest(url)
}

$ go build
./test https://website.com/username

Mais uma vez, o primeiro nome de usuĂĄrio corresponde a uma conta existente, enquanto o segundo nome de usuĂĄrio ĂŠ para uma conta que nĂŁo existe. Certifique-se de renomear  response.txt para evitar que meu cĂłdigo o sobrescreva.

$ mv response.txt username_found.txt
$ ./test https://website.com/username_does_not_exist
$ mv response.txt username_not_found.txt

VocĂŞ precisarĂĄ analisar o corpo da resposta de  username_not_found.txt e comparĂĄ-lo com  username_found.txt. Procure por qualquer palavra, frase, tag HTML ou outro elemento exclusivo que apareça somente em  username_not_found.txt. Depois de identificar algo distinto, adicione-o ao  errorMsg campo abaixo do  errorType campo. Lembre-se de que  errorType sĂł pode ter um campo abaixo dele: ou  errorCode ,  errorMsgmas  nĂŁo ambos . Abaixo estĂĄ  incorreto :

{
"errorType": "status_code",
"errorCode": 404,
"errorMsg": "<title>OlĂĄ, Mundo</title>"
}

errorMsg

O exato oposto de  errorMsg; em vez de analisar o  username_not_found.txtcorpo de resposta do , analise o  username_found.txtcorpo de resposta do para encontrar qualquer palavra, frase, tag HTML ou outro elemento exclusivo que apareça somente em  username_found.txt. Defina  errorType: profilePresence e defina o  errorMsg para o que vocĂŞ encontrou.

"unknown"

Ocasionalmente, o corpo da resposta pode estar vazio ou nĂŁo ter nenhum conteĂşdo exclusivo nos  arquivos username_not_found.txt e  username_found.txt . ApĂłs tentar cookies, usando o  www. subdomĂ­nio, vocĂŞ fica sem respostas. Nesses casos, defina o  errorType para  "unknown" (como uma string) e inclua um  404 errorCode campo abaixo dele.

cookies

Alguns sites podem exigir cookies para recuperar dados especĂ­ficos, como cĂłdigos de erro ou informaçþes de sessĂŁo. Por exemplo, o site  dzen.ru exige o cookie  zen_sso_checked=1, que ĂŠ incluĂ­do nos cabeçalhos de solicitação ao fazer uma solicitação do navegador. Para testar cookies e analisar a resposta, vocĂŞ pode usar o seguinte cĂłdigo Go:

pacote principal

import (
"fmt"
"log"
"net/http"
"os"
)

func MakeRequest(url string) {
client := &http.Client{}

// Cria uma nova solicitação HTTP GET
req, err := http.NewRequest("GET", url, nil)
if err != nil {
log.Fatalf("Erro ao criar solicitação: %v", err)
}

// Cria o cookie cookie
:= &http.Cookie{
Nome: "cookie_name",
Valor: "cookie_value",
}

// Adiciona o cookie à solicitação
req.AddCookie(cookie)

// Envia a solicitação
resp, err := client.Do(req)
if err != nil {
log.Fatalf("Erro ao fazer solicitação: %v", err)
}
defer resp.Body.Close()

// Exibe o status da resposta
fmt.Println("Status da resposta:", resp.Status)
}

func main() {
// Garanta que a URL seja fornecida como o primeiro argumento
se len(os.Args) < 2 {
log.Fatal("A URL ĂŠ necessĂĄria como o primeiro argumento.")
}
url := os.Args[1]
MakeRequest(url)
}

Ao testar cookies, verifique o status e o corpo da resposta. Por exemplo, se vocĂŞ sempre recebe uma  200 OK resposta, tente adicionar  www. antes da URL, pois alguns sites redirecionam com base nisso:

$ curl -I https://pinterest.com/username
HTTP/2 308
...
location: https://www.pinterest.com/username
$ curl -I https://www.pinterest.com/username
HTTP/2 200

AlĂŠm disso, certifique-se de usar o cĂłdigo acima para analisar o corpo da resposta ao incluir o  www. subdomĂ­nio e os cookies relevantes.

Para contribuir, siga o modelo acima, abra um PR e eu o mesclarei se  GoSearch conseguir detectar as contas com sucesso.

LICENÇA

Este projeto estĂĄ licenciado sob a GNU General Public License - veja o  arquivo LICENSE  para mais detalhes.

ComentĂĄrios

Ebook

Postagens mais visitadas