Cet article présente quelques techniques d'exploitations des injections SQL dans les clauses « order by ». Cet article est basé sur PHP/MySQL afin d'être facilement reproductible, mais peut être appliqué à d'autres bases de données et langages.
1. Introduction
La structure d'une requête contenant une clause « order by » est la suivante :
mysql> select id, name from users order by name;
+----+-------+
| id | name |
+----+-------+
| 1 | admin |
| 4 | root |
| 2 | user1 |
| 3 | user4 |
+----+-------+
Comme on peut le remarquer, la valeur placée après l'utilisation d'« order by » n'est pas entourée par des apostrophes (quote : %27). En effet, l'utilisation d'apostrophes rend la directive « order by » inefficace car la valeur fournie est considérée comme une constante :
mysql> select id, name from users order by 'name';
+----+-------+
| id | name |
+----+-------+
| 1 | admin |
| 2 | user1 |
| 3 | user4 |
| 4 | root |
+----+-------+
Cependant, il est possible d'utiliser des accents graves (backtick : %60) afin d'encadrer la valeur utilisée :
mysql> select id, name from users...
- Accédez à tous les contenus de Connect en illimité
- Découvrez des listes de lecture et des contenus Premium
- Consultez les nouveaux articles en avant-première