Роман Кобленц Роман Кобленц Профессионал Опубликовано 24.05.2011      16     246762     Распечатать

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

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

Основная цель статьи – продемонстрировать пользователю важность темы защиты данных в Интернете на примере сайта, не защищенного должным образом. В качестве способа атаки на сайт будет использоваться, пожалуй, самый распространенный метод взлома сайта – 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-инъекции, ознакомились с одним из возможных способов взлома сайта.

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

Теги: информационные базы, программирование, взлом, сайты, информация, интернет-ресурс, интернет, безопасность
16 комментариев (посмотреть последние комментарии)
Как взломать сайт?(photoinnovation, Shutterstock)
photoinnovation, Shutterstock

Ссылки по теме

Рейтинг статьи Ваша оценка
Подробнее

Поделиться

Читайте статьи в рубрике «Техника и Интернет»

Обсуждение статьи:

  • Олег Михайлец Олег Михайлец Профессионал 24 мая 2011 в 14:49   # Ответить 1 +1

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

  • Ольга Дорошева (Мухранова) Ольга Дорошева (Мухранова) Читатель 7 февраля 2013 в 18:33   # Ответить 0 +1

    Комментарий был удален

    • Люба Мельник Люба Мельник Бывший модератор 7 февраля 2013 в 19:08   # Ответить 1 +1

      Ольга Дорошева (Мухранова), реклама в блогах запрещена, запись удалена.

  • Ольга Дорошева (Мухранова) Ольга Дорошева (Мухранова) Читатель 16 февраля 2013 в 12:36   # Ответить 0 +1

    Комментарий был удален

  • Миша Мишко Миша Мишко Читатель 27 мая 2013 в 18:09   # Ответить 0 +1

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

  • System Error System Error Читатель 14 февраля 2014 в 07:01   # Ответить 0 +1

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

    • Марианна Власова Марианна Власова Бывший главный редактор 14 февраля 2014 в 12:59   # Ответить 0 +1

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

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

  • System Error System Error Читатель 14 февраля 2014 в 07:09   # Ответить 0 +1

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

    • Марианна Власова Марианна Власова Бывший главный редактор 14 февраля 2014 в 13:11   # Ответить 0 +1

      System Error, %20 - так отобразился пробел (он, как и русские буквы, например, заменяется комбинацией символов).

Посмотреть все комментарии (16)

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

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