Inferential (Blind) SQL Injection

Inferential (Blind) SQL Injection

Blind SQL injection occurs when applications don't display database errors or query results, forcing attackers to infer information through application behavior. Boolean-based blind injection uses conditional responses:

// Vulnerable Node.js code
app.get('/user/:id', async (req, res) => {
    const query = `SELECT * FROM users WHERE id = ${req.params.id}`;
    const result = await db.query(query);
    
    if (result.length > 0) {
        res.send('User exists');
    } else {
        res.send('User not found');
    }
});

// Attacker uses boolean conditions to extract data
// Input: 1 AND SUBSTRING((SELECT password FROM users WHERE id=1),1,1)='a'
// Response indicates if first character of password is 'a'

Time-based blind injection uses database delays:

# Vulnerable Ruby code
def check_product(id)
  query = "SELECT * FROM products WHERE id = #{id}"
  Product.find_by_sql(query)
  return "Product checked"
end

# Attacker input: 1; IF(ASCII(SUBSTRING((SELECT password FROM users LIMIT 1),1,1))=97, SLEEP(5), 0)--
# 5-second delay confirms first character is 'a' (ASCII 97)