SkillAgentSearch skills...

hunt-wordpress

Use when an authorized target exposes WordPress core, plugin, theme, REST, or XML-RPC behavior.

Install / Use

npx skills add uphiago/recon-skills --skill hunt-wordpress

Installs into whichever agent you are using.

About this skill
📄

SKILL.md

Installable skill definition

Quality Score

89/100

Category

Security

Supported Platforms

Zed

Our assessment of hunt-wordpress

hunt-wordpress scores 89/100 on our quality scale, 507th of 971 Security skills we index.

Its SKILL.md is 7.8 KB long, well organised into 15 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 hunt-wordpress 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.

hunt-wordpress compared with similar skills

All 4 of these similar skills score higher than hunt-wordpress; compare them before choosing.

SkillScoreStarsUpdatedFormat
hunt-wordpress (this skill)by uphiago891.3k29d agoSKILL.md
Agent-Reachby Panniantong10086.6k15d agoCLAUDE.md
headroomby headroomlabs-ai10074.2ktodayCLAUDE.md
Scraplingby D4Vinci10084.8ktodayMCP Server
crawl4aiby unclecode10084.6k6d agoMCP Server

Frequently asked questions

How do I install hunt-wordpress?
Run npx skills add uphiago/recon-skills --skill hunt-wordpress. The install tabs above show the steps for each supported agent.
Which AI agents does hunt-wordpress work with?
It is written for Zed, as a SKILL.md file. Other agents that read the same format can often use it too.
Is hunt-wordpress 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 hunt-wordpress still maintained?
The repository was last updated 29 days ago, so hunt-wordpress is actively maintained.

name: hunt-wordpress description: Use when an authorized target exposes WordPress core, plugin, theme, REST, or XML-RPC behavior. version: 3.0.0 license: MIT platforms: [linux, macos] compatibility: Requires curl, jq, and optional wpscan tags: [redteam, wordpress, web, api, plugins] category: redteam related_skills:

  • cors-credential-wordpress
  • error-log-mining
  • source-leak-hunt
  • staging-subdomain-hunt
  • wordpress-plugin-hunt
  • wp-plugin-rest-auth-bypass
  • xmlrpc-exploitation

WordPress Security Assessment

Map WordPress core, REST, XML-RPC, plugins, themes, authentication boundaries, and adjacent installations before selecting a vulnerability-specific test. WordPress presence, a public route, or a version match is not a finding by itself.

When to Use

  • HTML, headers, assets, cookies, or routes identify WordPress.
  • /wp-json/, /wp-login.php, /xmlrpc.php, or /wp-content/ is reachable.
  • JavaScript or source code references a WordPress backend.
  • A staging or subdirectory installation may differ from the main site.

Prerequisites

  • Explicit authorization and current target boundaries.
  • curl and jq; wpscan is optional.
  • Approved test identities for role or authorization checks.
  • A controlled callback service only when blind SSRF testing is authorized.
  • Explicit approval immediately before registration, upload, password, plugin, or other state-changing tests.

How to Run

Begin with a bounded, read-only map:

TARGET="https://www.example.test"
OUTPUT_DIR="${OUTPUT_DIR:-./output/wordpress}"
mkdir -p "$OUTPUT_DIR"

for path in \
  / \
  /wp-json/ \
  /wp-login.php \
  /xmlrpc.php \
  /readme.html \
  /author-sitemap.xml; do
  curl -sS --max-time 10 \
    -o /dev/null \
    -w '%{http_code} %{content_type} %{size_download} %{url_effective}\n' \
    "$TARGET$path"
  sleep 1
done

Procedure

1. Confirm WordPress

Use multiple signals:

curl -sS --max-time 10 "$TARGET/" \
  | grep -Eio 'wp-content|wp-includes|wp-json|wordpress' \
  | sort -u

curl -sS --max-time 10 "$TARGET/wp-json/" \
  -o "$OUTPUT_DIR/rest-index.json"

jq -r '.namespaces[]? // empty' "$OUTPUT_DIR/rest-index.json" \
  | sort -u \
  > "$OUTPUT_DIR/rest-namespaces.txt"

A generic 200 response is insufficient. Compare suspicious paths with a random nonexistent path to detect catch-all routing.

2. Map Core, Theme, and Plugin Assets

curl -sS --max-time 10 "$TARGET/" \
  | grep -Eo "wp-content/(plugins|themes)/[^/?\"']+" \
  | sort -u \
  > "$OUTPUT_DIR/components.txt"

Confirm a component with at least two signals when practical: an asset path, REST namespace, readme or changelog, HTML marker, or versioned file. Match CVEs only after establishing the exact affected version and prerequisite.

Use wordpress-plugin-hunt for plugin discovery and version validation.

3. Map REST Data and Authorization

