Як обійти фільтрацію пробілів у SQL-injection

Скажімо, ти знайшов ін'єкцію на великому порталі новин, але ніяк не можеш її розкрутити, тому що всі відомі тобі варіанти прогалин не працюють. Давай розглянемо такий код

тут якісь запити з використанням змінної $_GET[‘id’]

Як ми бачимо, при використанні пробілів " ", /**/, + і %20 скрипт припиняє свою роботу. Насправді існує як мінімум два способи обходу такого скрипта, перший - використання різних пробілових символів, другий - використання логіки SQL запитів, зокрема їх реалізації в MySQL.

1. Отже, перший спосіб. Крім самого пробілу існує безліч різних пробілових символів, табуляція, повернення каретки і так далі. Ось їх повний (а може і ні;)) список:

%09 – horizontal tab, горизонтальна табуляція %0A – NL line feed, символ нового рядка %0B – vertical tab, вертикальна табуляція %0C – NP form feed, символ нової сторінки %0D – carriage return, повернення каретки Всі ці символи будуть розглядатися як пробільні. Приклад запиту:

З цим, я думаю, все зрозуміло, перейдемо до другого варіанта:

select id/*!,title*/ from news

В даному випадку з таблиці news будуть виведені поля id та title. Тепер подивимося, як це реалізувати в бойових умовах:

Але буває таке, що фільтруються символи слеша. Тоді можна використовувати спосіб, заснований на використанні дужок у запиті. Ось приклад для обходу вищевикладеного скрипта: