Курсы по программированию

Формула программиста

основатель — Волосатов Евгений Витольдович
Поздравляю с 1 сентября! Система начисления Байтов работает.

Базовый ASP.ект / Что такое SQL-инъекция

  • На этом уроке мы сделаем бекап базы данных,
    затем продемонстрируем «взлом» страницы
    посредством SQL-инъекции, покажем,
    как от этого защититься и потом
    восстановим базу данных.
  • Дата отправки отчёта: 30 октября 2018 г.
  • Задание выполнено: за 4 час. 48 мин.
  • Чему научился: mysqldump -u root -p STORY > c:\safe\story418.sql - бекап БД
    drop table story; - удалить таблицу story
    mysql -u root -p story < c:\csharp\story3.sql - восстановить таблицу story из файла бэкапа

    Начали крушить.
    В адресной строке вызова истории по номеру после цифры номера истории добавив следующее
    '; DELETE FROM story; SELECT 'a
    грохнули все записи таблицы story

    В адресной строке вызова истории по номеру после цифры номера истории добавив следующее
    '; DROP TABLE story; SELECT 'a
    грохнули саму таблицу story
    Добавили метод адэдэслешс во имя экранирования апострофов, "восстановили" первый раз ЗАТЕРЕВ бэкап (боязно было), но был второй файл - он спас.
    Бэкап - наше всё.
    Инъекция - зло.
  • Оценка видео-уроку:
Отчёт от 17947 за Базовый ASP.ект / Что такое SQL-инъекция


Отчёт от 17947 за Базовый ASP.ект / Что такое SQL-инъекция




Оцени работу

 
Сохранить страницу:

19525. --
Александр Балбашов
Александр Балбашов
ответить
→  Dmitry Sinitsin  # Базовый ASP.ект / Что такое SQL-инъекция / 2018-10-30 15:07

Круто! Немного навыков хакера)


17947. --
Dmitry Sinitsin
Dmitry Sinitsin
ответить
# Базовый ASP.ект / Что такое SQL-инъекция / 2018-10-30 15:24

'1'
заменяется на 
'1'; DELETE FROM story; SELECT 'a'

То есть промеж апострофов была единичка - номер истории(ОНА ЖЕ ПАРОВОЗ), а становится целый поезд (ВАГОНЫ ИНЪЕКЦИИ).
И чтобы диспетчер этот эшелон пропустил в тыл врага в конце цепляется вагончик с как бы здоровым запросом СЕЛЕКТ а
В третьей строке этого комментария крайние апострофы указаны для чистоты понимания и сличения с первой строкой, где единица в тех же апострофах, как она видится в коде.
Но, поскольку, в адресной строке браузера, куда тычется противный злоумышленник с гаечным ключом отворачивающий гаечку для рыбалки, как у Чехова, крайние апострофы не пишутся (они видны лишь в коде), то гадить надо так после номера истории (единицы в нашем случае):
1'; DELETE FROM story; SELECT 'a


17947. --
Dmitry Sinitsin
Dmitry Sinitsin
ответить
# Базовый ASP.ект / Что такое SQL-инъекция / 2018-10-30 15:46

метод addslashes из этого:
1'; DELETE FROM story; SELECT 'a
делает это:
1\'; DELETE FROM story; SELECT \'a


1. --
Евгений Волосатов
Евгений Волосатов
ответить

  • Отчёт оценивали:
    4814Дмитрий+1   17255Слава+1   19525Александр Балбашов+1   3922Александр+1   6452Кирилл Шмойлов+1   17425ser2018+1   20105Макс Тимашков+1   1Евгений Волосатов+1   13417Chip+1   14981DimanDOS+1   10494Алексей В.+1   9913vip+1   17606Виктор+1   Посетитель+1   17947Dmitry Sinitsin+1   16218Дмитрий+1  

Начинаем практику по языку C#





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

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.


Научился: Интересно, что у меня при таком же, как в уроке, запросе, в ответ просто приходит ошибка, а не история по номеру в начале "инъекции". Видимо, какая-то разница в реализации MySQL и MSSQL. Конечно, если н епредусмотреть защиту от SQL-инъекций, то возможности для злоумышленника поистине безграничны :) Интересно почитать на эту тему, потому что подозреваю, что одной такой предосторожности, как в уроке, явно недостаточно.



Научился: Сделалал бекап базы данных двумя способами Написал в адресной строке браузера SQL-инъекцию Убедился, что она сработала: записи из таблицы удалены Добавил в модель MySQL функцию addslashes() Проверил, что SQL-инъекция не проходит Восстановил базу данных из бекапа
Трудности: все понятно, интересная тема. В какую сторону нужно копать, чтобы разобраться с одинарными ковычками и слешами в представлении SQL запроса в коде?