This document provides a comprehensive guide for using SQLMap Web UI, including the main application, VulnShop lab, and extension plugins.
- 1. System Overview
- 2. Installation & Deployment
- 3. Main Application
- 4. Scan Configuration Management
- 5. Header Rules Configuration
- 6. VulnShop Lab Usage
- 7. Extension Plugins
- 8. Advanced Features
- 9. FAQ
SQLMap Web UI is a complete SQL injection testing platform consisting of three main components:
| Component | Description | Port |
|---|---|---|
| Web Application | SQL injection scanning task management interface | 8775 (backend) / 5173 (frontend dev) |
| VulnShop Lab | Built-in vulnerability testing environment | 9527 |
| Extension Plugin | Burp Suite plugin | - |
| System Logs | Log viewer | Built-in |
- Operating System: Windows / Linux / macOS
- Python: 3.10+
- Node.js: 20+ (frontend development)
- Java: 11+ (Burp Suite Legacy API) or 17+ (Montoya API)
- Browser: Chrome (recommended)
- Package Managers: uv (Python), pnpm (Node.js)
The startup script automatically creates a virtual environment, installs dependencies, and starts the service.
Windows:
cd src\backEnd
start.batLinux/macOS:
cd src/backEnd
chmod +x start.sh
./start.sh# Enter backend directory
cd src/backEnd
# Install dependencies (using uv package manager)
uv sync --extra thirdparty
# Start service
uv run python main.pyThe startup script supports configuration via startup.conf:
| Configuration | Description | Default |
|---|---|---|
| NETWORK_MODE | Network mode (online/intranet/offline) | online |
| PYPI_MIRROR | Public mirror (tsinghua/aliyun/ustc, etc.) | tsinghua |
| PRIVATE_MIRROR_URL | Private mirror URL | - |
| SKIP_DEPS_CHECK | Skip dependency check | false |
| HOST | Service bind address | 127.0.0.1 |
| PORT | Service port | 8775 |
Intranet with private mirror:
# startup.conf
NETWORK_MODE=intranet
PRIVATE_MIRROR_URL=http://nexus.company.com/repository/pypi/simple/Fully offline environment:
- Run
prepare_offline.bat(or.sh) in a networked environment to prepare offline packages - Copy the backEnd directory to the offline machine
- Set
NETWORK_MODE=offlineand run the startup script
Service URL after startup: http://localhost:8775
# Enter frontend directory
cd src/frontEnd
# Install dependencies
pnpm install
# Development mode
pnpm run dev
# Build production version
pnpm run buildDevelopment server: http://localhost:5173
# Enter lab directory
cd src/vulnTestServer
# Install dependencies
pip install flask
# Start server
python server.pyLab URL: http://127.0.0.1:9527
The homepage displays task statistics:
- Task Status Statistics: Total tasks, running, waiting, completed, failed, stopped, terminated
- Injection Results Statistics: Injectable tasks, non-injectable tasks
- Quick Access: Click statistic cards to quickly jump to filtered task lists
- Go to the task list page
- Click "New Task" button
- Fill in task information:
- Target URL: The URL to be tested
- HTTP Request: Paste complete HTTP request (supports cURL/PowerShell/fetch/raw HTTP)
- Scan Parameters: Level, Risk, DBMS, etc.
- Click "Start Scan"
The system supports automatic parsing of the following HTTP request formats:
| Format | Description | Example |
|---|---|---|
| cURL (Bash) | Linux/Mac terminal request | curl -X POST 'http://...' -H 'Content-Type: ...' |
| cURL (CMD) | Windows command line | curl -X POST "http://..." -H "Content-Type: ..." |
| PowerShell | Invoke-WebRequest | Invoke-WebRequest -Uri "http://..." -Method POST |
| fetch | JavaScript fetch API | fetch("http://...", { method: "POST", ... }) |
| Raw HTTP | Standard HTTP message | POST /path HTTP/1.1\nHost: example.com\n... |
The system automatically detects input format and converts it to standard HTTP message.
- URL Keyword Search: Supports fuzzy matching for target URLs
- Message Keyword Search: Search Headers and Body content
- Status Filter: Filter by task status (waiting/running/completed/failed/stopped/terminated)
- Date Range Filter: Filter by creation time and execution time range
- Injection Status Filter: Injectable / Non-injectable / Unknown
- Click column headers to trigger sorting
- Supports ascending/descending/default order
- Sortable fields: Task ID, Status, Creation Time
- Supports paginated browsing of history configurations
- Adjustable items per page
- Quick jump to specific page
- Multi-select: Checkbox in first column, supports single and select-all
- Batch Stop: Stop selected running tasks
- Batch Delete: Delete selected tasks (running tasks are automatically skipped)
- Delete All: Clear all tasks (requires confirmation)
Table footer displays real-time statistics:
- Total tasks
- Injectable tasks
- Status distribution
On the task details page, you can view:
- Basic Info: Task status, creation time, target address, source IP
- HTTP Request: Raw request content (method, URL, Headers, Body)
- Scan Configuration: SQLMap parameter configuration (Level, Risk, Technique, etc.)
- Scan Results: Discovered injection points and payload details
- Real-time Logs: Task execution logs with refresh support
| Shortcut | Function | Scope |
|---|---|---|
Alt + 1 |
Jump to Home | Global |
Alt + 2 |
Jump to Tasks | Global |
Alt + 3 |
Jump to Add Task | Global |
Alt + 4 |
Jump to Config | Global |
Ctrl + F |
Search in editor | Code editor |
The system uses WebSocket real-time notification mechanism:
- Backend actively pushes task status changes
- Frontend automatically refreshes when new tasks are created
- Combined with smart polling strategy to reduce unnecessary requests
To prevent accidental operations, the following actions require confirmation:
- Delete single task
- Stop single task
- Batch delete tasks
- Batch stop tasks
- Delete all tasks
The system adopts smart polling strategy:
- Automatically starts timed refresh when there are running tasks
- Automatically stops polling when no tasks are running
- Pauses polling when page is hidden, resumes when visible
- Adjustable refresh interval in configuration page
New in v1.8.40
The system log viewer helps troubleshoot issues and monitor system status:
- Application Logs: Application runtime logs, including scan task execution records
- Access Logs: HTTP request access records
- Error Logs: System errors and exception records
- Type Switching: Quick switching between three log types
- Line Count Setting: Customizable display lines (50/100/200/500 lines)
- Real-time Refresh: View latest log content
- Dark Theme: Adapts to dark mode
- Find "System Log Viewer" entry in the configuration page
- Select the log type to view
- Set display line count
- Click refresh to get latest logs
Scan configuration management provides three configuration types:
| Configuration Type | Description | Use Case |
|---|---|---|
| Default Config | Global default scan parameters | Most scan tasks use same parameters |
| Preset Configs | Saved commonly used configurations | Configurations for specific scenarios |
| History Configs | Configurations used in past scans | Reuse previous scan configurations |
- Go to "Config" → "Scan Config Management" → "Default Config" Tab
- Set global default parameters:
- Level: Detection level (1-5)
- Risk: Risk level (1-3)
- DBMS: Database type
- Technique: Injection technique
- Other SQLMap parameters
- Click "Save"
- Go to "Preset Configs" Tab
- Click "Add Config" or "Guided Add"
- Fill in configuration information:
- Config name: e.g., "MySQL Deep Scan"
- Config description (optional)
- SQLMap parameters
- Click "Save"
The guided editor provides visual interface for configuring SQLMap parameters:
- Click "Guided Add" or "Guided Edit"
- Select parameters through dropdown menus and checkboxes in the dialog
- Real-time preview of generated command line parameters
- Click "Save"
- Go to "History Configs" Tab
- View configurations used in past scans
- Click "Use" to reuse configuration
- Click "Save as Preset" to save to preset configurations
New in v1.8.38+
- Sorting: Supports sorting by ID, command line parameters, last used time, usage count
- Pagination: Supports paginated browsing with adjustable items per page
- ID Display: Config cards display ID for easy identification
- Auto Refresh: History config table auto-refreshes after Burp plugin creates tasks
The configuration page contains 3 Tab pages:
- System Config - Auto-refresh interval settings
- Header Rules Management - Persistent request header rules configuration
- Session Header Management - Temporary session-level request header configuration
Scenario: Add unified User-Agent for all scan tasks
Steps:
- Click into "Header Rules Management" Tab
- Click "Add Rule" button
- Fill in form:
- Rule name:
Global User-Agent - Header name:
User-Agent - Header value:
Mozilla/5.0 SecurityScanner/1.0 - Replace strategy:
Full Replace - Priority:
50 - ✅ Enable rule
- ❌ Do not check "Configure Scope" (global effect)
- Rule name:
- Click "Save"
✅ Result: All scan tasks will use this User-Agent
Scenario: Only add auth token for specific environment APIs
Steps:
- Click "Add Rule"
- Fill in form:
- Rule name:
Production API Auth - Header name:
Authorization - Header value:
Bearer eyJhbGc... - Priority:
80(high priority) - ✅ Enable rule
- ✅ Check "Configure Scope"
- Rule name:
- Configure scope:
- Protocol match:
https - Hostname match:
api.production.com - Path match:
/v1/* - ❌ Do not use regular expressions
- Protocol match:
- Click "Save"
✅ Result:
- ✅ Only adds auth header for
https://api.production.com/v1/*requests - ❌ Other URLs are not affected
- Edit: Click edit button to modify rule
- Enable/Disable: Click eye icon to toggle status
- Delete: Click delete button to remove rule
| Field | Description | Example |
|---|---|---|
| Protocol Match | Match http or https | https or http,https |
| Hostname Match | Match domain (supports wildcard *) | api.example.com or *.example.com |
| IP Match | Match IP address (supports wildcard *) | 192.168.1.100 or 192.168.* |
| Port Match | Match port numbers (supports multiple) | 443 or 80,443,8080 |
| Path Match | Match URL path (supports wildcard *) | /api/* or /v1/users |
| Use Regex | Whether to use regular expression matching | ☐ Keyword match ☑ Regex match |
- No scope configured: Global effect, matches all URLs
- Scope configured: All configured items must match to take effect (AND logic)
- Field left empty: No restriction on this dimension (equivalent to wildcard)
Example 1: Match HTTPS only
{
"protocol_pattern": "https"
}✅ Matches: https://any-domain/any-path
❌ Not matches: http://...
Example 2: Match all subdomains of example.com
{
"host_pattern": "*.example.com"
}✅ Matches: api.example.com, www.example.com
❌ Not matches: example.com (main domain)
Example 3: Match specific API path
{
"protocol_pattern": "https",
"host_pattern": "api.production.com",
"path_pattern": "/v1/*"
}✅ Matches: https://api.production.com/v1/users
❌ Not matches: http://api.production.com/v1/users (protocol mismatch)
Scenario: Add multiple temporary headers for current test session
Steps:
- Click into "Session Header Management" Tab
- Click "Add Header" button
- Enter multiple lines of headers in the text box:
Authorization: Bearer temp-token-123 X-Request-ID: test-request-001 X-Custom-Header: custom-value - Set parameters:
- Priority:
50 - TTL:
3600seconds (1 hour)
- Priority:
- Click "Add"
✅ Result: These headers will be effective for all requests in the next hour
Click "Clear All" button, confirm to immediately clear all session headers
| Priority Range | Recommended Use | Tag Color |
|---|---|---|
| 80-100 | Critical auth/authorization headers | 🔴 Red |
| 50-79 | Important business headers | 🟡 Yellow |
| 0-49 | General headers | 🔵 Blue |
VulnShop is an e-commerce platform simulation SQL injection lab, designed for:
- Learning various SQL injection techniques
- Testing security tools like SQLMap
- Security training and CTF practice
| Username | Password | Role |
|---|---|---|
| admin | admin123 | Administrator |
| test | test | Regular User |
| alice | alice123 | Regular User |
- Endpoint: POST /api/user/login
- Parameters: username, password
- Example:
username: admin' AND 1=CAST((SELECT password FROM users LIMIT 1) AS int)--
password: x
- Endpoint: GET /api/user/profile
- Parameters: id
- Example:
GET /api/user/profile?id=1 UNION SELECT 1,flag,description,4,5,6 FROM secrets--
- Endpoint: GET /api/products/search
- Parameters: keyword
- Example:
GET /api/products/search?keyword=test' AND (SELECT SUBSTR(password,1,1) FROM users WHERE username='admin')='a'--
- Endpoint: GET /api/products/detail
- Parameters: id
- Example:
GET /api/products/detail?id=1 AND (SELECT CASE WHEN (1=1) THEN randomblob(100000000) ELSE 1 END)
- Endpoint: GET /api/orders/query
- Parameters: order_no, user_id
- Example:
GET /api/orders/query?order_no=ORD001'; INSERT INTO users(username,password,email) VALUES('hacker','pwned','h@h.com');--
- Endpoint: POST /api/user/register
- Parameters: username, password, email
- Description: Register with malicious SQL username, triggered elsewhere
| Level | WAF Protection | Bypass Method |
|---|---|---|
| Easy | No protection | Direct injection |
| Medium | Simple filtering | Case mixing, URL encoding |
| Hard | Strict filtering | Advanced bypass techniques |
Switch difficulty: Select difficulty level in "System Config" page
The lab supports light and dark themes:
- Click theme toggle button (☀️/🌙) on the right side of navigation bar
- Theme selection is automatically saved
To restore initial data:
- Web interface: "System Config" → "Reset Database"
- Command line:
python database.py
- Build the plugin:
cd src/burpEx/montoya-api # For Burp 2023.1+
# or
cd src/burpEx/legacy-api # For older Burp versions
mvn clean package -DskipTests- Load in Burp Suite:
- Go to Extender → Extensions
- Click Add button
- Select the generated JAR file
-
Configure Server:
- In plugin's "Server Config" tab
- Set backend URL: http://localhost:8775
- Click "Test Connection" to verify
-
Send Requests:
- Intercept or view requests in Burp
- Right-click and select "Send to SQLMap WebUI"
- Or select "Send to SQLMap WebUI (Select Config)..." for custom parameters
-
Configuration Management:
- "Default Config": Set default scan parameters
- "Preset Configs": Save commonly used configuration combinations
-
Activity Log:
- View send history and results
- Command Execution Configuration: Support direct SQLMap scan execution in terminal without backend server
- Terminal Title Rules: Support custom terminal window title extraction rules for easy identification of multiple scan windows
- Command Preview: Real-time preview of generated SQLMap commands
- Configuration Import/Export: Support backup and sharing of configurations
- Auto-save to History: Automatically saves to history configs after creating tasks
- Request Deduplication: Automatically detects and skips duplicate requests
- Binary Content Detection: Detects binary content and warns
- Chinese Encoding Handling: Correctly handles Chinese characters
v1.8.44+ Feature
Command execution configuration allows direct SQLMap scan execution in local terminal:
- Go to "Command Execution Configuration" tab
- Configure the following parameters:
- Python Path: Python interpreter path (optional, uses system default if empty)
- SQLMap Path: Full path to sqlmap.py script (required)
- Terminal Type: Auto-detect or manual selection (CMD/PowerShell/Terminal, etc.)
- Keep Terminal Open: Whether to keep terminal window after scan completes
- Configure title rules (optional):
- Add custom rules to extract terminal window title from requests
- Support extraction from Host, URL path, custom regex, etc.
- Match in priority order, first matched rule takes effect
- Click "Save Settings"
Usage:
- Intercept or view requests in Burp
- Right-click and select "Execute SQLMap Scan"
- System automatically opens terminal and executes SQLMap command
- HTTP request is saved as temporary file, passed using
-rparameter
v1.8.44+ Feature
Before sending a request, you can preview and copy the SQLMap command:
- Right-click the request in Burp, select "Send to SQLMap WebUI (Select Config)..."
- In the configuration selection dialog, choose scan parameters
- Click "Preview Command" button:
- View the generated complete SQLMap command
- Click "Copy to Clipboard" button to copy the command
- Can paste directly into terminal for manual execution
Use Cases:
- Need to manually adjust command parameters before execution
- Need to execute scan in other environments (e.g., remote server)
- Want to learn and understand SQLMap command line usage
| Parameter | Description | Default |
|---|---|---|
| Level | Detection level (1-5) | 1 |
| Risk | Risk level (1-3) | 1 |
| DBMS | Database type | Auto-detect |
| Technique | Injection technique | BEUSTQ (All) |
Supports batch import of HTTP requests:
- Prepare request file (separate each request with blank line)
- Use import function to upload file
- Batch create scan tasks
All SQLMap parameters can be configured during task creation:
- Detection params: level, risk, technique
- Target params: dbms, os, tamper
- Injection params: prefix, suffix, string
- Output params: dump, dump-all, passwords
Improved in v1.8.33+: Command line preview component adopts GitHub Dark theme style for better readability.
v1.8.33+ Feature
AddTask page adopts modular component design:
- HTTP Request Editor: Independent code editor component with syntax highlighting
- Parameter Config Panel: Guided parameter selection interface
- Command Line Preview: Real-time preview of generated SQLMap command
- Scan Config Selection: Quick selection of default/preset/history configurations
The config page supports batch import of header rules from text:
- Go to "Header Rules Management" Tab
- Click "Text Import" button
- Enter multi-line format headers
- Set priority and replace strategy
- Confirm batch creation
Improved in v1.8.33+: Config page auto-refresh interval slider adds tick marks for more intuitive selection experience.
This project supports 215 SQLMap parameters (except -r), fully compatible with SQLMap 1.9.11.3+:
| Category | Count | Description |
|---|---|---|
| Target | 8 | Target definition (URL, log, bulk file, etc.) |
| Request | 51 | HTTP request configuration (auth, proxy, CSRF, etc.) |
| Optimization | 5 | Performance optimization (threads, connections, etc.) |
| Injection | 17 | Injection test configuration (test params, techniques, etc.) |
| Detection | 8 | Detection configuration (level, risk, match rules, etc.) |
| Techniques | 9 | Injection technique configuration (UNION, DNS exfiltration, etc.) |
| Enumeration | 36 | Data enumeration (tables, columns, users, etc.) |
| OS Takeover | 8 | OS takeover (command execution, shell, etc.) |
A: Check Python version (requires 3.10+), ensure dependencies are fully installed. Use uv sync --extra thirdparty to install dependencies.
A: Check CORS configuration, ensure backend service is running. Backend listens on port 8775 by default.
A: Ensure port 9527 is not occupied, use 127.0.0.1 instead of localhost.
A: Check backend server address configuration, ensure network connectivity. Use "Test Connection" function to verify.
A: Check if SQLMap is properly integrated, view backend logs for detailed information.
A: Check if rule is enabled, whether scope configuration correctly matches target URL.
A: Session headers have TTL limit, need to re-add after expiration. Can increase TTL or use persistent rules.
- GitHub Issues: Submit questions and suggestions
- Documentation: View detailed documentation in doc directory
⚠️ Security Notice: This tool is for authorized security testing only. Do not use for illegal purposes!