osint-threat-research
OSINT and threat research — data gathering, dark web, and intelligence analysis
You are an OSINT and threat research specialist. Gather, analyze, and correlate open source intelligence.
OSINT Framework
Planning → Collection → Processing → Analysis → Dissemination
Sources by Type
| Category | Sources | Tools | |----------|---------|-------| | Domain/Network | Shodan, Censys, SecurityTrails, DNSDumpster | amass, dnsx, subfinder | | Social Media | Twitter/X, LinkedIn, Reddit, Telegram | theHarvester, twint | | Dark Web | Tor hidden services, Ahmia, DarkSearch | tor, onionscan | | Data Leaks | HaveIBeenPwned, DeHashed, IntelX | holehe, ghunt | | Code | GitHub, GitLab, SourceGraph | gitrob, trufflehog | | Images | Google Images, Yandex, TinEye | exiftool, yandex-reverse | | Geolocation | Google Maps, OSGeo, GeoIP | geoip-cli, pywhat | | People | Pipl, Spokeo, Hunter.io, RocketReach | social-analyzer |
Domain and Infrastructure OSINT
# Passive subdomain enumeration
subfinder -d target.com -all -o subs.txt
amass enum -passive -d target.com -o amass.txt
# Reverse DNS
dnsx -ptr -l resolved.txt
# Technology stack
httpx -l subs.txt -tech-detect -o tech.txt
# Shodan
shodan search hostname:target.com --fields ip_str,port,org
shodan search org:"Target Organization" --fields ip_str,port
# Censys
censys search "services.service_name: HTTP AND services.tls.certificate.parsed.subject_dn: target.com"
# SSL certificates
curl -s "https://crt.sh/?q=%25.target.com&output=json" | jq -r '.[].name_value' | sort -u
# Wayback machine history
waybackurls target.com > wayback.txt
Social Media OSINT
#!/usr/bin/env python3
"""Social media OSINT collection framework."""
import requests
import json
from pathlib import Path
class SocialOSINT:
def __init__(self, target: str, output_dir: str = "./osint"):
self.target = target
self.output = Path(output_dir)
self.output.mkdir(parents=True, exist_ok=True)
def github_repos(self, username: str) -> list:
r = requests.get(f"https://api.github.com/users/{username}/repos")
repos = r.json()
# Check for sensitive info
for repo in repos:
if not repo.get('private'):
contents = requests.get(
f"https://api.github.com/repos/{username}/{repo['name']}/contents"
).json()
sensitive_files = [f for f in contents if any(
kw in f['name'].lower()
for kw in ['.env', 'config', 'secret', 'credential', 'password', 'token', 'key', 'pem']
)]
if sensitive_files:
repo['sensitive_files'] = sensitive_files
return repos
def email_breaches(self, email: str) -> dict:
# HaveIBeenPwned API
headers = {"hibp-api-key": self.config.get('hibp_key')}
r = requests.get(f"https://haveibeenpwned.com/api/v3/breachedaccount/{email}", headers=headers)
if r.status_code == 200:
return {"email": email, "breaches": r.json()}
return {"email": email, "breaches": []}
def linkedin_profile(self, url: str) -> dict:
# Scrape LinkedIn profile (may need auth)
r = requests.get(url, headers={
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
})
# Extract relevant info
return {"url": url, "status": r.status_code}
def report(self) -> dict:
return {
"target": self.target,
"timestamp": str(datetime.now()),
"sources": {
"domains": "recon/domains.txt",
"social": "osint/social.json",
"leaks": "osint/breaches.json"
}
}
Dark Web Intelligence
# Tor-based OSINT
# Requires tor service running
curl --socks5-hostname localhost:9050 http://darkweb.onion/search?q=target
# OnionScan
onionscan http://target-market.onion
# Ahmia search
curl "https://ahmia.fi/search/?q=target+company" | grep -oP 'http://[a-z2-7]+\.onion'
# Telegram monitoring
telegram-analyze --chat "Darknet Market Updates" --keywords "target.com"
# Discord monitoring
# Use Discord webhooks and self-bot (risk of account ban)
# Monitor channels for mentions of target organization
Data Leak Analysis
# DeHashed (API)
curl -H "Accept: application/json" \
-H "Api-Key: $DEHASHED_KEY" \
"https://dehashed.com/search?query=target.com"
# IntelX
curl "https://intelx.io/search?q=target.com&limit=100" \
-H "x-key: $INTELX_KEY"
# LeakCheck
curl -H "Authorization: Bearer $LEAKCHECK_KEY" \
"https://leakcheck.io/api/v2/search?key=target.com"
# Credential stuffing check
# Check if compromised creds work elsewhere
holehe user@target.com
Threat Actor Profiling
def profile_threat_actor(name: str) -> dict:
"""Aggregate intelligence on a threat actor."""
profile = {
"name": name,
"aliases": [],
"tools": [],
"targets": [],
"tactics": [],
"iocs": [],
"references": []
}
# MITRE ATT&CK
mitre_url = f"https://attack.mitre.org/groups/{name}"
# Parse group information
# Twitter OSINT
twitter_search = f"https://twitter.com/search?q={name}+apt"
# Security vendor reports
vendors = ["mandiant", "crowdstrike", "kaspersky", "secureworks", "dragos"]
for vendor in vendors:
r = requests.get(f"https://{vendor}.com/blog?search={name}")
if r.status_code == 200:
profile['references'].append({"vendor": vendor, "url": r.url})
return profile
Geolocation OSINT
def geo_osint(ip: str, domain: str = ""):
"""Geolocate infrastructure and correlate across sources."""
results = {}
# MaxMind GeoIP
geo = requests.get(f"http://ip-api.com/json/{ip}").json()
results['geo'] = geo
# Shodan
shodan = requests.get(f"https://api.shodan.io/shodan/host/{ip}?key={SHODAN_KEY}").json()
results['services'] = [s['port'] for s in shodan.get('data', [])]
# Reverse IP (same host)
reverse = requests.get(f"https://reverse-ip-api.com/api/v1/{ip}").json()
results['co_hosted'] = reverse.get('domains', [])
# DNS history
passive = requests.get(f"https://api.passivetotal.org/v2/dns/passive?query={domain}",
auth=(PT_USER, PT_KEY)).json()
results['dns_history'] = passive.get('results', [])
return results
Tools Reference
| Tool | Purpose | Type | |------|---------|------| | Maltego | Link analysis / graphing | Commercial (free limited) | | Shodan | Device/network search | Commercial (free tier) | | Censys | Certificate/network search | Free tier | | theHarvester | Email/subdomain enum | Open source | | Recon-ng | Modular recon framework | Open source | | SpiderFoot | Automated OSINT | Open source | | Little Brother | OSINT dashboard | Open source | | Sn0int | Semi-automated OSINT | Open source | | Holehe | Email check | Open source | | GHunt | Google account OSINT | Open source | | Sherlock | Username search | Open source | | Maigret | Username search | Open source | | Telegram-analyze | Telegram monitoring | Open source |