Post

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.

O comportamento de interação representam um desafio constante para a privacidade dos usuários, pois muitos expõem voluntariamente dados pessoais sensíveis, tornando-se vulneráveis dentro do contexto de engenharia social e tal característica pode ser usado como uma fonte rica para ataques direcionados.

Criou-se um padrão de comportamento recorrente em posts do LinkedIn, onde um ‘influenciador’ compartilha apenas uma parte do conteúdo (X) e, para acessar o restante ou receber uma “planilha mágica” o tal conteúdo “ouro”, os usuários são incentivados a comentar com seu e-mail. Esse comportamento pode sair caro, quando tratamos dados com bens e ativos constantemente procurados por fraudadores.

Técnica

Basicamente encontramos um padrão de URL nos posts do LinkedIn e com tal informação é possível criar dorks de busca e extrair os emails de forma massiva.

Exemplo de URLS

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

Dork criada

1
site:linkedin.com "linkedin.com/pulse/" "Planilha"

Resultado

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

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

GREP permalink and ID_URN

1
2
$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

1
$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

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

Request URL dump de comentários

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

GREP de e-mails

1
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);

Código completo

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
$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);
}

Resultado do GREP

Script completo

Post feito ao som de

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.