Information Gathering: Coleta de email em Posts do Linkedin

As redes sociais são um buraco sem fim quando se trata de usuários expondo dados pessoais. isso qualquer analista de segurança sabe, e tal característica  pode ser usado como uma fonte rica para ataques direcionados.

Criou-se um comportamento padrão em post’s LinkedIn onde o “influenciador” posta um X conteúdo e para você reles mortal ter acesso, tem que fazer um comentar com seu e-mail para o tal “coach” enviar o resto do conteúdo ou uma planilha mágica.
TÉCNICA
Basicamente encontramos uma padrão de URL nos posts do LinkedIn e com tal informação é possível criar dorks de busca e extrair os emails.
EXEMPLO DE URLS
  1. https://www.linkedin.com/pulse/planilha-de-controle-ordem-produção-marcos-rieper/
  2. https://www.linkedin.com/pulse/planilha-para-avaliação-de-desempenho-e-competências-plano-garcia/
  3. https://www.linkedin.com/pulse/planilha-teste-para-estagiárioxlsdownload-gratuito-arthur/

Identificando o padrão de string www.linkedin.com/pulse/ é possível criar a dork para filtro dos targets.

DORK
  • site: linkedin.com “linkedin.com/pulse/” “Planilha”

RESULT
EXTRAÇÃO DE TARGET

A extração é bem simples, usei mais do mesmo RR ( Regex + Request ), o único diferencial é pegar um ID criado no Body do post que possibilita pegar todos e-mails do post sem necessidade de paginação.
REVIEW SCRIPT DE COLETA

REQUEST PEGANDO ID

exec("curl -kg --user-agent '{$user_agent}' '{$url_target}'>tmp");

GREP PERMALINK AND ID_URN

$data_article_permalink =  'cat tmp | grep -oP '(?<=data-article-permalink=").*?(?=">)'';")'
$data_article_urn =  'cat tmp | grep -oP '(?<=data-article-urn="urn:li:article:).*?(?=")'';

URL REQUEST

$url_request_dump_email = "https://www.linkedin.com/content-guest/article/comments/urn%3Ali%3Aarticle%3A{$return[0]}?count=100&start=0&articlePermalink={$return[1]}";

DUMP FILES

$file_dump_html = "dump_html_tmp_{$return[0]}";
$file_dump_email = "emails_{$return[0]}";

REQUEST URL DUMP DE COMENTÁRIOS

exec("curl -kg --user-agent '{$user_agent}' '{$url_request_dump_email}'>'{$file_dump_html}'");

GREP EMAILS

exec('cat "'.$file_dump_html.'" | grep -E -o 'b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}b' | sort | uniq >'.$file_dump_email);
CODE
$targets = array_unique(explode("n",file_get_contents("posts.targets")));
$user_agent = 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0';

foreach ($targets as $key => $url_target) {
   
   #REQUEST PEGANDO ID
   exec("curl -kg --user-agent '{$user_agent}' '{$url_target}'>tmp");
   
   #GREP  ID
   $data_article_permalink =  'cat tmp | grep -oP '(?<=data-article-permalink=").*?(?=">)'';
   $data_article_urn =  'cat tmp | grep -oP '(?<=data-article-urn="urn:li:article:).*?(?=")'';
   $return[] = exec("{$data_article_urn}");
   $return[] = exec("{$data_article_permalink}");

   #SLEEP
   $sleep = random_int(1,5);
   sleep($sleep);

   #URL REQUEST
   $url_request_dump_email = "https://www.linkedin.com/content-guest/article/comments/urn%3Ali%3Aarticle%3A{$return[0]}?count=100&start=0&articlePermalink={$return[1]}";
   $file_dump_html = "dump_html_tmp_{$return[0]}";
   $file_dump_email = "emails_{$return[0]}";
   
   #REQUEST URL COMENTÁRIOS
   exec("curl -kg --user-agent '{$user_agent}' '{$url_request_dump_email}'>'{$file_dump_html}'");
   
   #GREP EMAILS
   exec('cat  "'.$file_dump_html.'" | grep -E -o 'b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+.[A-Za-z]{2,6}b' | sort | uniq >'.$file_dump_email);
   echo " DUMP HTML: {$file_dump_html} n EMAIL: {$file_dump_email}n URL: {$url_request_dump_email}nn";
   $log = "n-------------------------------------------n";
   $log.= "nDATA:".date('d-m-Y H:i:s');
   $log.= "nURL:".$url_request_dump_email;
   $log.= "n-------------------------------------------n";
   file_put_contents("{$file_dump_email}",$log,FILE_APPEND);

   #SLEEP
   sleep($sleep);
   unset($return);
}

https://gist.github.com/MrCl0wnLab/eb26ff29d9b07e79b18bfface7f790d8.js

RESULT GREP

SCRIPT COMPLETO

CONCLUSÃO

User continue assim tks.

RECOMENDAÇÃO

User coloca sua senha tbm.