hunt-subdomain – skill DevOps & Hạ tầng cho agent AI
Skill săn lỗ hổng subdomain takeover. Bao gồm dấu vân tay (fingerprint) nhà cung cấp hiện đại — cấp phát lại regional-pool của Microsoft Azure DevOps `cloudapp.azure.com` (1-click OAuth ATO qua wildcard `reply_to`, Binary Security), chuỗi chiếm quyền help-desk Zendesk → chặn email → đặt lại mật khẩu (writeup 0xprial), Vercel
Cài skill hunt-subdomain bằng một lệnh
Chọn công cụ bạn đang dùng, copy lệnh và dán vào terminal. Skill sẽ nằm trong thư mục skills của công cụ đó và sẵn sàng dùng ở phiên làm việc tiếp theo.
Claude Code
mkdir -p ~/.claude/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-subdomain-0eb4a.tgz | tar xz -C ~/.claude/skills
Gọi trong Claude Code: /hunt-subdomain – rồi mô tả công việc bạn muốn làm.
Codex
mkdir -p ~/.codex/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-subdomain-0eb4a.tgz | tar xz -C ~/.codex/skills
Gọi trong Codex: $hunt-subdomain – rồi mô tả công việc bạn muốn làm.
Hermes Agent
mkdir -p ~/.hermes/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-subdomain-0eb4a.tgz | tar xz -C ~/.hermes/skills
Gọi trong Hermes Agent: /hunt-subdomain – rồi mô tả công việc bạn muốn làm.
DeepSeek
mkdir -p ~/.deepcode/skills && curl -fsSL https://skill.dn1nguoi.com/z/hunt-subdomain-0eb4a.tgz | tar xz -C ~/.deepcode/skills
Gọi trong DeepSeek: /hunt-subdomain – rồi mô tả công việc bạn muốn làm.
Nội dung SKILL.md
Nội dung SKILL.md gốc bằng tiếng Anh.
Crown Jewel Targets
Subdomain takeover is high-value because it allows an attacker to serve content from a trusted, company-owned domain — bypassing browser same-origin trust, phishing filters, and user skepticism simultaneously.
Highest payout contexts:
- Subdomains of major SaaS brands (Shopify, Snapchat, Mozilla, Yelp) where the trusted domain has user session context
- CDN-backed subdomains (Fastly, CloudFront) where CNAME points to unclaimed origins
- Third-party service integrations: UserVoice, WordPress.com, GitHub Pages, GitLab Pages, Heroku, Zendesk
- Preview/staging/dev subdomains (
new.,preview.,course.,delivery.,addons-preview.) — abandoned after feature launches - Subdomains used for OAuth redirect URIs or SSO endpoints — these pay highest
Asset types that matter most:
- CNAME records pointing to deprovisioned third-party services
- NS delegations to abandoned zones
- A records pointing to unallocated cloud IPs (less common)
- GitLab/GitHub Pages with unclaimed project namespaces
---
Attack Surface Signals
DNS signals:
CNAMEpointing to*.github.io,*.gitlab.io,*.fastly.net,*.herokudns.com,*.wordpress.com,*.uservoice.com,*.zendesk.com,*.s3.amazonaws.com,*.azurewebsites.net,*.netlify.app- NXDOMAIN or
SERVFAILon the CNAME target while the parent record still exists - NS records delegating to registrars where the zone is no longer registered
HTTP response signals:
"There isn't a GitHub Pages site here""NoSuchBucket"(S3)"The specified bucket does not exist""No such app"(Heroku)"Sorry, this shop is currently unavailable"(Shopify)"This UserVoice subdomain is available""Do you want to register"(any domain parking page)- HTTP 404 with provider-specific error templates
- Fastly:
"Fastly error: unknown domain" "404 Web Site not found"(Azure App Service)
Tech stack signals:
- Response headers:
X-Served-By: cache-*(Fastly),X-GitHub-Request-Id,Server: Netlify CNAMEchain resolving to provider infrastructure but returning provider 404- SSL cert issued to provider wildcard (
*.fastly.net) rather than company domain
---
Step-by-Step Hunting Methodology
1. Enumerate all subdomains for the target using passive + active sources:
subfinder -d target.com -allamass enum -passive -d target.comassetfinder --subs-only target.com- Certificate transparency:
crt.sh/?q=%.target.com
2. Resolve all subdomains and flag those with:
- NXDOMAIN responses
- CNAME pointing to a third-party provider
cat subdomains.txt | dnsx -a -cname -o resolved.txt
3. Cross-reference CNAMEs against known vulnerable provider fingerprints using nuclei or subjack:
subjack -w subdomains.txt -t 100 -timeout 30 -ssl -c fingerprints.json
nuclei -l subdomains.txt -t takeovers/
4. Manual verification for each flagged subdomain:
dig CNAME subdomain.target.com— confirm CNAME existsdig A <cname-target>— confirm NXDOMAIN or no resolutioncurl --max-time 30 --connect-timeout 10 -sk https://subdomain.target.com— check for provider error string
5. Confirm claimability — attempt to register the resource:
- GitHub Pages: check if
<username>.github.io/<repo>or org page is unclaimed - GitLab Pages: check project namespace
- S3: attempt
aws s3api create-bucket --bucket <bucketname> - UserVoice/Zendesk/WordPress: visit registration URL
- Fastly: check if origin hostname is unregistered
6. Claim the resource (only enough to prove control — do NOT serve malicious content):
- Create a minimal index page with your HackerOne username and a timestamp
- Take screenshot showing your content served on
subdomain.target.com
7. Document the chain: CNAME record → provider target → unclaimed resource → your content
8. Assess impact escalation:
- Does the subdomain appear in OAuth redirect allowlists?
- Does it share cookies with parent domain (
domain=.target.com)? - Is it referenced in the app's CSP?
- Can it receive authenticated API calls?
9. Write report before releasing the claim (some programs want to verify first)
---
Payload & Detection Patterns
Bulk CNAME extraction and NXDOMAIN detection:
# Extract CNAMEs and check if target resolves
while read sub; do
cname=$(dig +short CNAME "$sub" | head -1)
if [ -n "$cname" ]; then
result=$(dig +short A "$cname")
if [ -z "$result" ]; then
echo "[POTENTIAL] $sub -> $cname (NXDOMAIN)"
fi
fi
done < subdomains.txtNuclei takeover scan:
nuclei -l subdomains.txt -t ~/nuclei-templates/http/takeovers/ -severity medium,high,criticalsubjack with SSL:
subjack -w subdomains.txt -t 100 -timeout 30 -ssl -c $GOPATH/src/github.com/haccer/subjack/fingerprints.json -vProvider fingerprint grep patterns:
curl --max-time 30 --connect-timeout 10 -sk "https://$subdomain" | grep -iE \
"there isn't a github pages|no such bucket|no such app|this uservoice|fastly error: unknown domain|do you want to register|sorry, this shop|project not found|404 not found|unclaimed"Check if subdomain is in scope for cookies (shared parent domain):
curl --max-time 30 --connect-timeout 10 -Isk "https://target.com" | grep -i "set-cookie" | grep "domain=.target.com"Fastly-specific detection:
curl --max-time 30 --connect-timeout 10 -sI "https://subdomain.target.com" -H "Host: subdomain.target.com" | grep -i "fastly\|x-served-by\|x-cache"
curl --max-time 30 --connect-timeout 10 -sk "https://subdomain.target.com" | grep -i "fastly error"S3 unclaimed bucket check:
aws s3api head-bucket --bucket <extracted-bucket-name> 2>&1 | grep -i "NoSuchBucket\|403\|404"GitLab Pages specific:
dig CNAME sub.target.com
# If pointing to *.gitlab.io — visit the gitlab.io URL directly
# 404 from gitlab.io project = claimable---
Common Root Causes
1. Service offboarding without DNS cleanup — Developer removes a Heroku app, UserVoice account, or WordPress site but never deletes the CNAME record. DNS lives forever; service does not.
2. Staging/preview infrastructure abandoned post-launch — course., new., preview., beta. subdomains provisioned for a product launch, pointed at a third-party, then forgotten when the campaign ends.
3. Subdomain provisioned by a third-party team — Marketing sets up a UserVoice or Zendesk subdomain via IT, product sunset kills it, but DNS is owned by engineering who doesn't know.
4. CDN misconfiguration without origin validation — Fastly and similar CDNs historically allowed any domain to "claim" a backend hostname by creating a service pointing to it. Unregistered origin hostnames become claimable.
5. GitHub/GitLab Pages namespace not reserved — Organization renames, user accounts deleted, or repos made private/deleted while the Pages CNAME still points to the old namespace.
6. Wildcard DNS entries — *.target.com pointing to a cloud provider means *any* unclaimed subdomain potentially resolves to claimable infrastructure.
7. Acquired/divested company DNS not cleaned — Post-acquisition, former brand subdomains (like oberlo.com under Shopify) retain CNAMEs to services that are no longer paid for.
---
Bypass Techniques
Defense: Manual fingerprint review before publishing
- Bypass: Use alternative error strings — providers change their 404 pages. Maintain an up-to-date fingerprint list. Some providers show *different* errors on HTTP vs HTTPS. Test both.
Defense: Scope restrictions (only main domain in scope)
- Bypass: Check program's asset list carefully —
*.target.comwildcards often include subdomains implicitly. Escalate impact to get it in scope.
Defense: "Can't reproduce" responses due to timing
- Bypass: Screenshot immediately after claiming. Record a video walkthrough. The window can be short for popular subdomains.
Defense: HTTPS certificate mismatch blocking proof
- Bypass: Some providers (GitHub Pages, Netlify) auto-provision TLS for claimed domains. Others don't — show HTTP takeover and note TLS would be resolved by provider on claim.
Defense: Provider-side validation (Fastly verifying domain ownership)
- Bypass: Some Fastly configurations don't validate origin hostnames. Check if the CNAME target is a generic Fastly backend hostname vs. a customer-verified one. Try claiming anyway and observe behavior.
Defense: Rate limiting on subdomain enumeration
- Bypass: Use passive-only sources (SecurityTrails, Shodan, crt.sh, VirusTotal) to avoid triggering WAF/IDS. DNS resolution doesn't touch the web server.
Defense: Program claims "low severity / no impact"
- Bypass: Demonstrate same-origin cookie theft, OAuth redirect abuse, or CSP bypass to escalate. Find if the subdomain is listed in any `po
… (nội dung đầy đủ có trong gói tải về)
Skill liên quan
- block-storage – Quản lý volume block storage và LVM. Cấu hình block storage trên cloud và ổ đĩa cục bộ…
- blue-green-deploy – Cấu hình chiến lược triển khai không gián đoạn, gồm blue-green, canary và rolling…
- prometheus-configuration – Thiết lập Prometheus để thu thập, lưu trữ và giám sát toàn diện các chỉ số của hạ tầng…
- gcp-cloud-architect – Thiết kế kiến trúc GCP cho startup và doanh nghiệp lớn. Dùng khi cần thiết kế hạ tầng…
- bumblebee – Chạy quét kiểm kê và mức độ phơi nhiễm chuỗi cung ứng Bumblebee trên macOS/Linux để phát…
- cdk-patterns – Các mẫu và construct AWS CDK phổ biến để xây dựng hạ tầng đám mây bằng TypeScript…
- offensive-osint – Bộ công cụ vận hành cho trinh sát red-team bên ngoài và bug bounty có ủy quyền. Các…
- circleci – Cấu hình workflow và orb của CircleCI cho tích hợp liên tục và triển khai liên tục.