SkillAgentSearch skills...

origin-ip-discovery

Discover origin IPs behind CDN/WAF via favicon hash, DNS history, and SSL certs.

Install / Use

npx skills add uphiago/recon-skills --skill origin-ip-discovery

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

89/100

Supported Platforms

Universal

Our assessment of origin-ip-discovery

origin-ip-discovery scores 89/100 on our quality scale, 1199th of 4,259 Development & Engineering skills we index (top 29%).

Its SKILL.md is 6.6 KB long, well organised into 42 sections with 7 code examples: a thorough specification that gives an agent plenty to work with.

With 1,280 GitHub stars, it is one of the more widely adopted skills in the catalogue.

Substance
29/30
Structure
20/20
Description
12/15
Adoption
13/20
Freshness
15/15

Maintenance, license and trust

  • The repository was last updated 29 days ago, so origin-ip-discovery is actively maintained.
  • It is released under the MIT license, a permissive license that allows use, modification and commercial use with attribution.
  • Its trust signals score 100/100, with no cautions. These come from repository metadata, not a code audit — read the skill file before letting an agent act on it.

origin-ip-discovery compared with similar skills

All 4 of these similar skills score higher than origin-ip-discovery; compare them before choosing.

SkillScoreStarsUpdatedFormat
origin-ip-discovery (this skill)by uphiago891.3k29d agoSKILL.md
Agent-Reachby Panniantong10086.6k15d agoCLAUDE.md
headroomby headroomlabs-ai10074.2ktodayCLAUDE.md
ai-job-searchby MadsLorentzen10044.6k1d agoCLAUDE.md
claude-howtoby luongnv8910041.7ktodayCLAUDE.md

Frequently asked questions

How do I install origin-ip-discovery?
Run npx skills add uphiago/recon-skills --skill origin-ip-discovery. The install tabs above show the steps for each supported agent.
Which AI agents does origin-ip-discovery work with?
It is written for Universal, as a SKILL.md file. Other agents that read the same format can often use it too.
Is origin-ip-discovery safe to use?
It is MIT-licensed and scores 100/100 on trust signals. Skills are instructions an agent will follow, so read the file before installing it and do not approve commands you do not understand.
Is origin-ip-discovery still maintained?
The repository was last updated 29 days ago, so origin-ip-discovery is actively maintained.

name: origin-ip-discovery description: Discover origin IPs behind CDN/WAF via favicon hash, DNS history, and SSL certs. version: 1.1.0 revision_date: 2026-07-25 license: MIT platforms: [linux] compatibility: Requires curl, dnsx, python3, subfinder tags: [recon, origin-ip, CDN, WAF, bypass, Cloudflare, favicon, DNS] category: recon related_skills:

  • subdomain-enumeration
  • vhost-enumeration
  • port-mass-scan

Origin IP Discovery

Discover the real server IP behind CDN/WAF protections (Cloudflare, Akamai, Fastly). When the origin IP is found, the raw server is exposed without firewall rules, rate limiting, or application-layer filtering. Techniques include favicon hash fingerprinting across Shodan, historical DNS records from passive sources, SSL certificate SAN field matching, and Google Analytics ID cross-referencing.

When to Use

  • Target is behind Cloudflare/Akamai and returns 403 or CAPTCHA challenges on all requests.
  • You need direct access to the origin to bypass WAF rules.
  • Subdomain enumeration reveals internal/staging hosts on non-CDN IPs.
  • The target uses a single favicon across all infrastructure.
  • SSL certificates share the same organization name across IPs.

Prerequisites

  • terminal with curl, python3, and shodan CLI.
  • Shodan API key: shodan init <KEY>.
  • Target favicon file or URL.

Quick Detection

# Check Cloudflare presence
curl --max-time 30 --connect-timeout 10 -sI "https://target.com" | grep -i "cf-ray\|server: cloudflare"

# If Cloudflare detected, check for common origin leaks
curl --max-time 30 --connect-timeout 10 -sk "https://target.com/cdn-cgi/trace" | grep -E "ip=|colo="

Procedure

Phase 1 — Favicon Hash Fingerprinting

# Get favicon hash
FAVICON_URL="https://target.com/favicon.ico"
curl --max-time 30 --connect-timeout 10 -sk "$FAVICON_URL" -o favicon_target.ico

# Calculate hash
python3 -c "
import hashlib, base64
with open('favicon_target.ico', 'rb') as f:
    hash_bytes = base64.b64encode(hashlib.md5(f.read()).digest())
    print(f'favicon hash: {hash_bytes.decode()}')
"

