sqli-to-data-exfil

Escalates suspected SQL injection into verified data exfiltration with persisted findings.

1.1k|155|Updated Mar 8, 2026
One-click install
npx skills add https://github.com/vigolium/vigolium --skill sqli-to-data-exfil
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: sqli-to-data-exfil
Source: https://github.com/vigolium/vigolium/tree/main/internal/resources/olium/skills/sqli-to-data-exfil
Command: npx skills add https://github.com/vigolium/vigolium --skill sqli-to-data-exfil

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve?

Security testers often detect signs of SQL injection but struggle to turn a vague signal into concrete, reproducible proof. This Skill provides a structured workflow that walks from a suspicious HTTP record through confirmation, schema enumeration, and a single real exfiltrated sample, ending in a properly documented finding.

Core Features & Use Cases

  • Guided probe-to-proof workflow: Anchors on a specific HTTP record, classifies the injection context (string vs numeric), and selects the cheapest verifiable oracle (in-band UNION, blind boolean, blind time, or blind OAST).
  • Payload-class-aware enumeration: Pulls context-matched SQLi payloads, fingerprints the database (MySQL, PostgreSQL, SQLite, MSSQL), and walks information_schema or sqlite_master to leak one high-value row.
  • Finding persistence and deduplication: Reports exactly one finding per distinct SQLi with CWE-89, severity based on leaked data type, masked evidence, and updates theoretical scanner findings instead of double-reporting.
  • Use Case: During an authorized web application assessment, a scan record shows a 500 error with an SQLite syntax message on the q parameter. The Skill replays quote and boolean probes, confirms a UNION oracle, leaks one row from the users table, and files a critical finding with the exact mutated request.

Quick Start

Ask the agent to investigate the suspicious SQL error in the captured /rest/products/search request and prove whether the q parameter is exploitable with a real data sample.

Frequently Asked Questions about sqli-to-data-exfil

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I confirm a SQL injection vulnerability from a scanner finding?

Start from the flagged HTTP record, replay quote tests (' and '') and boolean pairs (AND 1=1 vs AND 1=2) against the insertion point, then compare status, length, and body hash. A differential response proves the payload reaches the query parser before attempting any extraction.

What is the difference between in-band, blind boolean, and blind time SQL injection?

In-band uses UNION SELECT to echo a sentinel directly in the response, proving exfil in one step. Blind boolean infers data from true/false response differences, while blind time uses SLEEP or pg_sleep delays and requires baseline controls to rule out unrelated latency.

How does out-of-band SQL injection exfiltration work?

OAST exfiltration injects functions like LOAD_FILE, xp_dirtree, or pg_read_file that force the database to make a DNS or HTTP request to a canary domain containing leaked data. You mint a canary, inject the payload, then poll for the callback for up to 60 seconds.

Why does a UNION SELECT payload fail with a column count error?

UNION requires the injected query to return the same number of columns as the original query. Iterate UNION SELECT 1, then 1,2, then 1,2,3 until the error disappears, then identify which column position is reflected in the response.

When should time-based blind SQLi not be trusted as confirmation?

Time-based confirmation is unreliable when the application has shared rate limiters or other latency sources that delay all requests. Always run a baseline request with an equal-length payload but no sleep before claiming the oracle.

Can SQL injection lead to remote code execution?

Yes, through features like MSSQL xp_cmdshell or PostgreSQL COPY FROM PROGRAM, but that crosses into a separate command-injection workflow. It should only be attempted with explicit operator authorization within the engagement scope.