Blog JSystems - uwalniamy wiedzę!

Szukaj

Zanim pentester uruchomi pierwszy exploit, spędza godziny - nierzadko całe dni - na pasywnym recon. Dobry OSINT potrafi ujawnić rzeczy, których nie znajdziesz żadnym skanerem: hasła w leaked dumps z poprzednich lat, wewnętrzne adresy IP ukryte w metadanych dokumentów PDF, profile pracowników na LinkedIn, które wprost zdradzają technologie używane w firmie. Wszystko to z publicznie dostępnych źródeł, bez wysyłania choćby jednego pakietu na serwer celu.

W tym artykule przejdziesz przez pełną metodologię OSINT - od planowania i zbierania informacji, przez konkretne narzędzia i komendy, po raportowanie znalezisk. Każdą technikę opiszemy zarówno z perspektywy ofensywnej (jak działa atakujący), jak i defensywnej (co możesz zrobić, żeby ograniczyć własny footprint).

Czym jest OSINT i kiedy jest legalny

OSINT (Open Source Intelligence) - wywiad otwartoźródłowy - to metodologia zbierania i analizowania informacji wyłącznie z publicznie dostępnych źródeł. Termin pochodzi z wojskowości i wywiadu, ale od lat stanowi fundament testów penetracyjnych i analizy bezpieczeństwa w sektorze komercyjnym.

Źródła OSINT obejmują szeroki zakres danych:

  • publiczne strony internetowe, blogi, fora dyskusyjne
  • media społecznościowe: LinkedIn, Twitter/X, GitHub, Facebook
  • rejestry DNS, WHOIS, certyfikaty SSL (Certificate Transparency)
  • metadane dokumentów (PDF, DOCX, XLSX) publicznie dostępnych na stronach
  • bazy danych wycieków (HaveIBeenPwned, DeHashed, Breach Forums)
  • repozytoria kodu (GitHub, GitLab, Bitbucket)
  • wyspecjalizowane wyszukiwarki urządzeń (Shodan, Censys, FOFA)
  • archiwa web (Wayback Machine, CachedView)
  • ogłoszenia o pracę (z nich wynika stosowany stack technologiczny)
  • rejestracje firm, KRS, REGON, przetargi publiczne

Ramy prawne w Polsce - art. 267 KK i autoryzacja

OSINT jest legalny, gdy dotyczy własnej organizacji, jest wykonywany w ramach autoryzowanego testu penetracyjnego (z pisemną zgodą właściciela systemu) lub jest częścią CTF (Capture The Flag). Art. 267 Kodeksu karnego penalizuje nieautoryzowany dostęp do systemów informatycznych - sama analiza publicznie dostępnych danych jej nie narusza.

Defensywne użycie OSINT - regularne sprawdzanie własnego footprintu z perspektywy atakującego - to element dojrzałości bezpieczeństwa każdej organizacji. Jeśli Ty to widzisz, widzi to też przeciwnik.

Metodologia OSINT - Intelligence Cycle

Profesjonalny OSINT nie polega na chaotycznym "googlowaniu". Każde badanie powinno przejść przez cztery etapy Intelligence Cycle:

1. Planowanie - co chcemy znaleźć?

Zdefiniuj cel: domena, organizacja, konkretna osoba, zakres IP. Określ pytania, na które chcesz odpowiedzieć: Czy firma ma publicznie dostępne subdomeny z panelami administracyjnymi? Czy pracownicy używają firmowych emaili w zewnętrznych serwisach? Czy w repozytoriach kodu są hardcodowane klucze API? Bez jasnego celu zbierasz góry danych bez wartości.

2. Zbieranie - pasywne i aktywne

Pasywne zbieranie (recon) oznacza, że cel nie zobaczy Twojego ruchu w logach - korzystasz z danych pośrednich (Google, Shodan, crt.sh). Aktywne zbieranie wysyła zapytania bezpośrednio do infrastruktury celu (nslookup, ping, skanowanie portów) - zostawia ślady. W pentestach czarnoskrzynkowych zacznij od pasywnego.

3. Analiza - łączenie kropek

Sam fakt, że firma używa Apache 2.4.49, nic nie znaczy - ale w połączeniu z informacją, że ta wersja jest podatna na CVE-2021-41773 (path traversal RCE), i że serwer jest publicznie dostępny na porcie 80, staje się znaleziskiem krytycznym. Do analizy powiązań świetnie sprawdza się Maltego lub proste grafy w Obsidian/draw.io.

4. Raportowanie - co i jak dokumentować

Każde znalezisko: timestamp kiedy znalezione, źródło (URL, narzędzie), screenshot lub surowe dane, ocena ryzyka. Dobrze udokumentowany OSINT to podstawa raportu z pentestu i dowód w przypadku sporu co do zakresu badania.

Google Dorks - zaawansowane wyszukiwanie informacji

Google Dorks (zwane też Google Hacking) to zaawansowane operatory wyszukiwania, które pozwalają precyzyjnie wskazywać typy plików, frazy w tytułach stron czy zawartości URL. To jedno z najpotężniejszych narzędzi OSINT - i nie wymaga instalacji niczego.

# Dokumenty z potencjalnie wrażliwą zawartością
site:target.pl filetype:pdf "confidential"
site:target.pl filetype:xlsx "password"
site:target.pl filetype:docx "internal use only"

# Otwarte katalogi (directory listing)
intitle:"index of" site:target.pl
intitle:"index of" "backup" site:target.pl

# Panele administracyjne
inurl:admin site:target.pl
inurl:login inurl:admin site:target.pl
inurl:wp-admin site:target.pl
inurl:phpmyadmin site:target.pl

# Błędy baz danych (świadczą o podatnościach SQL Injection)
site:target.pl "ORA-01756" OR "ORA-00907"
site:target.pl "mysql_fetch_array" OR "mysql_num_rows"
site:target.pl "Uncaught exception" OR "Fatal error"
site:target.pl "Warning: pg_connect()"

# Pliki konfiguracyjne i backupy
site:target.pl ext:conf OR ext:cfg OR ext:ini OR ext:env
site:target.pl ext:bak OR ext:backup OR ext:old
site:target.pl "config.php" OR ".env" OR "web.config"

