Издательский дом ООО "Гейм Лэнд"ЖУРНАЛ ХАКЕР #65, МАЙ 2004 г.

Картофель фри

Федор Михайлович

Xakep, номер #065, стр. 065-074-3


Доступная информация

Факт остается фактом. Чтобы двигаться дальше, мне нужны полноценные и точные сведения о названиях и структуре всех таблиц этой базы данных. Ведь пока я вообще ничего не знаю! В большинстве случаев, с которыми я сталкивался, мне легко удавалось получать такие сведения из сообщений об ошибках, но не в этот раз. Я долго лазил по сайту, работая с самыми разными скриптами, но мне ничего не удавалось – выводимые сведения были слишком скупы. Уже отчаявшись, я внезапно вспомнил, что информация о названиях всех таблиц и их полей в MSSQL хранится в какой-то системной структуре, названия которой я не помнил. Быстро найдя соответствующую документацию, я узнал, что информация обо всех таблицах хранится в INFORMATION_SCHEMA.TABLES, инфа о полях таблиц - в INFORMATION_SCHEMA.COLUMNS. Отлично, теперь нужно было каким-то образом извлечь необходимые сведения. Но только вот как это сделать? В голову сразу пришла мысль поступить банально, при помощи предложения union попробовать объединить вывод собственного запроса с обрабатываемым программистом потоком - в этом случае программа сама покажет мне все, что я потребую. Однако как же это реализовать, не зная ровным счетом ничего о структуре и даже названии таблиц ломаемой системы? :( Получается замкнутый круг, как в старом анекдоте: драйвер от модема на cd, а от cd-rom – в интернете. Надеясь на удачу, я решил действовать методом тупого подбора – может быть, что-то придет в голову в процессе, или неожиданно всплывет какая-то дополнительная информация. Ок, пускаю: 1234’ union select table_name from INFORMATION_SCHEMA.TABLES. Скрипт ругается: “All queries in an SQL statement containing a UNION operator must have an equal number of expressions in their target lists”. Скрипт жалуется на то, что в объединяемых потоках не совпадает количество полей, чего быть ну никак не должно. Что ж, уже неплохо – теперь, увеличивая количество выбираемых вторым запросом полей, я рано или поздно добьюсь устранения этой ошибки и, очевидно, получу другую, которая будет ругаться на несовпадение типов объединяемых полей. По крайней мере, я узнаю количество выбираемых первым запросом колонок. Я добавлял во второй запрос по одному полю, пока через 7 попыток не получил радостное известие: “Syntax error converting the nvarchar value 'AAAZZZZ' to a column of data type int”. Просто супер! Скрипт вывел сообщение о том, что не смог преобразовать символьное значение “AAAZZZZ” к целочисленному. А знаешь, что это за “AAAZZZZ”? Это название одной из таблиц базы данных!

Я выбрал его из системной структуры вторым запросом, который, естественно, не удалось склеить с первым, но, все же, я получил что хотел – информацию о названии одной из таблиц. Отлично, теперь, видоизменяя запрос, я выудил из базы данных сведения обо всех таблицах системы! Понеслась: 1234’ union select table_name,..,.. (7 раз) from INFORMATION_SCHEMA.TABLES order by table_name where table name>’AAAZZZZ’. Таким вот образом я получил сведения обо всех таблицах базы данных. Честно скажу, из-за полученных сведений интерес к этому сайту многократно возрос (особенно интересовала таблица Payments :)), но все запуталось еще сильнее, поскольку в базе было около полутора сотен таблиц, просто какая-то свалка из малосвязанных структур. Теперь, чтобы как-то связать в единое целое полученные сведения, необходимо выудить информацию о полях всех интересующих таблиц. Напомню, эти сведения хранятся в INFORMATION_SCHEMA.COLUMNS, где column_name – название поля, column_type - тип, а table_name – название таблицы. Выбирая нужные сведения описанным выше приемом, я получил информацию об устройстве всех структур сайта – меня серьезно заинтересовала табличка rfPayments, поскольку в ней были поля с интригующими названиями “CreditCardNumber”, “CVV”, “CardHolderAddress” и т.д. Теперь я вплотную подошел в проблеме извлечения необходимых сведений из базы данных, нужно ведь было срочно целиком выкачивать таблицу с кредами!

Назад на стр. 065-074-2  Содержание  Вперед на стр. 065-074-4