# Search Shodan for IPs serving this favicon
HASH=$(python3 -c "
import hashlib, base64
with open('favicon_target.ico','rb') as f:
    print(base64.b64encode(hashlib.md5(f.read()).digest()).decode())
")
shodan search "http.favicon.hash:$HASH" --fields ip_str,port,org,hostnames

# Automatedtools
python3 favUp.py -ff favicon_target.ico --shodan-cli
python3 favUp.py --web target.com -sc

Phase 2 — Historical DNS Records

# SecurityTrails — DNS history
curl --max-time 30 --connect-timeout 10 -s "https://securitytrails.com/domain/target.com/history/a" \
  -H "APIKEY: $SECURITYTRAILS_KEY" \
  | jq '.records[].values[].ip' | sort -u

# AlienVault OTX — passive DNS
curl --max-time 30 --connect-timeout 10 -s "https://otx.alienvault.com/api/v1/indicators/domain/target.com/passive_dns" \
  | jq '.passive_dns[].address' | sort -u

# Automatedtools
echo "target.com" | originiphunter
cat domains.txt | originiphunter

Phase 3 — SSL Certificate Search

# crt.sh — find all certs for the domain, extract unique IPs from SAN fields
curl --max-time 30 --connect-timeout 10 -s "https://crt.sh/?q=%25.target.com&output=json" \
  | jq -r '.[].name_value' | tr ',' '\n' | sort -u > cert_domains.txt

# Censys — search by parsed names
# Web: https://search.censys.io — query: parsed.names: target.com

# Shodan — search by SSL subject CN
shodan search "ssl.cert.subject.cn:target.com" --fields ip_str,port,org

# Netlas — deep infrastructure search
# Web: https://netlas.io — query: domain:*.target.com

Phase 4 — Google Analytics ID Cross-Referencing

# Extract Analytics ID from target pages
curl --max-time 30 --connect-timeout 10 -s "https://target.com" | grep -Eo '(?:UA-|G-|GTM-)[A-Z0-9]+'

# Find all domains sharing the same GA ID
curl --max-time 30 --connect-timeout 10 -s "https://api.hackertarget.com/analyticslookup/?q=UA-XXXXXXXX-X"
curl --max-time 30 --connect-timeout 10 -s "https://builtwith.com/relationships/target.com"

# Automated
cat subdomains.txt | analyticsrelationships

Phase 5 — Common Origin Leak Vectors

# Direct IP in page source
curl --max-time 30 --connect-timeout 10 -sk "https://target.com" | grep -Eo '\b(?:\d{1,3}\.){3}\d{1,3}\b' | sort -u

# DNS CNAME chain — may expose origin
dig target.com ANY +noall +answer
dig www.target.com CNAME +short

# MX records — mail server often shares infrastructure
dig target.com MX +short

# SPF records — may contain non-CDN IPs
dig target.com TXT +short | grep -Eo '\b(?:\d{1,3}\.){3}\d{1,3}\b'

# Subdomain with different IP pattern
subfinder -d target.com -silent | dnsx -silent -a -resp-only | sort -u > all_ips.txt
# Filter out Cloudflare IPs (104.x, 172.64-71.x)
grep -vE '^104\.(1[6-9]|2[0-9]|3[0-1])\.|^172\.(6[4-9]|7[0-1])\.' all_ips.txt > non_cf_ips.txt
# Probe each for the target's content
for ip in $(cat non_cf_ips.txt); do
  curl --max-time 30 -sk --connect-timeout 5 "https://$ip" -H "Host: target.com" -o /dev/null -w "%{http_code} $ip\n"
done | grep -v "^403\|^000"

Phase 6 — Validate Origin

# Check if IP serves the target's content
curl --max-time 30 --connect-timeout 10 -sk "https://ORIGIN_IP" -H "Host: target.com" | grep -o '<title>[^<]*</title>'

# Verify favicon matches
curl --max-time 30 --connect-timeout 10 -sk "https://ORIGIN_IP/favicon.ico" -H "Host: target.com" -o favicon_origin.ico
md5sum favicon_target.ico favicon_origin.ico  # should match

# Probe ports directly on origin
naabu -host ORIGIN_IP -p - -rate 2000

Pitfalls

  • Cloudflare may block your IP on repeated scans. Rotate user-agents and proxies.
  • Shodan queries require an API key. Free tier is rate-limited.
  • The origin may also be behind firewall rules. Even if you find the IP, it may only accept traffic from Cloudflare's IP ranges.
  • Google Analytics IDs are shared across unrelated sites. Verify by favicon or content match before claiming a finding.
  • Non-CDN IPs from subdomains may be load balancers, not the actual web server origin. Probe with Host header to confirm.

Verification

  1. Favicon hash matches between CDN-cached site and direct origin IP.
  2. HTTPS request to origin IP with Host: target.com returns the same page content.
  3. Open ports on origin differ from CDN-proxied ports (origin exposes SSH, MySQL, etc.).
  4. SSL certificate on the origin IP lists the target domain in SAN.

Related Skills

  • subdomain-enumeration — Generate the subdomain list needed for IP deduplication.
  • vhost-enumeration — Once origin IP is found, enumerate virtual hosts.
  • port-mass-scan — Scan origin IP for exposed services.

Related Skills

View on GitHub
GitHub Stars1.3k
CategoryDevelopment
Updated29d ago
Forks215

Languages

Python

Trust signals

100/100

From repository metadata: license, adoption, age and documentation. Not a code audit — see the Safety scan above for what the skill file itself contains.

No cautions