for path in \
  /wp-json/ \
  /wp-json/wp/v2/types \
  /wp-json/wp/v2/posts?per_page=2 \
  /wp-json/wp/v2/pages?per_page=2 \
  /wp-json/wp/v2/users?per_page=2; do
  curl -sS --max-time 10 \
    -D "$OUTPUT_DIR/headers.tmp" \
    -o "$OUTPUT_DIR/body.tmp" \
    "$TARGET$path"
  printf '%s %s\n' "$path" "$(wc -c < "$OUTPUT_DIR/body.tmp")"
  sleep 1
done

Classify the response before assigning impact:

  • published posts and pages are usually public by design;
  • usernames may increase phishing or authentication risk but are not account takeover;
  • email addresses, roles, drafts, settings, form entries, orders, and logs need separate access-control review;
  • a plugin namespace may exist while every operation remains protected.

For authorization claims, compare anonymous, user A, user B, and an approved privileged identity against the same synthetic object.

4. Validate CORS in a Browser

curl -sS --max-time 10 \
  -D "$OUTPUT_DIR/cors-headers.txt" \
  -o "$OUTPUT_DIR/cors-body.txt" \
  -H 'Origin: https://attacker.example' \
  "$TARGET/wp-json/wp/v2/users?per_page=2"

Header reflection is only a lead. Credentialed CORS impact requires:

  1. an untrusted origin accepted by the response;
  2. Access-Control-Allow-Credentials: true when cookies are required;
  3. an approved authenticated browser session;
  4. browser JavaScript that can read non-public data;
  5. an anonymous or public-data negative control.

Use cors-credential-wordpress for the complete browser workflow.

5. Classify XML-RPC

curl -sS --max-time 15 \
  -X POST "$TARGET/xmlrpc.php" \
  -H 'Content-Type: text/xml' \
  --data-binary \
  '<methodCall><methodName>system.listMethods</methodName></methodCall>' \
  -o "$OUTPUT_DIR/xmlrpc-methods.xml"

grep -Eo '<string>[^<]+</string>' "$OUTPUT_DIR/xmlrpc-methods.xml" \
  | sed -E 's#</?string>##g' \
  | sort -u

Do not follow redirects during protocol classification. A valid methodResponse proves XML-RPC behavior; a status code alone does not. Credential testing, multicall amplification, uploads, and SSRF bypasses require their own authorization and safety limits. Use xmlrpc-exploitation only when the relevant method and prerequisites have been confirmed.

6. Check Staging and Secondary Installations

Certificate transparency, archives, and asset paths may reveal staging hosts or subdirectory installations. Compare:

  • WordPress and plugin versions;
  • authentication and WAF behavior;
  • REST and XML-RPC exposure;
  • debug configuration and source files;
  • shared cookies, credentials, storage, and deployment paths.

A weaker staging control matters only when the environment is in scope and its impact is demonstrated. Use staging-subdomain-hunt for a bounded comparison.

7. Check Source and Error Exposure

Probe only the paths justified by the observed stack. Validate content rather than status:

| Candidate | Required content | |---|---| | .git/HEAD | Git ref such as ref: refs/heads/... | | .env | Configuration assignments, not generic HTML | | debug.log or error_log | Real application errors or sensitive runtime data | | backup archive | Correct file signature and meaningful contents | | directory listing | Directory index markers and actual entries |

Use source-leak-hunt and error-log-mining; retain only the minimum sanitized sample needed to demonstrate exposure.

8. Build a Candidate Attack Path

Connect only verified prerequisites:

observed component
  -> exact version and configuration
  -> reachable vulnerable operation
  -> approved identity or synthetic object
  -> reproduced security impact

Registration, XML-RPC, an upload route, and an executable PHP configuration do not automatically form an RCE chain. Confirm the role capability, upload validation, storage path, and execution behavior independently.

Pitfalls

  • WordPress routes frequently sit behind CDN, cache, or catch-all behavior.
  • GET /xmlrpc.php returning 405 does not classify a valid POST method call.
  • A REST namespace does not prove that a plugin operation is unauthenticated.
  • Public author metadata is not automatically sensitive.
  • Plugin versions can be hidden, backported, or reported by stale assets.
  • Large logs, sitemaps, and REST collections can cause unnecessary data collection; request bounded samples.
  • Default credential attempts, password spraying, registration, uploads, and writes require explicit authorization and agreed lockout limits.

Verification

  • WordPress is confirmed from content, not only a status code.
  • Every component finding includes a second signal or explains why one is not available.
  • Every CVE association includes exact version and prerequisite evidence.
  • REST authorization uses approved identities and a negative control.
  • CORS impact is reproduced in a browser with non-public data.
  • XML-RPC behavior uses a protocol-valid response or controlled callback.
  • State-changing tests use synthetic records, preserve cleanup evidence, and remain within scope.

Related Skills

View on GitHub
GitHub Stars1.3k
CategorySecurity
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