
Представляем долгожданную новинку – 4-е издание легендарного бестселлера Михаила Флёнова “Веб-сервер глазами хакера”.
Рассмотрена система безопасности веб-серверов и типичные ошибки, совершаемые разработчиками при написании веб-приложений. Приведены примеры взлома реальных сайтов, имеющих уязвимости, в том числе и популярных. В теории и на практике рассмотрены распространенные хакерские атаки: DoS, SQL-инъекции, межсайтовый скриптинг, использование CSRF- и XSS-уязвимости, обход аутентификации и др. Представлены основные приемы защиты от атак и рекомендации по написанию безопасного программного кода, настройка и способы обхода каптчи. В четвертом издании рассмотрены новые примеры реальных ошибок, наиболее актуальные уязвимости, показаны современные виды хакерских атак и методы защиты от них.
Для web-разработчиков и системных администраторов
- Проблемы безопасности веб-серверов
- Ошибки в сценариях на PHP
- SQL-инъекции
- Методы обхода капчи
- Примеры ошибок на реальных веб-сайтах
- Как искать и исправлять ошибки в сценариях
- DoS-атаки на веб-сайт
- CSRF- и XSS-уязвимости
Книгу “Веб-сервер глазами хакера. 4-е изд.” можно купить со скидкой в интернет-магазине издательства “БХВ“.
Предисловие…………………………………………………………………………………………….. 9
Обо мне……………………………………………………………………………………………………………………………………….. 10
Требования…………………………………………………………………………………………………………………………………. 11
Что не вошло в книгу?……………………………………………………………………………………………………………….. 11
Интернет……………………………………………………………………………………………………………………………………… 12
Благодарности…………………………………………………………………………………………………………………………… 12
Глава 1. Основы безопасности……………………………………………………………….. 13
1.1. Социальная инженерия………………………………………………………………………………………………………. 13
1.2. Природа взлома…………………………………………………………………………………………………………………… 18
1.2.1. Любые данные опасны…………………………………………………………………………………………….. 19
1.2.2. Запретить нельзя пропустить………………………………………………………………………………….. 20
1.2.3. Санитайзер………………………………………………………………………………………………………………… 21
1.2.4. Место встречи…………………………………………………………………………………………………………… 23
1.3. Исследование………………………………………………………………………………………………………………………. 23
1.3.1. Определение типа операционной системы…………………………………………………………….. 27
1.3.2. Определение имен работающих служб………………………………………………………………….. 28
1.3.3. Используемые фреймворки………………………………………………………………………………………. 32
1.3.4. Использование эксплойтов………………………………………………………………………………………. 36
1.3.5. Автоматизация………………………………………………………………………………………………………….. 37
1.4. Взлом веб-сайтов………………………………………………………………………………………………………………… 40
1.4.1. Анализаторы веб-уязвимостей………………………………………………………………………………… 42
Утилита Sqlmap………………………………………………………………………………………………………… 43
Инструмент XSStrike………………………………………………………………………………………………… 44
1.4.2. Взлом с помощью поисковой системы……………………………………………………………………. 45
Поиск индексированных секретов………………………………………………………………………….. 45
Поиск уязвимых веб-сайтов…………………………………………………………………………………….. 46
Управление поисковым роботом…………………………………………………………………………….. 47
1.5. Подбор паролей………………………………………………………………………………………………………………….. 48
1.6. Троянские программы………………………………………………………………………………………………………… 52
1.7. Атаки на отказ в обслуживании………………………………………………………………………………………… 53
1.7.1. Атака Denial of Service (DoS)……………………………………………………………………………………. 53
1.7.2. Атака Distributed Denial of Service (DDoS)………………………………………………………………. 56
Защита от распределенной атаки…………………………………………………………………………… 57
1.8. Меры безопасности…………………………………………………………………………………………………………….. 58
1.8.1. Защита веб-сервера………………………………………………………………………………………………….. 59
1.8.2. Модули безопасности Apache…………………………………………………………………………………. 60
Модуль mod_sequrity……………………………………………………………………………………………….. 60
Модуль mod_rewrite…………………………………………………………………………………………………. 61
1.9. Права доступа…………………………………………………………………………………………………………………….. 62
1.9.1. Права сценариев веб-сервера………………………………………………………………………………….. 62
1.9.2. Права системных сценариев……………………………………………………………………………………. 63
1.9.3. Права доступа к СУБД…………………………………………………………………………………………….. 64
Права на удаленное подключение к СУБД……………………………………………………………. 66
1.10. Не все так безнадежно……………………………………………………………………………………………………… 67
1.11. Ошибки есть, их не может не быть…………………………………………………………………………………… 69
1.11.1. Самостоятельно написанные программы……………………………………………………………. 69
1.11.2. Готовые решения……………………………………………………………………………………………………. 70
1.11.3. Программы, написанные под заказ………………………………………………………………………. 71
1.11.4. Золотая середина……………………………………………………………………………………………………. 71
1.12. Сложность защиты……………………………………………………………………………………………………………. 72
1.13. Утечка информации………………………………………………………………………………………………………….. 72
1.13.1. «Говорящие» сервисы…………………………………………………………………………………………….. 72
1.13.2. Человеческий фактор……………………………………………………………………………………………… 73
1.14. Фишинг………………………………………………………………………………………………………………………………. 74
Глава 2. Простые методы взлома……………………………………………………………. 75
2.1. Накрутка голосования……………………………………………………………………………………………………….. 75
2.1.1. Вариант накрутки № 1……………………………………………………………………………………………… 76
2.1.2. Вариант накрутки № 2……………………………………………………………………………………………… 77
2.1.3. Вариант накрутки № 3……………………………………………………………………………………………… 78
2.1.4. Локальное хранилище……………………………………………………………………………………………… 79
2.1.5. Защита от накрутки………………………………………………………………………………………………….. 80
2.2. Флуд……………………………………………………………………………………………………………………………………… 82
2.3. CAPTCHA…………………………………………………………………………………………………………………………….. 85
2.3.1. Внутренний мир каптчи…………………………………………………………………………………………… 86
2.3.2. Примеры некорректных каптч…………………………………………………………………………………. 87
2.3.3. Пример хорошей каптчи………………………………………………………………………………………….. 89
2.3.4. Спамеры…………………………………………………………………………………………………………………….. 91
2.4. Хрупкое печенье………………………………………………………………………………………………………………….. 92
Глава 3. Взлом PHP-сценариев……………………………………………………………….. 94
3.1. Неверное обращение к файлам………………………………………………………………………………………….. 94
3.1.1. Локальное подключение файлов…………………………………………………………………………….. 95
Проблема include……………………………………………………………………………………………………. 100
3.1.2. Удаленное подключение файлов………………………………………………………………………….. 104
3.2. Ничего лишнего!……………………………………………………………………………………………………………….. 107
3.2.1. Лишние сценарии на рабочем сервере…………………………………………………………………. 107
3.2.2. Дополнительные программы…………………………………………………………………………………. 108
3.2.3. Резервные копии или старые файлы……………………………………………………………………… 108
3.3. Автоматическая регистрация переменных…………………………………………………………………….. 110
3.3.1. Метод GET………………………………………………………………………………………………………………. 112
3.3.2. Метод POST…………………………………………………………………………………………………………….. 115
3.3.3. Уязвимость………………………………………………………………………………………………………………. 118
3.3.4. Другие методы………………………………………………………………………………………………………… 120
3.3.5. Инициализация переменных………………………………………………………………………………….. 122
3.4. Работа с данными на сервере………………………………………………………………………………………….. 124
3.4.1. Локальная копия сайта………………………………………………………………………………………….. 124
3.4.2. Утилиты разработчика браузера………………………………………………………………………….. 125
3.4.3. Специализированные утилиты……………………………………………………………………………… 128
3.5. Принцип модульности………………………………………………………………………………………………………. 128
3.5.1. Конфигурационные файлы……………………………………………………………………………………. 128
3.5.2. Промежуточные модули………………………………………………………………………………………… 131
3.5.3. Скрытые функции…………………………………………………………………………………………………… 134
3.6. Проверка корректности параметров……………………………………………………………………………….. 135
3.7. Проблема регулярных выражений………………………………………………………………………………….. 137
3.7.1. Регулярные выражения Perl……………………………………………………………………………………. 138
3.8. Опасность переменных окружения…………………………………………………………………………………. 140
3.9. Выполнение во фрейме…………………………………………………………………………………………………….. 141
3.9.1. Воровство кликов……………………………………………………………………………………………………. 142
3.9.2. Уязвимость Cross Frame Scripting…………………………………………………………………………… 143
3.9.3. Защита от фреймов…………………………………………………………………………………………………. 143
3.10. Замечание для программистов на C#……………………………………………………………………………. 144
Глава 4. Работа с системными командами……………………………………………. 146
4.1. Вызов системных команд…………………………………………………………………………………………………. 146
4.2. Защита от выполнения произвольных команд………………………………………………………………. 150
4.3. Загрузка файлов………………………………………………………………………………………………………………… 152
4.3.1. Проверка корректности файлов изображений…………………………………………………….. 156
4.3.2. Проверка корректности текстовых файлов………………………………………………………….. 160
4.3.3. Сохранение файлов в базе данных……………………………………………………………………….. 161
4.3.4. Обращение к файловой системе……………………………………………………………………………. 161
4.3.5. Угроза безопасности………………………………………………………………………………………………. 164
4.4. Функция eval……………………………………………………………………………………………………………………… 165
Глава 5. SQL-инъекция (PHP + MySQL)……………………………………………….. 167
5.1. Поиск………………………………………………………………………………………………………………………………….. 168
5.2. Ошибка………………………………………………………………………………………………………………………………. 171
5.2.1. Сбор информации…………………………………………………………………………………………………… 175
5.2.2. Использование уязвимости……………………………………………………………………………………. 181
5.2.3. Доступ к файловой системе…………………………………………………………………………………… 182
5.2.4. Поиск уязвимости……………………………………………………………………………………………………. 183
5.2.5. Процент опасности…………………………………………………………………………………………………. 184
5.2.6. Возможные проблемы……………………………………………………………………………………………. 187
5.2.7. От теории к практике……………………………………………………………………………………………… 188
5.3. Настройка защиты от SQL-инъекции……………………………………………………………………………… 191
5.4. Защита СУБД……………………………………………………………………………………………………………………. 193
5.5. Технологии ORM………………………………………………………………………………………………………………. 197
Глава 6. SQL-инъекция (.NET + MS SQL Server)………………………………….. 199
6.1. Особенности MS SQL Server…………………………………………………………………………………………….. 199
6.1.1. Опасные процедуры MS SQL Server……………………………………………………………………… 200
6.1.2. Распределение прав доступа…………………………………………………………………………………. 203
6.1.3. Опасные SQL-запросы……………………………………………………………………………………………. 205
6.1.4. Рекомендации по безопасности MS SQL Server…………………………………………………… 206
6.2. Защита от инъекции в ASP.NET……………………………………………………………………………………….. 208
6.3. Entity Framework……………………………………………………………………………………………………………….. 209
Глава 7. CSRF-уязвимость……………………………………………………………………. 211
7.1. Примеры межсайтовой атаки…………………………………………………………………………………………… 211
7.2. Плохая защита от межсайтовой уязвимости………………………………………………………………….. 213
7.3. Хорошая защита……………………………………………………………………………………………………………….. 214
7.4. Сross-origin — делим ресурсы………………………………………………………………………………………….. 218
Глава 8. DoS-атака на веб-сайт…………………………………………………………….. 220
8.1. Поиск медленных страниц……………………………………………………………………………………………….. 220
8.2. Оптимизация работы с СУБД………………………………………………………………………………………….. 221
8.2.1. Оптимизация SQL-запросов…………………………………………………………………………………… 222
8.2.2. Оптимизация базы данных…………………………………………………………………………………….. 228
8.2.3. Выборка необходимых данных…………………………………………………………………………….. 232
8.3. Оптимизация кода…………………………………………………………………………………………………………….. 234
8.3.1. Кеширование вывода……………………………………………………………………………………………… 234
8.3.2. Кеширование веб-страниц…………………………………………………………………………………….. 235
8.3.3. Программные решения…………………………………………………………………………………………… 237
8.3.4. Медленный код……………………………………………………………………………………………………….. 238
8.3.5. Асинхронный код……………………………………………………………………………………………………. 240
8.4. Блокировки………………………………………………………………………………………………………………………… 240
8.5. Другие ресурсы…………………………………………………………………………………………………………………. 241
8.6. Оптимизация в C#……………………………………………………………………………………………………………… 242
8.7. Медленный HTTP……………………………………………………………………………………………………………… 245
8.8. Тестируем производительность………………………………………………………………………………………. 246
Глава 9. Авторизация…………………………………………………………………………… 251
9.1. Аутентификация на веб-сервере………………………………………………………………………………………. 251
9.2. Аутентификации на основе cookie…………………………………………………………………………………… 253
9.3. Советы по хранению паролей…………………………………………………………………………………………. 259
9.4. Соль на рану……………………………………………………………………………………………………………………… 259
9.5. Фиксация сеанса или сессии……………………………………………………………………………………………. 261
9.6. Закрытые сессии……………………………………………………………………………………………………………….. 263
9.7. Сессии публичных сайтов……………………………………………………………………………………………….. 263
9.8. Хранение сессии в cookie…………………………………………………………………………………………………. 264
9.9. OAuth-аутентификация…………………………………………………………………………………………………….. 266
9.10. Подбор аккаунтов…………………………………………………………………………………………………………… 269
9.11. Контрольный вопрос………………………………………………………………………………………………………. 271
9.12. Взлом двухфакторной аутентификации……………………………………………………………………….. 272
9.12.1. Кто-то посередине………………………………………………………………………………………………. 272
9.12.2. Секрет………………………………………………………………………………………………………………….. 274
9.13. Мало авторизации — параметры…………………………………………………………………………………. 275
Глава 10. XSS-уязвимость…………………………………………………………………….. 277
10.1. Основы XSS……………………………………………………………………………………………………………………… 277
10.2. Перехватываем данные………………………………………………………………………………………………….. 280
10.3. Мощь языка JavaScript……………………………………………………………………………………………………. 282
10.4. Защита от XSS…………………………………………………………………………………………………………………. 283
Глава 11. Web API………………………………………………………………………………… 290
11.1. Программа Postman………………………………………………………………………………………………………… 290
11.2. Утилита curl…………………………………………………………………………………………………………………….. 296
Заключение………………………………………………………………………………………….. 297
Предметный указатель…………………………………………………………………………. 299