# Subdomeny (pasywne wyliczanie)
site:*.target.pl -www -mail -smtp -pop3

# Wycieki kredencjałów na GitHub
"target.pl" site:github.com password OR secret OR api_key OR token
"@target.pl" site:github.com "BEGIN RSA PRIVATE KEY"
"target.pl" site:pastebin.com
Wynik operatora site: w wyszukiwarce Google
Operator site: w Google - jednym zapytaniem zwraca wszystkie zaindeksowane podstrony domeny. To punkt wyjścia do dalszych dorków zawężających po typie pliku, tytule czy fragmencie URL.

Gotowe dorki dla znanych podatności znajdziesz w Google Hacking Database (GHDB) na exploit-db.com - tysiące skategoryzowanych zapytań dla paneli logowania, kamer IP, plików konfiguracyjnych i wiele więcej. Używaj z głową i tylko na autoryzowanych celach.

Google Hacking Database na exploit-db.com - przeszukiwalna tabela gotowych dorków
Google Hacking Database na exploit-db.com - przeszukiwalna baza ponad 7 tysięcy gotowych dorków z podziałem na kategorie (m.in. Files Containing Passwords, Vulnerable Servers, Sensitive Directories) i datą dodania. Każdy wpis to gotowe zapytanie do skopiowania i uruchomienia w wyszukiwarce.

Inne wyszukiwarki warte uwagi

Bing (ip: operator) indeksuje inne strony niż Google. DuckDuckGo bywa mniej agresywny w filtrowaniu wyników. Yandex szczególnie dobrze indeksuje zasoby wschodnioeuropejskie. Używaj kilku wyszukiwarek równolegle - każda ma inne indeksy.

DNS i subdomain enumeration

Subdomeny to często zapomniane wejścia do infrastruktury: dev.target.pl, staging.target.pl, vpn-old.target.pl - środowiska testowe ze starym oprogramowaniem, panele administracyjne bez zewnętrznego dostępu z głównej domeny, zapomniane serwery. Pasywna enumeracja subdomen jest całkowicie legalna i nie zostawia śladów w logach celu.

# WHOIS - właściciel domeny, dane rejestracyjne, daty wygaśnięcia
whois target.pl
whois 1.2.3.4   # odwrotny WHOIS dla IP

# Rekordy DNS - wszystkie typy naraz
dig target.pl ANY
dig +short MX target.pl     # serwery mailowe (wynika technologia email: GSuite, O365, własny)
dig +short TXT target.pl    # SPF, DMARC, weryfikacje usług (Google Workspace, HubSpot...)
dig +short NS target.pl     # name serwery (provider hostingu)
nslookup -type=TXT target.pl

# Subdomain brute-force (aktywne - wysyła zapytania DNS)
dnsenum --dnsserver 8.8.8.8 --enum target.pl -f /usr/share/wordlists/dnsmap.txt
subfinder -d target.pl -o subdomains.txt
amass enum -passive -d target.pl        # tryb pasywny (tylko zewnętrzne źródła)
amass enum -active -brute -d target.pl  # aktywny brute-force

# Certificate Transparency - PASYWNE, absolutnie nie zostawia śladów
# crt.sh to publiczne logi certyfikatów SSL - każdy cert wystawiony dla *.target.pl jest widoczny
# (do parsowania JSON potrzebny jq: sudo apt install jq)
curl "https://crt.sh/?q=%.target.pl&output=json" | jq -r '.[].name_value' | sort -u

# Reverse DNS dla zakresu IP - znajdź inne domeny na tym samym serwerze
for ip in $(dig +short target.pl); do
  dig +short -x $ip
done

# DNS zone transfer - rzadko działa, ale warto sprawdzić
dig axfr target.pl @ns1.target.pl
Wyniki wyszukiwania certyfikatów w crt.sh dla domeny
crt.sh - publiczne logi Certificate Transparency. Każdy certyfikat SSL wystawiony dla domeny ujawnia jej subdomeny (tu m.in. blog, ankiety, apex, phoenix) - całkowicie pasywnie, bez jednego pakietu na serwer celu.

DNSDumpster (dnsdumpster.com) to darmowy web tool, który agreguje rekordy DNS i rysuje mapę infrastruktury - świetny punkt startowy. SecurityTrails i VirusTotal prowadzą historyczne rekordy DNS - pokazują, jak adresy IP i serwery domeny zmieniały się w czasie, co często ujawnia zapomniane lub wycofane hosty.

DNSDumpster - mapa infrastruktury i tabela rekordów A dla domeny
DNSDumpster - jednym zapytaniem buduje mapę infrastruktury domeny: rozkład hostingu wg sieci (NETARTGROUP, Google, IONOS, Microsoft, OVH), bannery usług (nginx, OpenSSH, FTP, Oracle XML DB) i tabelę rekordów A z subdomenami, ich ASN i wykrytymi usługami. Adresy IP zamaskowaliśmy - na żywym narzędziu są jawne.

Shodan - Google dla urządzeń IoT i serwerów

Shodan to wyszukiwarka, która zamiast stron internetowych indeksuje usługi sieciowe: otwarte porty, bannery serwisów, certyfikaty SSL, wersje oprogramowania. Skanuje cały internet i aktualizuje indeks regularnie - wystarczy zapytanie, żeby zobaczyć co dana organizacja wystawia na świat.

# Szukaj po organizacji (ASN/ISP)
org:"Firma XYZ Sp. z o.o."
org:"JSystems"

# Szukaj po domenie/hostname
hostname:target.pl
hostname:.target.pl    # wszystkie subdomeny

# Szukaj po zakresie IP
net:1.2.3.0/24

# Specyficzne usługi i porty - Polska
port:3389 country:PL                        # RDP dostępne publicznie w Polsce
port:22 banner:"OpenSSH 7" country:PL       # stare wersje SSH
port:5432 country:PL                        # PostgreSQL wystawiony publicznie
port:27017 country:PL "MongoDB"             # MongoDB bez autentykacji

# Podatne wersje oprogramowania
product:"Apache httpd" version:"2.4.49"     # CVE-2021-41773 (RCE)
product:"Microsoft IIS" version:"6.0"       # Windows Server 2003 - EOL
product:"OpenSSL" version:"1.0.1"          # podatna na Heartbleed

