WEb практикум. Web'cepbep
Скачать 4.76 Mb.
|
WEB'CEPBEP глазами ХАКЕРА 3-е издание Михаил Фленов Проблемы безопасности web-серверов Ошибки в сценариях на РНР, Perl, ASP SQL-инъекции Примеры ошибок на реальных web-сайтах Как искать и исправлять ошибки в сценариях Каптча — защита и обход Санкт-Петербург «БХВ-Петербург» 2021 УДК 004.451 ББК 32.973.26-018.2 Ф71 Фленов М. Е. Ф71 Web-сервер глазами хакера. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2021. — 256 с.: ил. — (Глазами хакера) ISBN 978-5-9775-6795-4 Рассмотрена система безопасности web-серверов и типичные ошибки, совершаемые web-разработчиками при написании сценариев на языках PHP, ASP и Perl. Приведены примеры взлома реальных web-сайтов, имеющих уязвимости, в том числе и популярных. В теории и на практике рассмотрены распространенные хакерские атаки: DoS, Include, SQL-инъекции, межсайтовый скриптинг, обход аутентификации и др. Представлены основные приемы защиты от атак и рекомендации по написанию безопасного программного кода, настройка и способы обхода каптчи. В третьем издании рассмотрены новые примеры реальных ошибок, приведены описания наиболее актуальных хакерских атак и методов защиты от них. Для web-разработчиков и системных администраторов УДК 004.451 ББК 32.973.26-018.2 Руководитель проекта Зав. редакцией Редактор Компьютерная верстка Дизайн серии Оформление обложки Павел Шалин Людмила Гауль Наталья Смирнова Натальи Смирновой Марины Дамбиевой Карины Соловьевой Группа подготовки издания: "БХВ-Петербург", 191036, Санкт-Петербург, Гончарная ул., 20. ISBN 978-5-9775-6795-4 О ООО "БХВ", 2021 © Оформление. ООО "БХВ-Петербург", 2021 Оглавление WEB'CEPBEP 1 глазами 1 Оглавление 4 Введение 8 Основы безопасности 12 1.3.1.Определение типа операционной системы 19 1.3.2.Определение имен работающих служб 20 1.3.3.Используемые фреймворки 24 1.3.4.Использование эксплоитов 28 1.3.5.Автоматизация 29 1.4.1.Анализатор web-уязвимостей 33 1.4.2.Взлом с помощью поисковой системы 36 1.7.1.Distributed Denial of Service (DDoS) 46 1.7.2.Защита от распределенной атаки 47 1.8.1.Защита web-сервера 49 1.8.2.Модули безопасности Apache 50 1.9.1.Права сценариев web-сервера 52 1.9.2.Права системных сценариев 53 1.9.3.Права доступа к СУБД 54 1.11.1.Самостоятельно написанные программы 58 1.11.2.Готовые решения 59 1.11.3.Программы, написанные под заказ 60 1.11.4.Золотая середина 60 Простые методы взлома 64 2.1.1.Вариант накрутки № 1 64 2.1.2.Вариант накрутки № 2 65 2.1.3.Вариант накрутки № 3 66 2.1.4.Защита от накрутки 67 2.3.1.Внутренний мир каптчи 71 2.3.2.Примеры некорректных каптчей 73 2.3.3.Пример хорошей каптчи 74 Взлом PHP-сценариев 80 3.1.1.Пример реальной ошибки 80 3.1.2.Проблема include 85 3.1.3.Инъекция кода 89 3.2.1.Лишние сценарии на рабочем сервере 91 3.2.2.Дополнительные программы 91 3.2.3.Резервные копии или старые файлы 92 3.3.1.Метод GET 96 3.3.2.Метод POST 98 3.3.3.Уязвимость 101 3.3.4.Другие методы 103 3.3.5.Инициализация переменных 104 3.4.1.Конфигурационные файлы 110 3.4.2.Промежуточные модули 113 3.4.3.Скрытые функции 116 3.9.1.Воровство кликов 125 3.9.2.Cross Frame Scripting 125 3.9.3.Защита от фреймов 126 Работа 130 с системными командами 130 • • • 131 4.3.1.Проверка корректности файлов изображений 142 4.3.2.Проверка корректности текстовых файлов 144 4.3.3.Сохранение файлов в базе данных 145 4.3.4.Обращение к файловой системе 145 4.3.5.Угроза безопасности 148 SQL-инъекция (PHP + MySQL) 149 5.2.1.Сбор информации 156 5.2.2.Использование уязвимости 170 5.2.3.Доступ к файловой системе 172 5.2.4.Поиск уязвимости 172 5.2.5.Процент опасности 173 5.2.6.Возможные проблемы 176 5.2.7.От теории к практике 178 SQL-инъекция .NET + MS SQL Server 181 6.1.1.Опасные процедуры MS SQL Server 181 6.1.2.Распределение прав доступа 184 6.1.3.Опасные SQL-запросы 186 6.1.4.Рекомендации по безопасности MS SQL Server 187 CSRF, или XSRF-уязвимость 192 DoS-атака на web-сайт 201 8.2.1.Оптимизация SQL-запросов 202 8.2.2.Оптимизация базы данных 208 8.2.3.Выборка необходимых данных 211 8.2.4.Резюме 212 8.3.1.Кеширование вывода 213 8.3.2.Кеширование web-страниц 214 8.3.3.Программные решения 216 8.3.4.Медленный код 217 8.3.5.Асинхронный код 218 Авторизация 226 XSS 239 Заключение 251 Предметный указатель 253 252 Предметный указатель Введение Предыдущее издание 2009 года начиналось словами: "Интернет захватывает все новые и новые области". Прошло уже более 10 лет, и можно смело сказать, что интернет захватил все. У меня дома свет включается голосом через "умную" колонку, и даже контролировать включение лампочки я могу удаленно. Если же я не помню, выключил ли свет перед уходом, то смогу это легко проверить с помощью телефона через интернет. Дверь в дом также открывается с телефона, и настройки сделаны так, чтобы дверь открывалась автоматически, когда я подхожу к дому. Через интернет также можно управлять температурой в доме, включая системы климат- контроля. Все эти возможности автоматизированного управления домом посредством интернета объединены в понятие "умный дом" (от англ. smart home). В 2000-х годах я писал о том, что не готов представить управление через интернет даже безобидными бытовыми приборами, но уже через пять лет рискнул начав автоматизацию и продолжаю это делать по сей день. Что изменилось, и почему я поменял свое отношение к интернету? Дело в том, что ИТ-мир изменился, отношение людей к безопасности изменилось. Да, мир еще не идеален и, возможно, никогда таким не станет, уязвимости в программном обеспечении существовали и будут существовать, но за счет более серьезного отношения к безопасности хочется доверять и жить в современном мире с полноценной автоматизацией. Крупные бренды серьезно относятся к безопасности, и поэтому я просто выбираю известных и проверенных производителей, которые вкладывают деньги не только в разработку, но и в тестирование. Действительно ли хакеры так страшны? Может быть, страх навеян журналистами, которые пишут на тему интернет-взломов и любят приукрасить, преувеличивая возможности хакеров? Да, действия хакеров содержат угрозу, но более опасны программисты и администраторы, не уделяющие проблемам безопасности достаточно внимания. Ошибаются все, я и сам не без греха. Но иногда встречается откровенный непрофессионализм, когда нет даже простейших попыток обеспечить web-серверу достойную защиту. Чаще всего этим грешат люди, не имеющие достаточных навыков работы с компьютером, которые только недавно подключились к интернету и решили создать свой web-сайт. Но непрофессионализм или невнимательность составляют не такую уж и большую долю в нашем мире. Если бы сайты так легко было взломать, то они бы не существовали. В интернете много сайтов, которые оперируют не только безобидной информацией, но и деньгами в виде электронной наличности. Я никогда не был хакером, но всегда интересовался безопасностью, потому что работаю со стороны защитных барьеров. А чтобы защититься от интернет-атак, нужно понимать, откуда может прийти опасность и чем она может грозить. Зачем мы будем рассматривать взлом, да еще и на практике? С одной стороны, этот материал можно воспринимать как инструкции по взлому, но с другой стороны, вы не сможете защититься, если не будете знать, откуда может прийти угроза и в чем она будет выражаться. Допустим, что вы полководец и хотите защитить свою территорию от вторжения. Вы можете выкопать вокруг своих земель ров, заминировать дороги и растянуть колючую проволоку, но все эти действия будут бессмысленными, если враг готовит воздушный удар или авиацию с бомбами. Поэтому сначала следует выяснить, как может действовать неприятель, а потом уже искать достойный ответ. Именно так мы и поступим: будем рассматривать возможную угрозу, а потом искать защиту от нее. Несмотря на то, что я описываю взлом и знаю, как взламываются сайты, я еще ни разу в жизни ничего не взламывал ради личной выгоды или корыстных цел. То, что я делал, даже нельзя называть взломом. Да, я находил уязвимости на сайте и обнаруживал двери проникновения на web-сайты, но я никогда не брал чужой информации и всегда сообщал о найденных уязвимостях владельцам сайтов. Что подразумевается под взломом web-сервера? Это взлом web-сайта или службы, которая обрабатывает web-страницы? Мы будем рассматривать проблему комплексно, включая защиту аппаратной части и операционной системы (ОС), а также web-сервера, баз данных и самих сценариев, которые выполняются на web-сервере. Аппаратную часть и ОС мы будем рассматривать поверхностно, по мере того как нам понадобится та или иная информация. Просто я не думаю, что стоит лишний раз говорить о том, как защищать BIOS компьютера или загрузчик: этот вопрос уж слишком отдален от тематики книги. Обо мне На всякий случай немного обо мне и о том, почему я решился создать эту книгу. Я всегда интересовался безопасностью. В 1990-е годы начинал как один из внештатных авторов журнала "Хакер", для которого написал множество статей, и стоял у истоков создания рубрики "Кодинг". В 2009 году переехал в Канаду, где начал работать в консалтинговой компании, которая выполняла работы для Sony USA. После ухода из этой компании я еще три года работал на Sony и выполнял для них работы по контракту. Я разрабатывал и сопровождал такие сайты, как: www.sonyreward.com — сейчас этот сайт переехал на новый адрес https://www.rewards.sony.com; www.wheeloffortune.com — сайт для телепрограммы, которая является оригинальной версией "Поля чудес". В 2009 году я начинал как простой программист, но уже через три года стал архитектором. В течение 8 лет я работал над различными сайтами Sony, которые регулярно подвергались атакам хакеров. В данной книге я постараюсь поделиться с читателями личным опытом работы по вопросам безопасности. Теорию несложно найти в интернете, а вот почитать о конкретном опыте с подробными пояснениями — это достаточно уникальное предложение. Надеюсь, моя книга будет интересной, а мои пояснения окажутся простыми и полезными. Требования Какие знания понадобятся для чтения этой книги? Да практически никаких, я постараюсь рассказывать все максимально просто, чтобы информация была доступна всем. Для работы с примерами в этой книге я бы рекомендовал Linux или macOS, но если вы предпочитаете Windows, то его тоже можно использовать, особых проблем нет. Благо в Windows появилась возможность запустить подсистему Linux. Запустите Windows Store (в русской редакции Windows это может называться "Магазин приложений Windows"), далее находим Ubuntu и устанавливаем его. Таким образом вы получите доступ к полноценной командной строке Linux прямо в Windows. Я пишу эти строки в Windows 10, а все Linux команды буду выполнять как раз с помощью подсистемы WSL (Windows Subsystem for Linux или подистема Windows для Linux) и конкретно Ubuntu. Когда я буду говорить, что какую-то команду нужно выполнить из командной строки Linux, то ее можно выполнять из терминала Linux или macOS или из терминала Ubuntu в Windows. Что не вошло в книгу Что не будет рассмотрено в данной книге подробно, так это социальная инженерия. Эту тему мы затронем лишь поверхностно, хотя именно данный метод позволяет осуществить взлом достаточно быстро и эффективно. Тут можно писать отдельную книгу, и если вас интересует более подробная информация, то советую обратиться к гуру социальной инженерии Кевину Митнику и его книге "Искусство обмана: контролирование человеческого фактора в безопасности". Немного отвлекусь и скажу, что когда Кевин Митник отбывал наказание в местах не столь отдаленных, то большинство считало его величайшим хакером всех времен и народов, потому что он получил большой срок. Помню, как в интернете легко было встретить лозунги типа "Free Kevin Mitnick" ("Освободите Кевина Митни- ка"). Но стоило человеку выйти на свободу, как его тут же начали считать чуть ли не ламером и зазнайкой, потому что он начал писать книги и специализироваться на консалтинге в сфере безопасности. Я считаю этого человека очень умным и весьма опытным в сфере безопасности и особенно социальной инженерии и настоятельно рекомендую к прочтению его труды. Да, его взломы использовали или основывались на социальной инженерии, но это не отнимает его заслуг. В некоторых случаях для понимания представленного материала могут понадобиться навыки программирования. Конечно же, я постараюсь все описывать доступно и понятно каждому, вне зависимости от уровня подготовки, и все же опыт программирования и знание команд ОС Linux желательны. По этим темам рекомендую две мои книги. О безопасности ОС Linux и ее командах можно почитать в книге "Linux глазами хакера", а о программировании для интернета на языке PHP можно узнать из книги "PHP глазами хакера". Интернет Из интернет-ресурсов я могу порекомендовать: www.flenov.info — блог очень умного парня. Сам себя не похвалишь, так никто не похвалит; www.securitylab.ru — отличный сайт по безопасности, где можно почитать много интересных статей и пообщаться на форуме с очень опытными людьми в сфере безопасности; www.xakep.ru — сайт знаменитого журнала "Хакер", в котором работал и ваш покорный слуга. Сайтов по безопасности в рунете очень много, но для начала этого будет достаточно. Не буду выделять какие-то как лучшие, а порекомендую читать разные сайты, чтобы увидеть различные точки зрения. Благодарности В каждой своей книге я благодарю тех, кто помогает мне в работе. Не устану благодарить своих родных и близких (жену, детей, родителей), которые ежедневно окружают меня и терпят мои исчезновения в виртуальной реальности. Я вас всех люблю и рад, что вы у меня есть. Отдельная и особая благодарность издательству "БХВ-Петербург" и всем его сотрудникам, которые помогали мне в создании этой книги. Хочу поблагодарить всех моих читателей и Вас, за то, что купили эту книгу, а не скачали из интернета нелегальную копию, и надеюсь, что эта работа Вам понравится. Мы постарались сделать все необходимое, чтобы книга была интересной и полезной и никто не пожалел бы о потраченных на нее денег. Если возникнут вопросы или пожелания по улучшению данной книги, то вы всегда можете связаться со мной через сайт www.flenov.info. |