• Мнения
  • |
  • Обсуждения
Роман Кобленц Профессионал

Как взломать сайт?

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

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

Для начала определимся с тем, что все без исключения современные объемные, сложные сайты строятся на основе базы данных. Работа с данными, хранящимися в базе данных вашего сайта, осуществляется посредством структурного языка запросов SQL.

SQL-инъекция — техника внедрения в исходный SQL-запрос определенного кода (не нарушающего структуры самого запроса) с целью получения доступа к данным, содержащимся в БД.

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

Итак, для начала познакомимся с таким понятием, как передача данных методом GET. Не замечали ли вы, путешествуя по страничкам бесконечного Интернета, что ссылки, по которым вы путешествуете, зачастую имеют вид типа:

www.хххххх.ru/index.php?что-то = чему-то&еще_что-то = еще_чему-то,

где на месте моих условных «что-то» и «чему-то» стоят всевозможные значения.

Так вот, знайте, что url, выглядящие подобным образом, содержат в себе определенную информацию, а именно: за знаком вопроса следует сначала переменная (ее имя), а затем = ее значение. Знак & отделяет переменные друг от друга.

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

Но только вдумайтесь! Ведь никто не может вам запретить взять и вручную подправить этот url, сделать его таким, как нужно вам, нажать после этого клавишу enter и отправить данные этого url-а на обработку серверу БД! Именно здесь и возникает возможность внедрения SQL-инъекции.

Итак, начнем. Мы имеем сайт, который на основании параметра id, переданного методом GET, вынимает определенные данные из БД и формирует на их основе нашу страницу. Вот код этого SQL-запроса, который обрабатывает наши данные из url-а:

$result3 = mysql_query ('SELECT * FROM raspisanie WHERE cat=$id').

Если перевести на русский язык, запрос выполняет выборку всех данных из базы данных raspisanie, где поле cat=$id. По сути все, что в запросе идет за нашей переменной $id, которую мы передаем из url-а, нам уже не важно, и позже я поясню почему. Теперь разберемся с самим url-ом. Пусть изначально он выглядит так:

www.хххххх.ru/index.php?id=3.

То есть мы передаем этим url-запросом параметр id=3, и страница формируется на основе этого параметра, значит он помещается в наш SQL-запрос и получается, что из базы данных извлекаются все данные из таблицы raspisanie, где поле cat=$id=3. А теперь перейдем к самому интересному. Допустим, мы знаем, что в базе данных атакуемого сайта в таблице users хранятся логин и пароль от администраторской зоны сайта — в полях login и password соответственно. И тогда, просто изменив наш url следующим образом:

www.хххххх.ru/index.php?id =3+union+select+1,2,login, password, 5,6,7 +from+user/*

 — страница поместит всю эту большую переменную в наш запрос, который станет выглядеть как

$result3 = mysql_query ('SELECT * FROM raspisanie WHERE cat=3 union select 1,2,login, password, 5,6,7 from user/*').

И, обработав такой новый запрос, который никак не нарушает структуру таблиц БД, сервер сам вернет нам, помимо обычной информации, соответствующей значению id=3, еще и логин с паролем от сайта!

Чтобы было совсем понятно, я переведу наш новый «волшебный запрос»:

«Выбрать все данные из таблицы raspisaniе, где поле cat=3, а также сделать другой запрос: вывести, помимо полученных данных, значения логина и пароля из таблицы users».

Числа 1, 2 и т. д. являются произвольными и используются для сохранения структуры запроса, и число таких значений определяется подбором — до тех пор, пока число таких значений не станет равным числу значений, которые выводятся из базы данных по умолчанию.

Имена таблицы users и значения полей для логина и пароля также определяются подбором, ведь согласитесь, везде они имеют примерно одинаковые названия. И, наконец, символы в конце нашего url-а «/*» служат для отбрасывания хвоста начального запроса в случае его присутствия, чтобы он не нарушил структуру запроса внедренного.

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

Не пренебрегайте вопросами защиты информации своего сайта и спите спокойно!

Статья опубликована в выпуске 24.05.2011
Обновлено 22.07.2020

Комментарии (12):

Чтобы оставить комментарий зарегистрируйтесь или войдите на сайт

Войти через социальные сети:

  • System Error Читатель 14 февраля 2014 в 07:09 отредактирован 27 мая 2018 в 11:18 Сообщить модератору

    ах, да, чуть не забыл, запрос чудочку все таки изменился и стал выглядеть так адрес сайта/index.php?id%20=112+union+select+1,2,login,password,5,6,7%20+from+user/*
    т.е. добавились вот эти значения %20 что это значит?

  • во первых что за переменная cat? что она означает
    во вторых "страница поместит всю эту большую переменную в наш запрос, который станет выглядеть как $result3 = mysql_query('SELECT * FROM raspisanie WHERE cat=3 union select 1,2,login,password,5,6,7 from user/"
    гдек он станет выглядеть так? в адресной строке браузера? т.е. она сайт на котором мы делаем инъекцию сам поменяет строку?
    3) где именно "И, обработав такой новый запрос, который никак не нарушает структуру таблиц БД, сервер сам вернет нам, помимо обычной информации, соответствующей значению id=3, еще и логин с паролем от сайта" сервер выдаст нам пароль? ОПЯТЬ ЖЕ В АДРЕСНОЙ СТРОКЕ?
    ПС. я попробовал проделать данную фигню со своим сайтом (дабы не нарушить в случае чего законы) и как я ввел первоначальный запрос - таким он и остался. загрузилась главная страница сайта, никаких ошибок, в адресной строке - никаких изменений. я вышел со своего админского аккаунта и зашел как гость, проделал тоже самое, и вновь тот же результат

    • System Error,
      1. Читаем статью: "запрос выполняет выборку всех данных из базы данных raspisanie, где поле cat=$id".
      2. Нет, не в адресной строке. Что нужно написать в адресной строке, указано выше. Это сформирует SQL-запрос.
      3. Да при чем тут адресная строка? Когда Вы пишете в ней url, где выводится результат? На странице браузера.

      "я попробовал проделать данную фигню со своим сайтом" - а у Вас на сайте есть таблица базы данных raspisanie, где поле cat=$id? А хоть какая-нибудь база данных на Вашем сайте есть?
      Мы не публикуем инструкции, которые могут кому-то навредить! В конце статьи ссылка на продолжение. В нем описаны методы защиты от SQL-инъекции - и они применяются не только веб-мастерами, но и разработчиками стандартных движков.

  • Миша Мишко Читатель 27 мая 2013 в 18:09 отредактирован 27 мая 2018 в 19:44 Сообщить модератору

    А что будет,если я взламаю сайт,который меня научил взламывать сайты?

  • А что, теперь не модно шифровать пароли и парсить запросы?

  • Герман Петров Читатель 24 мая 2011 в 11:44 отредактирован 25 мая 2018 в 09:14 Сообщить модератору

    От такой SQL-инъекции оч легко защититься, надо лишь в файл прописать проверку того что попадает в строку запроса и всё. И эта проверка будет постоянно совершаться при показе файла www.хххххх.ru/index.php?id=x Так что если будет в строке прописано что то ещё то код будет останавливаться и не проходить

  • читать дальше →

    • Так сойдет?

      Оценка статьи: 5

      • Роман Кобленц, у меня так:

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

          Оценка статьи: 5

          • Роман Кобленц, если Ваши строчки не разрываются и поэтому не переносятся, при чем тут ошибки в верстке сайта или браузер? Можно было кивать на разрешение экрана, крупный шрифт и размер монитора 10,5'', вот поставили Вы пробелы и всё нормально.