# Domyślne hasła, panele administracyjne
"default password" country:PL
http.title:"Cisco IOS" country:PL
http.title:"Router Login" country:PL
http.title:"phpMyAdmin" port:80 country:PL

# Wyszukaj certyfikat SSL powiązany z domeną
ssl:"target.pl"
ssl.cert.subject.cn:target.pl
Wyniki wyszukiwania w Shodan z rozkładem krajów i portów
Shodan - wyniki wyszukiwania. Po lewej rozkład trafień wg krajów, portów i organizacji; po prawej bannery usług (serwer, wersja oprogramowania, nagłówki HTTP) dla każdego znalezionego hosta. Samo przeglądanie indeksu nie generuje ruchu na serwerze celu.
Shodan - wyniki zapytania port:3389 country:PL, ponad 8 tysięcy hostów RDP wystawionych publicznie w Polsce
Zapytanie port:3389 country:PL - ponad 8 tysięcy usług Pulpitu zdalnego (RDP) wystawionych publicznie w Polsce, z rozbiciem na miasta, dostawców i produkty. Każdy z tych hostów to gotowa powierzchnia ataku (zgadywanie haseł, podatności RDP). Adresy IP i nazwy hostów zamaskowaliśmy - na żywym Shodanie są jawne.
Shodan - wyniki zapytania product Apache httpd version 2.4.49, ponad tysiąc serwerów podatnych na CVE-2021-41773
Zapytanie product:"Apache httpd" version:"2.4.49" - ponad tysiąc serwerów wciąż na Apache 2.4.49, wersji podatnej na CVE-2021-41773 (path traversal prowadzący do zdalnego wykonania kodu). Nagłówek Server: Apache/2.4.49 w bannerze zdradza wersję wprost - to praktycznie gotowa lista celów. Adresy zamaskowaliśmy.

Shodan CLI i API

# Instalacja CLI
pip install shodan
shodan init YOUR_API_KEY

# Wyszukiwanie przez CLI
shodan search --fields ip_str,port,org "hostname:target.pl"
shodan host 1.2.3.4        # informacje o konkretnym IP

# Python API - automatyczne skanowanie zakresu
import shodan
api = shodan.Shodan("YOUR_API_KEY")
results = api.search("org:'Firma XYZ' country:PL")
for r in results['matches']:
    print(f"{r['ip_str']}:{r['port']} - {r.get('product','')} {r.get('version','')}")

Shodan Monitor (płatna funkcja) pozwala skonfigurować alert - gdy nowe IP z Twojej organizacji pojawi się w indeksie, dostaniesz powiadomienie. Dla zespołów security to must-have.

Alternatywy: Censys (lepszy przy analizie certyfikatów SSL), FOFA (chiński odpowiednik, czasem indeksuje inne zasoby), ZoomEye (warto sprawdzić przy celach globalnych).

Pamiętaj: Shodan tylko indeksuje dane - sam fakt, że sprawdzasz domenę w Shodan, nie generuje ruchu na serwerze celu. To w pełni pasywna technika.

Email i breach databases - wyciekłe dane uwierzytelniające

Jednym z najcenniejszych znalezisk w OSINT są adresy email pracowników połączone z informacją, że ich hasła wyciekły w przeszłości. W świecie, gdzie ponowne używanie tego samego hasła (password reuse) jest nagminne, nawet 5-letni wyciek może dawać aktualny dostęp.

