Skip to content
Skillpedia
Misc35k · #5740

exploiting-broken-link-hijacking

Helps your agent find and exploit broken links on websites. It checks if external resources or expired domains can be registered by attackers.

What it does

This tool looks for broken links on a website that can be exploited. It checks if external domains or resources the site uses have expired or are unclaimed, allowing an attacker to register them and take control.

When to use it

  • ✓When auditing website security and identifying links that no longer work.
  • ✓When investigating if third-party scripts or resources used by a site can be hijacked.
  • ✓When searching for 'subdomain takeover' opportunities during security testing.

Example of what to ask your AI

“Scan example.com for broken links and potentially hijackable external resources”

Want more? Open the sections below.

How to use

The easiest way: copy the message below and paste it into Claude, ChatGPT, Cursor or any AI. It reads the skill and follows the instructions.

Skill link

https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/exploiting-broken-link-hijacking/SKILL.md

Ready-to-paste message

Use this skill to help me: https://github.com/mukul975/Anthropic-Cybersecurity-Skills/blob/main/skills/exploiting-broken-link-hijacking/SKILL.md Read the SKILL.md file at that link and follow its instructions for my task.
How it works

The tool first crawls the website to find all external links. It then checks if these links or their associated domains are still active or if they can be registered by someone else.

Installation

Easiest way: copy the skill link and paste it into Claude, ChatGPT or Cursor asking it to follow the instructions.

In the terminal (Claude Code, Codex, Cursor), in your project folder:

npx skills add mukul975/Anthropic-Cybersecurity-Skills --skill exploiting-broken-link-hijacking

Or download just the file:

curl -L https://raw.githubusercontent.com/mukul975/Anthropic-Cybersecurity-Skills/main/skills/exploiting-broken-link-hijacking/SKILL.md -o SKILL.md
Technical content (original SKILL.md)

Original text by the author, straight from GitHub.

Exploiting Broken Link Hijacking

When to Use

  • When auditing web applications for references to expired or unclaimed external resources
  • During supply chain security assessments of third-party script and resource dependencies
  • When testing for subdomain takeover opportunities via dangling CNAME records
  • During bug bounty hunting for broken link hijacking vulnerabilities
  • When assessing the security of external resource dependencies in production applications

Prerequisites

  • Web crawler or spider for discovering all external links (Burp Suite Spider, Scrapy)
  • DNS lookup tools for checking CNAME records and domain availability
  • Domain registrar access for claiming expired domains (as proof of concept)
  • Understanding of CDN and cloud service provisioning (S3, Azure Blob, GitHub Pages)
  • blc (broken-link-checker) or similar tool for automated link validation
  • Knowledge of services vulnerable to subdomain takeover (can-i-take-over-xyz)

Legal Notice: This skill is for authorized security testing and educational purposes only. Unauthorized use against systems you do not own or have written permission to test is illegal and may violate computer fraud laws.

Workflow

Step 1 — Crawl and Extract All External References

# Use broken-link-checker to find dead links
npx broken-link-checker http://target.com --recursive --ordered \
  --exclude-internal --filter-level 3 -o broken_links.txt

# Extract all external links from page source
curl -s http://target.com | grep -oP 'https?://[^"'"'"'\s>]+' | sort -u > all_links.txt

# Extract JavaScript sources
curl -s http://target.com | grep -oP 'src="[^"]*"' | grep -v target.com > external_scripts.txt

# Extract CSS references
curl -s http://target.com | grep -oP 'href="[^"]*\.css"' | grep -v target.com > external_css.txt

# Use wayback machine for historical external references
curl -s "https://web.archive.org/web/timemap/link/http://target.com" | \
  grep -oP 'https?://[^>]+' | sort -u > historical_links.txt

# Spider with Burp Suite
# Configure Spider scope to include target.com
# Review Site Map > Filter by "External" to list all external references

Step 2 — Identify Dead or Claimable Resources

# Check if external domains are registered
for domain in $(cat external_domains.txt); do
  whois $domain 2>/dev/null | grep -qi "no match\|not found\|available" && \
    echo "[CLAIMABLE] $domain"
done

# Check HTTP status of external links
while read url; do
  status=$(curl -o /dev/null -s -w "%{http_code}" "$url" --max-time 5)
  if [ "$status" = "000" ] || [ "$status" = "404" ]; then
    echo "[DEAD] $url (Status: $status)"
  fi
done < all_links.txt

# Check for dangling CNAME records
for sub in $(cat subdomains.txt); do
  cname=$(dig +short CNAME $sub)
  if [ -n "$cname" ]; then
    resolved=$(dig +short $cname)
    if [ -z "$resolved" ]; then
      echo "[DANGLING] $sub -> $cname (UNRESOLVED)"
    fi
  fi
done

# Check cloud resource availability
# AWS S3 bucket
aws s3 ls s3://target-assets 2>&1 | grep -q "NoSuchBucket" && echo "[CLAIMABLE] S3: target-assets"

Step 3 — Check Service-Specific Takeover Possibilities

# Check GitHub Pages takeover
# If CNAME points to <user>.github.io and 404 is returned
curl -s https://subdomain.target.com | grep -q "There isn't a GitHub Pages site here"

# Check AWS S3 takeover
curl -s http://subdomain.target.com | grep -q "NoSuchBucket"

# Check Azure Blob Storage
curl -s http://subdomain.target.com | grep -q "The specified container does not exist"

# Check Heroku
curl -s http://subdomain.target.com | grep -q "No such app"

# Check Shopify
curl -s http://subdomain.target.com | grep -q "Sorry, this shop is currently unavailable"

# Use subjack for automated takeover detection
subjack -w subdomains.txt -c fingerprints.json -t 100 -o takeover_candidates.txt

# Use nuclei takeover templates
subfinder -d target.com -silent | nuclei -t http/takeovers/ -o takeovers.txt

Step 4 — Verify External Script Hijacking

# Check if external JavaScript domains are available for registration
curl -s http://target.com | grep -oP 'src="https?://([^/"]+)' | \
  cut -d'/' -f3 | sort -u | while read domain; do
    whois "$domain" 2>/dev/null | grep -qi "no match\|available" && \
      echo "[HIJACKABLE SCRIPT] $domain loaded by target.com"
  done

# Check npm/CDN package references
curl -s http://target.com | grep -oP 'unpkg\.com/[^@/]+' | sort -u

…
FAQ

What is 'broken link hijacking'?

It's a vulnerability where a website links to an external resource (like a script or image) that is no longer active or registered. An attacker can then register that link or domain and cause the website to use the attacker's controlled resource.

What is 'subdomain takeover'?

This happens when a subdomain (like 'blog.example.com') points to an external service (like a hosting service) that is no longer configured for that subdomain. An attacker can then configure the external service to control the subdomain.

What are the prerequisites for using this tool?

You need tools to crawl websites (like a spider), check DNS records, and potentially access to domain registrars to test claiming expired domains.

Details

Original description by the author

Discovers and exploits broken link hijacking by spidering a site (Burp Suite Spider, Scrapy, curl scraping), extracting referenced external scripts/domains, and checking DNS/CNAME records and domain registration status for expired or unclaimed resources an attacker could register. Use for subdomain takeover testing, supply-chain review of third-party scripts, or bug bounty hunting for hijackable e

repo: mukul975/Anthropic-Cybersecurity-Skills

Popularity

GitHub stars
35k
Ranking position
#5740
License
Apache-2.0
Updated
8/31/2026

Is this skill useful?

0

Sign in to vote.

Comments

  • …

More skills from this repository

Similar skills