Чтение онлайн

на главную

Жанры

Техника сетевых атак
Шрифт:

Например:

· open( F ,"$file");

· while (« F »)

· {

· print;

·}

Но что произойдет, если вместо манипулятора задать маску файла? В документации к Perl сказано, такая конструкция выведет содержимое указанной директории согласно маске (в листинге она выделена жирным шрифтом). Такую ситуацию позволяет продемонстрировать фрагмент кода, приведенный ниже (на диске, прилагаемом к книге, он находится в файле “/SRC/dir.pl”):

· while (« *.pl »)

· {

· print;

· print "\n";

·}

· bomb.pl

· dir.pl

· hack.pl

· hello.pl

· iis4_ml.pl

· nntp.pl

· nntp_post.pl

· open.pl

· post.pl

· serv.pl

· serv1.pl

· sioux.pl

· smtp.pl

· smtp1.pl

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

Любопытной особенностью Perl является возможность хранения данных непосредственно в тексте программы. Для этой цели используется лексема “__DATA__”. Содержащейся за ней текст может быть прочитан через файловый манипулятор “DATA”. Такой прием часто используется программистами для хранения конфигурационных настроек, служебных данных, а иногда и паролей.

Если есть возможность модификации одного из манипуляторов атакуемой программы, изменив его значение на “DATA”, можно получить содержимое скрытых данных.

Пример, приведенный ниже(на диске, прилагаемом к книге, он расположен в файле “/SRC/data.pl”), демонстрирует использование манипулятора “DATA” для доступа к приватным данным.

· while (« DATA »)

· {

· print;

·}

·

· __DATA__

· file: "mit";

· dir: "…/cfg/gbook";

· user: "Jafar";

· pass: "qwerty";

· file: "mit";

· dir: "…/cfg/gbook";

· user: "Jafar";

· pass: "qwerty";

Любопытно, но практически ни один из существующих скриптов не осуществляет фильтрации строки “DATA”, даже если активно использует эту лексему в своих целях. Действительно, перенос секретных данных, таких, например, как имена пользователей и пароли, в тело программы, значительно снижает риск попадания этой информации в руки злоумышленника, поскольку при нормальном развитии событий клиенту возвращается результат работы скрипта, а не его содержимое.

Переменная “$0” в Perl содержит полный путь и имя к исполняемой программе. Если существует возможность подсунуть ее скрипту под видом имени файла, то (в зависимости от режима открытия фала) можно не только читать, но и модифицировать(!) программный код.

Ниже приведен простейший пример самомодифицирующейся программы [298]. Файлу должны быть установлены следующие права “r w x - - x - - x”, то есть другими словами, отсутствие у пользователя прав записи, не помещает ему изменить программу ее же собственными руками!

· $file="»$0";

· open(H,"$file");

· print H "\nprint 'Hello,Sailor!';";

· close(H);

После первого запуска, код скрипта будет выглядеть следующим образом (жирным цветом выделена строка, добавленная самой программой):

· $file="»$0";

· open(H,"$file");

· print H "\nprint 'Hello,Sailor!';";

· close(H);

· print 'Hello,Sailor!';

При всех последующих запусках, сервер будет выводить приветствия на экран, увеличивающиеся в количестве с каждой итерацией.

Отсутствие фильтрации переменной “$0” и имен файлов может привести к перезаписи программного кода или HTML документа, расположенного на сервере.

Другая распространенная ошибка заключается в задании режима открытия файла по умолчанию. Используя тот факт, что функция “open”, интерпретирует первые символы имени файла, как режим доступа, появляется возможность открыть файл на запись! Для этого достаточно указать угловую скобку “»” перед именем файла.

Например, скрипт, приведенный ниже, на первый взгляд предназначается для чтения файлов:

· open(F,”$file”);

· while («F»)

· {

· print;

·}

На самом же деле, конструкция типа “»filename” способна уничтожить содержимое файла “filename”, что никак не входит в планы разработчика скрипта. Поэтому, рекомендуется явно задавать режим открытия, закрывая лазейку злоумышленнику. Правильное открытие файла для последующего чтения из него должно выглядеть приблизительно так: “open(F,”«$file”)”. Но отсюда вовсе не следует, что конструкция “open(F, “»$file”)”, открывающая файл для записи, то же окажется правильной! Если переменной “$filename” присвоить значение “» file”, в результате получится “open(F, “» file”)” и файл окажется открыт для дозаписи, что в корне меняет дело. В некоторых случаях такой трюк позволяет обойти лимиты на ограничение объема и забить мусором все доступное дисковое пространство или закачать на сервер файл свыше допустимого размера.

Еще одна распространенная ошибка связана с особенностью обработки символа “-“. Будучи переданным в качестве имени файла, он трактуется как “STDIN” (стандартный ввод) при чтении и “STDOUT” (стандартный вывод) при записи.

При использовании стандартных скриптов рекомендуется изменять имена всех файлов, особенно содержащих секретную информацию. В совокупности с правильной фильтрацией ввода, отсекающей все попытки просмотра содержимого директории, это в значительной степени снижает вероятность успешной атаки.

Популярные книги

Восход. Солнцев. Книга VIII

Скабер Артемий
8. Голос Бога
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Восход. Солнцев. Книга VIII

Невеста напрокат

Завгородняя Анна Александровна
Любовные романы:
любовно-фантастические романы
6.20
рейтинг книги
Невеста напрокат

Сердце Дракона. Том 12

Клеванский Кирилл Сергеевич
12. Сердце дракона
Фантастика:
фэнтези
героическая фантастика
боевая фантастика
7.29
рейтинг книги
Сердце Дракона. Том 12

Вперед в прошлое 3

Ратманов Денис
3. Вперёд в прошлое
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Вперед в прошлое 3

Магия чистых душ 3

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
Магия чистых душ 3

Вечный. Книга V

Рокотов Алексей
5. Вечный
Фантастика:
боевая фантастика
попаданцы
рпг
5.00
рейтинг книги
Вечный. Книга V

Радужная пони для Сома

Зайцева Мария
2. Не смей меня хотеть
Любовные романы:
современные любовные романы
эро литература
5.00
рейтинг книги
Радужная пони для Сома

Дурашка в столичной академии

Свободина Виктория
Фантастика:
фэнтези
7.80
рейтинг книги
Дурашка в столичной академии

Кодекс Крови. Книга II

Борзых М.
2. РОС: Кодекс Крови
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Кодекс Крови. Книга II

Исход

Рус Дмитрий
7. Играть, чтобы жить
Фантастика:
фэнтези
киберпанк
рпг
9.05
рейтинг книги
Исход

Измена. Не прощу

Леманн Анастасия
1. Измены
Любовные романы:
современные любовные романы
4.00
рейтинг книги
Измена. Не прощу

Неудержимый. Книга XIII

Боярский Андрей
13. Неудержимый
Фантастика:
фэнтези
попаданцы
аниме
5.00
рейтинг книги
Неудержимый. Книга XIII

Магия чистых душ 2

Шах Ольга
Любовные романы:
любовно-фантастические романы
5.56
рейтинг книги
Магия чистых душ 2

Титан империи 6

Артемов Александр Александрович
6. Титан Империи
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Титан империи 6