Skip to main content

Error-based SQL Injection


An error-based attack is based on errors emitted by the database server, which allows understanding the database structure and exfiltrating database content.


  • Allow an attacker to interfere with the queries that an application makes to its database.
  • Retrieve information from the database an even extract data.
  • Affect the authentication and authorization aspects of the application.
  • Steal sensitive information stored in databases.


  • Use of prepared statements (with parameterized queries).
  • Use of stored procedures.
  • Enforcing the least privilege.


Anonymous attacker from an intranet.

Expected Remediation Time

⌚ 60 minutes.


Default score using CVSS 3.1. It may change depending on the context of the src.


  • Attack vector: N
  • Attack complexity: L
  • Privileges required: N
  • User interaction: N
  • Scope: U
  • Confidentiality: L
  • Integrity: L
  • Availability: L


  • Exploit code madurity: X
  • Remediation level: X
  • Report confidence: X


  • Vector string: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:L/A:L/E:X/RL:X/RC:X
  • Score:
    • Base: 7.3
    • Temporal: 7.3
  • Severity:
    • Base: High
    • Temporal: High

Compliant code

The application performs queries using standardized and sanitized parameters

static void getQuery(param){
param =, ""UTF-8"");
//Clean User parameters
cleanParam = getCleanValue(param)
//Do Query with a standard sentence
String sql = ""INSERT INTO users (username, password) VALUES ('foo','""+ cleanParam + ""')"";

try {
java.sql.Statement statement = org.owasp.benchmark.helpers.DatabaseHelper.getSqlStatement();
org.owasp.benchmark.helpers.DatabaseHelper.outputUpdateComplete(sql, response);
} catch (java.sql.SQLException e) {

### Non compliant code
The application contains possible harmful time-delay query
static void getQuery(userSql){
try {
java.sql.Statement statement = org.owasp.benchmark.helpers.DatabaseHelper.getSqlStatement();

// make query without filtering user input
org.owasp.benchmark.helpers.DatabaseHelper.outputUpdateComplete(sql, response);
} catch (java.sql.SQLException e) {



free trial

Search for vulnerabilities in your apps for free with our automated security testing! Start your 21-day free trial and discover the benefits of our Continuous Hacking Machine Plan. If you prefer a full service that includes the expertise of our ethical hackers, don't hesitate to contact us for our Continuous Hacking Squad Plan.