Просунуті методи SQL Injection атак: ідентифікація

20:09 25.06.2011

Продовжу серію статей про просунуті методи SQL Injection атак. В якій я розповідаю вам про різні цікави методи, що дозволять пришвидшити процес проведення SQL ін’єкцій та збільшити їх ефективність.

Зараз розповім вам про визначення кількості колонок при SQL Injection. Що є актуальним як при експлуатації звичайних SQL ін’єкцій, так і особливо blind SQLi уразливостей.

Ідентифікація кількості колонок в поточному запиті зокрема потрібна при union запитах. При звичайних SQL Injection інформацію про кількість колонок можна отримати з службових таблиць MySQL (для версій 5 і вище) і то це допоможе лише якщо в запиті виводяться всі колонки з таблиці. Але якщо версія MySQL менше 5 чи при сліпих SQLi, то це не спрацює. Й потрібно вручну довго підбирати кількість колонок - і чим складніше SQL запит (чим більше в ньому колонок запитується), тим довшим є цей процес.

І щоб пришвидши процес ідентифікації кількості колонок можна використати один простий і зручний метод (зокрема в MySQL). Це оператор order by.

Це відомий оператор для програмістів, що використовують мову SQL, але в ньому є цікава особливість. Як я виявив рік тому (в документації по MySQL), в операторі order by можна вказати не тільки ім’я колонки чи вираз (для сортування), але й її порядковий номер. Що можна використати при SQL Injection атаках.

Синтаксис оператора наступний: order by 5. Наприклад, для SQLi атаки можна використати наступний код: -1 or 1=1 order by 5. Якщо запит виконається успішно, значить як мінімум п’ять колонок є в даному запиті. Максимальне значення, при якому SQL запит буде виконуватися, і буде кількістью колонок в даному запиті (або в даній таблиці).


Leave a Reply

You must be logged in to post a comment.