Stąd bierze się popularny atak zwany password spray („rozpylanie hasła"). Zamiast bombardować jedno konto tysiącem haseł - co szybko wywoła blokadę konta - atakujący odwraca logikę: bierze jedno hasło (popularne, jak Wiosna2026!, albo wprost wykradzione z wycieku) i próbuje go po kolei na setkach kont firmowych. Wystarczy, że pasuje do jednego pracownika, a każde konto dostaje tylko jedną próbę - poniżej progu blokady. Dlatego lista nazwisk i loginów z OSINT plus jedno hasło z wycieku to gotowy scenariusz włamania.

Podstawowym narzędziem do takiego sprawdzenia jest Have I Been Pwned (HIBP) - bezpłatny serwis haveibeenpwned.com stworzony przez badacza bezpieczeństwa Troya Hunta, gromadzący dane z setek publicznie ujawnionych naruszeń. Wpisujesz adres email, a HIBP pokazuje, w ilu i w których wyciekach ten adres się pojawił oraz jakie kategorie danych ujawniono (hasła, numery telefonów, adresy). Dla analityka OSINT to pierwszy ruch w fazie zbierania: sprawdzić, czy adresy pracowników celu figurują w znanych wyciekach. Poniższy zrzut to wynik realnego sprawdzenia pojedynczego adresu - serwis zwrócił historię naruszeń, w których się pojawił.

Historia wycieków danych dla adresu email w Have I Been Pwned
Have I Been Pwned - historia naruszeń dla sprawdzanego adresu. Tu adres figuruje w 256 wyciekach; każdy z nich to potencjalne, wciąż używane hasło, gotowe do ataku password spray.

theHarvester - automatyczne zbieranie adresów email

HIBP odpowiada na pytanie „czy ten adres wyciekł", ale najpierw trzeba mieć listę adresów i hostów do sprawdzenia. Do ich zebrania służy theHarvester - klasyczne, darmowe narzędzie open source autorstwa Christiana Martorelli (Edge-Security), jedno z pierwszych, po które sięga pentester w fazie rozpoznania. Jednym poleceniem odpytuje kilkanaście publicznych źródeł naraz (m.in. certyfikaty z crt.sh, DuckDuckGo, AlienVault OTX, RapidDNS, HackerTarget, Certspotter, a po podaniu kluczy API także Shodan i VirusTotal) i zwraca adresy email pracowników, subdomeny oraz hosty powiązane z badaną domeną - wszystko pasywnie, bez wysyłania ruchu na serwer celu.

Instalacja theHarvester od zera

Tylko w Kali Linux (i Parrot OS) theHarvester jest gotowym pakietem w repozytorium - wystarczy jedno polecenie. Uwaga: w zwykłym Debianie ani Ubuntu tego pakietu nie ma (apt install theharvester zwróci „Unable to locate package"), a pakiet theHarvester z PyPI to nieaktualna zaślepka. Tam instalujesz go ze źródeł menedżerem uv. Poniższy zestaw poleceń przeszedłem na czystej Ubuntu 24.04 - kończy się globalnie dostępną komendą theHarvester:

# === Kali Linux / Parrot OS (jest w repo dystrybucji) ===
sudo apt update && sudo apt install theharvester
theHarvester -h                # weryfikacja: banner + pomoc

# === Debian / Ubuntu 24.04 / macOS / dowolny system: ze źródeł przez uv ===
# Czysta Ubuntu nie ma nawet git ani curl - najpierw je doinstaluj:
sudo apt update && sudo apt install -y git curl

# Menedżer uv (po instalacji dodaj go do PATH bieżącej sesji):
curl -LsSf https://astral.sh/uv/install.sh | sh
source $HOME/.local/bin/env

# Pobierz źródła i zainstaluj jako globalne narzędzie (komenda theHarvester w PATH):
git clone https://github.com/laramies/theHarvester
uv tool install ./theHarvester

theHarvester -h                # weryfikacja: banner + pomoc (działa globalnie)

Po tej instalacji komenda theHarvester działa z dowolnego katalogu. Jeśli wolisz nie instalować jej globalnie, możesz pominąć uv tool install i uruchamiać narzędzie z katalogu repozytorium poleceniem uv run theHarvester ... (po wcześniejszym uv sync).

Użycie - przykład na jsystems.pl

Podstawowe wywołanie wskazuje domenę (-d), listę źródeł rozdzieloną przecinkami bez spacji (-b) i limit wyników na źródło (-l). Poniższy zestaw źródeł nie wymaga żadnych kluczy API - działa od razu po instalacji:

# Pasywne zbieranie z darmowych źródeł (bez kluczy API)
theHarvester -d jsystems.pl -b crtsh,otx,hackertarget,rapiddns,duckduckgo,certspotter -l 500

# Zapis wyników do raportu (-f tworzy raport.json i raport.xml)
theHarvester -d jsystems.pl -b crtsh,otx,hackertarget,rapiddns,certspotter -f raport

# Źródła wymagające klucza API (shodan, hunter, virustotal, securityTrails)
# podajesz w pliku /etc/theHarvester/api-keys.yaml - wtedy dorzucasz je do -b

Lista dostępnych źródeł zmienia się między wersjami - pełny, aktualny zestaw zobaczysz poleceniem theHarvester -h (sekcja -b). Nazwy takie jak google, bing czy linkedin z dawnych poradników w nowych wydaniach już nie istnieją - jeśli podasz nieobsługiwane źródło, narzędzie zwróci błąd.

theHarvester uruchomiony w terminalu Kali Linux - banner i przeszukiwanie źródeł dla domeny jsystems.pl
theHarvester 4.10.1 uruchomiony w Kali Linux dla domeny jsystems.pl. Po bannerze narzędzie kolejno odpytuje wskazane źródła (Duckduckgo, Certspotter, Hackertarget, Rapiddns, CRTsh, Otx) - każde dokłada inny fragment obrazu, wszystko pasywnie.

Po kilku sekundach theHarvester zwraca zagregowaną listę. Dla jsystems.pl wynik to 25 hostów - w tym subdomeny, których nie ma w głównym menu strony: środowiska deweloperskie (ankiety-dev, stc-dev), instancje narzędzi (n8n-demo, monitoring) i aplikacje wewnętrzne. Każda z nich to potencjalny, słabiej pilnowany punkt wejścia. To samo ćwiczenie warto zrobić na własnej domenie, żeby zobaczyć, co wystawiasz na świat.

theHarvester - lista 25 hostów znalezionych dla domeny jsystems.pl z zamaskowanymi adresami IP
Wynik theHarvester dla jsystems.pl: 25 hostów zebranych pasywnie z publicznych źródeł, w tym subdomeny deweloperskie i wewnętrzne instancje narzędzi, każdy z adresem IP wykrytym z rekordów DNS.

W tym pasywnym przebiegu theHarvester nie znalazł adresów email (na zrzucie sekcja „No emails found") - przy darmowych źródłach to częste, bo większość maili siedzi za logowaniem albo w źródłach wymagających klucza API (Hunter.io, dehashed). Gdy jednak adresy się pojawią - z theHarvester po dodaniu kluczy, z Hunter.io albo z metadanych dokumentów - kolejnym krokiem jest sprawdzenie ich w bazie HIBP: czy któryś figuruje w znanych wyciekach. Zapytanie do API wymaga klucza (HIBP udostępnia go odpłatnie):

# Sprawdź pojedynczy adres w Have I Been Pwned (HIBP)
curl -s "https://haveibeenpwned.com/api/v3/breachedaccount/user@jsystems.pl" \
  -H "hibp-api-key: YOUR_HIBP_KEY" \
  -H "User-Agent: OSINT-Assessment"

# Masowe sprawdzanie listy adresów z pliku emails.txt
while read email; do
  result=$(curl -s -H "hibp-api-key: YOUR_HIBP_KEY" \
    "https://haveibeenpwned.com/api/v3/breachedaccount/$email")
  if [ "$result" != "null" ] && [ -n "$result" ]; then
    echo "WYCIEK: $email - $result"
  fi
  sleep 1.5  # limit zapytań: maks. 1 co 1,5 s
done < emails.txt

Znajdowanie emaili pracowników

Hunter.io (hunter.io) - wpisz domenę, zwraca listę emaili z publicznych źródeł + schemat formatu (imie.nazwisko@target.pl lub i.nazwisko@target.pl). Darmowe 25 zapytań miesięcznie.

# Hunter.io API
curl "https://api.hunter.io/v2/domain-search?domain=target.pl&api_key=YOUR_KEY"

# Emailrep.io - reputacja adresu email (wymaga darmowego klucza API; bez niego limit zapytań / HTTP 429)
curl "https://emailrep.io/user@target.pl" -H "Key: YOUR_EMAILREP_KEY"
# Zwraca: czy email w breach DB, czy używany w social media, data ostatniej aktywności

Monitoring Pastebin i GitHub: Usługi takie jak Leakix.net, Breachforums (monitoruj przez bezpieczne przeglądarki) czy IntelX (intelligence.x) indeksują wycieki w czasie rzeczywistym. Dedykowane narzędzia jak PasteHunter automatyzują monitoring Pastebin pod kątem fraz związanych z Twoją organizacją.

Metadane dokumentów - ukryte informacje w plikach

Dokumenty publikowane na stronach firmowych (raporty roczne, specyfikacje, prezentacje, instrukcje) niosą w sobie metadane: nazwisko autora, login domenowy, wewnętrzne ścieżki plików, używane oprogramowanie i jego wersje, daty modyfikacji, nazwy serwerów. To kompletna mapa środowiska - gotowa do odkrycia bez jednego pakietu sieciowego na cel.

# Pobierz pliki PDF i DOCX z domeny (wget spider)
wget -r -l 2 -A ".pdf,.docx,.xlsx,.pptx" \
  --no-parent -nd -P ./docs \
  https://target.pl/

# ExifTool - wyciągnij wszystkie metadane z pliku
exiftool dokument.pdf
# Przykładowe wyniki:
# Author          : jan.kowalski@target.pl
# Creator         : Microsoft Word 2019
# Creator Tool    : Acrobat PDFMaker 21 for Word
# Company         : Target Sp. z o.o.
# Last Saved By   : WIN-SERVER2019\jan.kowalski
# Template        : \\fileserver\szablony\raport_roczny.dotx

# Masowe wyciąganie metadanych - szukaj loginów domenowych i emaili
exiftool -r -Author -Creator -LastSavedBy -Company \
  -Software -Producer -Template ./docs/ \
  | grep -iE '@target|\\target|target\\'

# Wyciągnij tylko autentyczne emaile z metadanych (unikaj śmieci)
exiftool -r -Author ./docs/ | grep -oP '[a-zA-Z0-9._%+\-]+@[a-zA-Z0-9.\-]+\.[a-zA-Z]{2,}'

# Usuń metadane ze swojego dokumentu przed publikacją
exiftool -all= -overwrite_original dokument.pdf

Te polecenia tworzą kompletny łańcuch. Najpierw wget w trybie pająka pobiera z domeny wszystkie pliki PDF, DOCX, XLSX i PPTX (do dwóch poziomów w głąb) do katalogu ./docs. Potem exiftool wyciąga z nich metadane - dla pojedynczego pliku albo, z flagą -r (rekurencyjnie), dla całego katalogu naraz.

Najważniejsze jest to masowe polecenie. Exiftool przechodzi po wszystkich pobranych dokumentach i wypisuje tylko wybrane pola (autor, twórca, „ostatnio zapisał", firma, oprogramowanie, szablon), a grep -iE '@target|\\target|target\\' przesiewa ten wysyp pod kątem trzech najcenniejszych wzorców: adresów email (fragment @target), ścieżek sieciowych UNC (\\target, czyli \\serwer\udział) oraz loginów domenowych (target\, czyli DOMENA\użytkownik). Słowo target podmieniasz na nazwę badanej firmy. Efekt: jednym łańcuchem poleceń wyłuskujesz z publicznych dokumentów nazwiska, loginy i nazwy wewnętrznych serwerów - bez logowania się gdziekolwiek. Ostatnia komenda (-all=) działa odwrotnie - czyści metadane z Twojego pliku, zanim go opublikujesz.

Metadane zdjęcia wyświetlone przez ExifTool w terminalu Kali
ExifTool na pojedynczym zdjęciu - ujawnia autora (Jan Kowalski), model aparatu (iPhone 14 Pro) i dokładne współrzędne GPS miejsca wykonania. Identyczne metadane kryją się w firmowych plikach PDF, DOCX i XLSX.

Co można znaleźć w metadanych? Historyczne loginy domenowe (DOMENA\uzytkownik) umożliwiają budowanie listy nazw użytkowników do ataków password spray. Wewnętrzne ścieżki UNC (\\fileserver\share\projekt) zdradzają nazwy serwerów wewnętrznych i strukturę zasobów. Wersje Acrobata czy Word mogą wskazywać niezałatane oprogramowanie.

FOCA (Fingerprinting Organizations with Collected Archives) to dedykowane narzędzie do automatycznej analizy metadanych - pobiera dokumenty z domeny, analizuje i wizualizuje znaleziska. Dostępne dla Windows.

LinkedIn i social media OSINT

LinkedIn to kopalnia informacji dla atakującego. Pracownicy sami publikują: stanowisko, zakres obowiązków, technologie których używają, projekty nad którymi pracują. Administrator sieci, który napisał „zarządzam środowiskiem Cisco ASA 5506 i Palo Alto" właśnie zdradził, jakiego firewalla używa jego pracodawca - bez żadnego skanowania. Prześledźmy to na publicznym profilu prawdziwej firmy - InPost (operator paczkomatów), korzystając wyłącznie z danych widocznych po zalogowaniu na zwykłe konto.

Profil firmy - punkt wyjścia

Zakładka „About" strony firmowej to gotowa metryczka organizacji. W przypadku InPostu czytamy z niej wprost: branża (Transport, logistyka, łańcuch dostaw), wielkość (przedział 1 001-5 000 pracowników), siedziba (Kraków), rok założenia (2006), oficjalna witryna oraz lista specjalizacji (od usług kurierskich po MVNO). Dla atakującego to ramy całego badania: skala firmy, główna lokalizacja (a więc i prawdopodobne strefy czasowe pracy oraz uczelnie, z których rekrutuje) i obszary działalności.

Strona firmowa InPost na LinkedIn - zakładka About z danymi o wielkości, siedzibie i specjalizacjach
Zakładka „About" profilu firmowego InPost na LinkedIn: branża, wielkość zatrudnienia (1 001-5 000), siedziba (Kraków), rok założenia (2006), witryna i specjalizacje. Punkt wyjścia każdego rozpoznania organizacji - wszystko publicznie, po zalogowaniu na zwykłe konto.

Mapowanie załogi bez klikania w profile

Zakładka „People" daje coś cenniejszego niż pojedyncze profile - zagregowaną analitykę całej załogi, bez potrzeby wchodzenia w czyjekolwiek dane osobowe. LinkedIn sam pokazuje, gdzie pracownicy mieszkają, gdzie studiowali i czym się zajmują. Dla InPostu (4 676 powiązanych członków na LinkedIn) widać, że załoga rekrutuje się głównie z krakowskich i warszawskich uczelni (AGH, SGH, Uniwersytet Ekonomiczny, UW, UJ), a w podziale funkcyjnym dominuje pion operacyjny, ale działy „Engineering" i „Information Technology" liczą po kilkaset osób. To gotowa mapa: które uczelnie podsuwać w pretekstach phishingu, jak duży jest zespół techniczny i gdzie szukać celów. Pole „Search employees by title, keyword or school" pozwala dodatkowo zawęzić listę po stanowisku - na przykład do osób z „security" albo „DevOps" w tytule.

Zakładka People profilu InPost - zagregowany rozkład pracowników wg lokalizacji, uczelni i funkcji
Zakładka „People" InPostu - zagregowany rozkład 4 676 pracowników: gdzie mieszkają, gdzie studiowali (AGH, SGH, UEK, UW, UJ) i czym się zajmują (pion operacyjny, Engineering, Information Technology...). Analityka na poziomie całej firmy, bez wchodzenia w dane konkretnych osób - idealna do mapowania powierzchni ataku.

Wyszukiwanie boolowskie - precyzyjne celowanie

Żeby z tysięcy pracowników wyłuskać konkretne role, używasz operatorów boolowskich - zarówno w wyszukiwarce LinkedIn, jak i w Google przez operator site:. Na przykład site:linkedin.com/in "InPost" (DevOps OR "Site Reliability" OR security) zwróci publiczne profile osób z tych obszarów. Operatory AND, OR, NOT, cudzysłowy (fraza dokładna) i nawiasy (grupowanie) działają jak w SQL - budujesz precyzyjne zapytanie zamiast przeglądać listę ręcznie. Tak powstaje orgchart: kto jest CTO, kto odpowiada za bezpieczeństwo, kto ma w tytule „cloud" czy „Kubernetes". To zarazem lista potencjalnych celów spear phishingu.

Realne wyszukiwanie boolowskie pracowników InPost na LinkedIn z zamaskowanymi danymi osób
Realne wyszukiwanie boolowskie na LinkedIn: zapytanie InPost AND (DevOps OR security OR "Site Reliability") zwraca listę pracowników z tych obszarów (tu m.in. DevOps, Cloud i AI Engineers). Zdjęcia i nazwiska zamaskowaliśmy - na żywo widać pełne profile, stanowiska i wspólne kontakty. Operatory AND/OR/NOT i cudzysłowy filtrują dokładnie ten dział, który Cię interesuje.
Wynik Google dla dorka site:linkedin.com/in InPost z operatorami boolowskimi - lista profili LinkedIn z zamaskowanymi nazwiskami
Ten sam manewr w Google, bez logowania do LinkedIn: dork site:linkedin.com/in "InPost" (DevOps OR "Site Reliability" OR security) zwraca publiczne profile pasujące do zapytania. Nazwiska i tytuły zamaskowaliśmy, ale w snippetach widać role i lokalizacje (Cloud Engineer, DevOps Engineer, Kraków/Gdańsk) - gotowy materiał wywiadowczy bez jednego kliknięcia w profil.

Oferty pracy jako wywiad technologiczny

Najbardziej niedoceniane źródło to ogłoszenia o pracę - firma sama opisuje w nich swój stos technologiczny, żeby przyciągnąć kandydatów. Spójrzmy na realną ofertę „Data Engineer" w InPoście. W sekcji „Main Activities" czytamy wprost, na czym stoi ich platforma danych: strumieniowanie na Apache Kafka (z ekosystemem Kafka Streams i Kafka Connect), przetwarzanie rozproszone w Apache Spark (PySpark i Scala) na Databricks, magazyn typu Delta Lake oraz bazy SQL i NoSQL. Jedno ogłoszenie - i znasz architekturę danych celu, wersje narzędzi i to, czy korzysta z chmury. Ogłoszenie „DBA SQL Server - wymagana znajomość SQL Server 2016" zdradziłoby z kolei starą, prawdopodobnie niezałataną wersję. Monitoruj LinkedIn Jobs, Pracuj.pl i NoFluffJobs pod kątem ofert celu.

Oferta pracy Data Engineer w InPoście na LinkedIn - opis ujawniający stos technologiczny: Kafka, Spark, Databricks, Delta Lake
Oferta „Data Engineer" w InPoście na LinkedIn. Sekcja „Main Activities" ujawnia kompletny stos danych: Apache Kafka (Streams, Connect), Apache Spark (PySpark, Scala) na Databricks, Delta Lake, bazy SQL i NoSQL. Jedno publiczne ogłoszenie = gotowa mapa technologii organizacji.

Od nazwisk do kont - enumeracja użytkowników

Mając listę nazwisk pracowników (z LinkedIn albo z Google), robisz kolejny krok: zamieniasz je na konkretne nazwy kont i sprawdzasz, gdzie te osoby są obecne w sieci. Służą do tego trzy narzędzia wiersza poleceń:

  • linkedin2username - pobiera pracowników firmy z LinkedIn i z ich imion oraz nazwisk generuje prawdopodobne loginy firmowe (jkowalski, jan.kowalski, j.kowalski...) - gotową listę pod atak password spray.
  • Sherlock - bierze pojedynczy pseudonim (nick) i sprawdza, na których z setek serwisów (GitHub, X, Reddit, Instagram...) takie konto istnieje.
  • socialscan - to samo dla wskazanych platform, dodatkowo po adresie email.

Najważniejsze: linkedin2username nie jest w repozytoriach systemu (ani w apt, ani gotowy w pip) - pobierasz go ze źródeł z GitHuba i instalujesz menedżerem uv (tym samym, co theHarvester wyżej). Wymaga też zainstalowanej przeglądarki - Chrome, Chromium albo Firefox - bo logowanie do LinkedIn odbywa się ręcznie w oknie, które narzędzie samo otworzy. Brak przeglądarki to typowy błąd Could not find a supported browser for Selenium. Z tego samego powodu narzędzie potrzebuje środowiska graficznego (pulpitu) - na serwerze bez GUI nie da się przejść ręcznego logowania.

# 1) Przeglądarka dla Selenium (bez niej: "Could not find a supported browser")
#    Ubuntu/Debian - Firefox z repozytorium albo Google Chrome z paczki .deb:
sudo apt install -y firefox            # lub: pobierz google-chrome-stable_*.deb i: sudo apt install ./google-chrome*.deb

# 2) linkedin2username - ze źródeł, instalacja przez uv (tak jak theHarvester)
git clone https://github.com/initstring/linkedin2username
cd linkedin2username
uv sync                                # tworzy venv i instaluje zależności (requests, selenium)

# 3) uruchomienie: -c = nazwa firmy z adresu URL profilu, -n = domena doklejana do loginów
#    narzędzie otworzy OKNO przeglądarki - logujesz się do LinkedIn ręcznie, potem Enter w terminalu
uv run python linkedin2username.py -c "target-firma" -n target.pl

# Sherlock - po nicku znajdź konta w setkach serwisów
# (na Ubuntu instaluj w aktywnym venv jak wyżej albo przez pipx)
pip install sherlock-project
sherlock jan.kowalski

# socialscan - sprawdź dostępność username/email na wybranych platformach
pip install socialscan
socialscan --platforms github twitter jan.kowalski@target.pl
Sherlock w terminalu Kali - wynik wyszukiwania konta o nazwie jsystems w wielu serwisach
Sherlock w akcji: jednym poleceniem sherlock hackerman sprawdził nick w setkach serwisów i zgłosił trafienia (GitHub, Reddit, Spotify, Docker Hub, TryHackMe...) - łącznie 177 wyników. To zarazem ostrzeżenie: tak duża liczba to w sporej części fałszywe pozytywy (patrz niżej), które trzeba zweryfikować ręcznie.
Uwaga - Sherlock generuje fałszywe trafienia. Narzędzie uznaje konto za istniejące, gdy adres z danym nickiem zwróci kod HTTP 200. Problem w tym, że wiele serwisów zwraca 200 (tzw. miękki 404 - stronę „nie znaleziono" z kodem sukcesu) dla dowolnej nazwy użytkownika. W efekcie Sherlock potrafi wypisać dziesiątki kont, z których spora część w ogóle nie istnieje. Każde trafienie trzeba zweryfikować ręcznie - otworzyć link i sprawdzić, czy profil jest prawdziwy. Tę żmudną robotę możesz zlecić agentowi: poproś Claude Code z podpiętym serwerem MCP Playwright, żeby otworzył po kolei każdy link w przeglądarce i sam ocenił, czy profil naprawdę istnieje, czy to miękki 404 (jak podłączyć taki serwer, pokazujemy w artykule o serwerach MCP w Claude Code). To samo dotyczy socialscan, choć ma on dokładniejsze reguły dla obsługiwanych platform. Traktuj wynik jako listę tropów do sprawdzenia, nie jako pewnik.

GitHub OSINT: Wyszukaj @target.pl na github.com. Pracownicy często pushują z firmowych emaili - ich repozytoria mogą zawierać fragmenty konfiguracji, hardcodowane klucze API, skrypty do wewnętrznej infrastruktury. Trufflehog i GitLeaks automatyzują skanowanie repozytoriów pod kątem sekretów.

Maltego - wizualizacja i analiza powiązań

Maltego to platforma do wizualnej analizy OSINT - tworzy grafy powiązań między podmiotami (domenami, emailami, osobami, adresami IP, numerami telefonów). Zamiast ręcznie łączyć dane z kilkunastu narzędzi, uruchamiasz transforms - wtyczki, które automatycznie odpytują zewnętrzne źródła i rysują wyniki na grafie.

Maltego CE - darmowa wersja

Maltego Community Edition (CE) jest darmowe - wymaga rejestracji, ogranicza wyniki do 12 encji na transform. Dla pentestów i nauki w zupełności wystarczy. Wersja Professional (ok. 999 USD/rok) usuwa limity i dodaje dodatkowe transform huby.

Typowy workflow w Maltego

Zacznij od encji domeny (target.pl) i uruchom transforms kolejno:

  • DNS to Domain --> znajdź subdomeny przez DNS brute-force i pasywne bazy
  • Domain to IP --> rozwiąż IP wszystkich subdomen, znajdź zakresy IP
  • Domain to Email Address --> zbierz emaile z publicznych źródeł (Hunter.io transform)
  • Email to Social Media --> znajdź profile LinkedIn, Twitter, GitHub do emaili
  • Email to Breaches --> sprawdź HIBP dla każdego emaila automatycznie
  • IP to Shodan --> dla każdego IP pobierz usługi z indeksu Shodan

W 30 minut budujesz kompletną mapę organizacji: domena --> 23 subdomeny --> 8 zakresów IP --> 47 emaili --> 12 kont GitHub --> 3 emaile w breach databases --> 2 serwery z otwartym RDP. Bez Maltego to kilka godzin ręcznej pracy.

Graf powiązań domeny w Maltego Community Edition
Maltego CE - graf powiązań zbudowany maszyną Footprint L1. Z jednej encji domeny transforms automatycznie rozwijają subdomeny, rekordy MX, adresy email i serwery WWW, łącząc je w czytelną mapę infrastruktury.

Raport OSINT - struktura i dokumentacja znalezisk

Profesjonalny raport OSINT nie jest listą "co znalazłem". Jest dokumentem biznesowym, który pomaga decydentom zrozumieć ryzyko i podjąć konkretne działania naprawcze. Każde znalezisko musi mieć ocenę ryzyka, dowód i rekomendację.

Struktura raportu

  • Streszczenie dla zarządu (tzw. executive summary) - 1 strona dla decydentów: zakres, kluczowe ryzyka, trzy najważniejsze rekomendacje
  • Metodologia - jakie techniki i narzędzia użyto, co było poza zakresem
  • Znaleziska - każde z poziomem ryzyka, dowodem, opisem i rekomendacją
  • Załączniki - surowe dane, zrzuty ekranu, logi narzędzi

Przykładowa tabela znalezisk

ID Znalezisko Ryzyko Źródło Rekomendacja
F-001 3 emaile pracowników w bazie Have I Been Pwned (LinkedIn 2021 breach) CRITICAL HIBP API + theHarvester Reset haseł + MFA dla tych kont
F-002 Panel phpMyAdmin na dev.target.pl bez auth, port 80 HIGH Shodan + Google Dork Wyłączyć lub zabezpieczyć VPN-only
F-003 Login domenowy (WIN-SRV\jan.kowalski) w metadanych PDF raportu rocznego MEDIUM ExifTool Czyścić metadane przed publikacją
F-004 Otwarte directory listing na backup.target.pl/old/ LOW Google Dork Wyłączyć directory listing w Apache
Przykładowy szablon raportu OSINT - streszczenie dla zarządu
Przykładowy szablon raportu OSINT (streszczenie dla zarządu) - kluczowe ustalenia, rekomendacje, zebrane dowody pogrupowane wg źródła i końcowa ocena ryzyka. Dane na zrzucie są przykładowe (schemat poglądowy).

Defensywna perspektywa - jak ograniczyć własny footprint

OSINT na własną organizację to jedno z najcenniejszych ćwiczeń security review, które możesz zrobić. Jeśli Ty widzisz te dane, widzi je każdy potencjalny atakujący. Poniżej konkretne działania ochronne.

Metadane dokumentów

# Usuń WSZYSTKIE metadane z dokumentu przed publikacją
exiftool -all= -overwrite_original dokument.pdf
exiftool -all= -overwrite_original raport.docx

# Sprawdź co zostało
exiftool dokument.pdf | grep -iE "author|creator|producer|company|path"

# Masowe czyszczenie całego katalogu
exiftool -all= -overwrite_original -r ./do_publikacji/

Monitoring własnego footprintu

  • Google Alerts - skonfiguruj alerty dla nazwy firmy, głównych domen, nazwisk kluczowych pracowników
  • Shodan Monitor - alert gdy nowe IP z Twojej organizacji pojawi się w indeksie Shodan
  • Have I Been Pwned - domain monitoring (powiadamia gdy nowe emaile Twojej domeny pojawią się w breach)
  • GitGuardian - automatyczne skanowanie GitHub pod kątem sekretów dla Twojej organizacji
  • Certificate Transparency monitoring - powiadamia gdy ktoś wystawił certyfikat dla poddomeny Twojej domeny

DNS hardening

# Wyłącz zone transfer (AXFR) - nikt poza własnymi NS nie powinien mieć dostępu
# W BIND9 (/etc/named.conf):
zone "target.pl" {
    type master;
    allow-transfer { none; };  # zamiast domyślnego "any"
};

# Sprawdź czy zone transfer jest wyłączony
dig axfr target.pl @ns1.target.pl
# Oczekiwane: "Transfer failed" lub "REFUSED"

# SPF, DKIM, DMARC - utrudniają email spoofing (phishing pod Twoją domenę)
# Weryfikacja rekordu SPF:
dig TXT target.pl | grep "v=spf"
# Weryfikacja DMARC:
dig TXT _dmarc.target.pl

Polityki dotyczące pracowników

Największa słabość to ludzie. Polityka bezpieczeństwa powinna jasno określać: co pracownicy mogą publikować o pracy na LinkedIn (technologie, projekty, nazwy systemów), zakaz używania firmowych emaili przy rejestracji w zewnętrznych serwisach, obowiązek zgłaszania gdy konto firmowe pojawi się w wycieku. Regularne szkolenia z rozpoznawania prób social engineeringu są konieczne - wiedza o tym, że atakujący zbiera dane z LinkedIn, zmienia świadomość pracowników.

Chcesz opanować OSINT w praktyce - od rekonesansu i Google Dorks, przez Shodan, theHarvester i Maltego, po analizę social media i raportowanie, na realnych celach (CTF)? Sprawdź nasze szkolenie z terminem gwarantowanym:

Szkolenie OSINT - wywiad ze źródeł otwartych, JSystems

Szkolenie OSINT -->

Podsumowanie - OSINT jako fundament bezpieczeństwa

OSINT to nie jedna technika - to systematyczne podejście do zbierania informacji, które poprzedza każdy efektywny test penetracyjny i powinno być regularną praktyką w każdym zespole security. Atakujący spędzają na recon znacznie więcej czasu niż na samym ataku - znają Twoją infrastrukturę, pracowników i technologie zanim pierwszy raz dotkną granicy sieci.

Kluczowe narzędzia, które omówiliśmy:

  • Google Dorks + GHDB - pasywne wyszukiwanie wrażliwych zasobów i dokumentów
  • theHarvester - agregacja emaili, subdomen i hostów z wielu źródeł
  • Subfinder / Amass / crt.sh - enumeracja subdomen (pasywna i aktywna)
  • Shodan - widoczność usług sieciowych i otwartych portów
  • ExifTool / FOCA - analiza metadanych dokumentów
  • HIBP + Hunter.io - weryfikacja emaili i wycieków
  • Maltego - wizualna analiza powiązań i automatyzacja transforms
  • Sherlock / linkedin2username - OSINT na osoby i konta social media

Każdą z tych technik możesz wdrożyć defensywnie - sprawdzając co atakujący mógłby znaleźć o Twojej organizacji, zanim on to zrobi. To najprostszy i najtańszy sposób na poprawę poziomu bezpieczeństwa: sam OSINT wymaga przede wszystkim wiedzy, nie drogich narzędzi.

Newsletter bloga JSystems

Otrzymuj nowe artykuły prosto na swoją skrzynkę

Nowe artykuły pojawiają się co poniedziałek i czwartek.

Zapisz się na newsletter -->

Najczęściej zadawane pytania

1. Planowanie - co chcemy znaleźć?
Zdefiniuj cel: domena, organizacja, konkretna osoba, zakres IP. Określ pytania, na które chcesz odpowiedzieć: Czy firma ma publicznie dostępne subdomeny z panelami administracyjnymi? Czy pracownicy używają firmowych emaili w zewnętrznych serwisach? Czy w repozytoriach kodu są hardcodowane klucze API? Bez jasnego celu zbierasz góry danych bez wartości.

Komentarze (0)

Musisz być zalogowany by móc dodać komentarz. Zaloguj się przez Google

Brak komentarzy...