Литмир - Электронная Библиотека

· $ ps

· PID TT TIME COMMAND

· 148799 tty10 0 vi.exe

· 150872 tty10 0 ps.exe

· 320924 tty10 0 ksh.exe

Слева показаны идентификаторы процессов. Зная идентификатор процесса его можно «прибить» командной ‘kill’ или запустить передним планом утилитой ‘fg’. Например, так: “fg 148799” или так - “fg %1”, где “%1” задает порядковый номер процесса в списке. Независимо от способа запуска “fg”, редактор vi вновь появится на экране. Нажмем еще раз «Ctrl-Z» и воспользуемся командной kill для убиения процесса - “kill 148799” или “kill %1” - оба варианта одинаково хороши, но второй писать существенно короче.

А как поступить, если в vi требуется провести поиск сложного шаблона по всему тексту, выполняющийся ну неприлично длительный промежуток времени, в течение которого ничего не остается, как сидеть и тупо пялится на экран?

На помощь приходит фоновое выполнение задач. В этом случае понижается приоритет процесса, а экран предоставляется другому приложению. Перевести приложение в фоновой режим поможет команда “bg”, запускаемая точно так же как и “fg” (которая, кстати, пригодится для возращения процесса из фонового в нормальный режим). Большинство оболочек распознают символ ‘ amp;’, расположенный в конце командной строки, и автоматически запускают приложение в фоновом режиме. Например:

·

$ vi amp;

· [1] 141008

· $ ps

· PID TT TIME COMMAND

· 87458 tty10 0 ps.exe

· 141008 tty10 0 vi.exe

· 320924 tty10 0 ksh.exe

· [1] + Stopped (SIGTTIN) vi amp;

· $

На этом краткое введение в UNIX можно считать законченным. Умения прогуляться по каталогам и запустить нужную программу для начала окажется вполне достаточно. Конечно, это не избавляет от необходимости приобретения справочных руководств и учебников по UNIX, но множество полезной информации можно найти и во встроенной справочной системе, доступной для просмотра с помощью утилиты ‘man’.

Получить помощь по любой команде можно, указав ее название в командной строке, например, так “man ls” (Смотри рисунок 055.bmp)

Техника сетевых атак - img_23

Демонстрация встроенной справочной системы man

Устройство конвейера и перенаправление ввода-вывода (глава для начинающих)

O В этой главе:

O Концепция ввода-вывода

O Перенаправление ввода-вывода

O Использование перенаправления ввода-вывода для атак

O Устройство конвейера

O Поддержка конвейера MS-DOS

O Использование конвейера для атак

Понимание концепции ввода-вывода в UNIX требуется как для самих атак, так и для успешной защиты от них.

Любую программу можно рассматривать как «черный ящик» с входом и выходом. Это справедливо для большинства консольных приложений MS-DOS и Windows 9x/Windows NT, но графические приложения помимо результатов своей работы выводят множество вспомогательной информации, и в определенных ситуациях оказываются бесполезными. Например, все серверные приложения должны по возможности минимизировать обмен с пользователем, посылая и принимая только полезную информацию, а обличить ее в красивый интерфейс можно и на клиентской стороне.

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

Например, программу копирования файлов “copy” (MS-DOS) ничуть ни хуже использовать для создания новых файлов и вывода их содержимого на экран. Для этого достаточно вспомнить, что с клавиатурой и терминалом (объединенных в MS-DOS в устройстве под именем ‘con’) можно обращаться точь-в-точь как с обычным файлом. Доказывает это утверждение следующий эксперимент:

· copy con myfile

· Hello, World!

· ^Z

· 1 файлов скопировано

·

· copy myfile con

· Hello, World!

· 1 файлов скопировано

Начинающим, вероятно, следует пояснить - символ «Ctrl-Z» указывает программе на завершение ввода и конец файла. В самом файле он отсутствует.

В качестве другого примера используем коротенькую демонстрационную программу, написанную на языке Си - “/SRC/io.c”, исходный текст которой приведен ниже (для наглядности никакие проверки не выполняются).

· #include «stdio.h»

· int main(int argc, char *argv[])

· {

· char buf[100],out[7],tmp,p=0;

· FILE *f;

· f=fopen(argv[1],"r");

· fgets( amp;buf[0],100,f);

· fclose(f);

· f=fopen(argv[2],"w");

· while(buf[p])

· {

· sprintf( amp;out[0],"0x%X\n",buf[p++]);

· fputs( amp;out[0],f);

·}

· return 0;

·}

Она читает одну строку из файла, переданного в качестве первого аргумента командной строки, и записывает во второй ASCII коды символов в шестнадцатеричном представлении. Например, так:

· io.exe con con

· Hello, Sailor!

· 0x48

· 0x65

· 0x6C

· 0x6C

· 0x6F

· 0x2C

· 0x20

· 0x53

· 0x61

· 0x69

· 0x6C

· 0x6F

· 0x72

· 0x21

· 0xA

Характерная особенность этой (да и многих других) программ - использование клавиатуры и терминала для приема и отображения информации. Но постоянно указывать ‘con con’ слишком утомительно, гораздо лучше заранее назначить устройства ввода-вывода по умолчанию.

В стандартной библиотеке языка Си для этой цели используются файловые манипуляторы stdin и stdout, связанные со стандартными устройствами ввода и вывода соответственно. Модернизированный вариант программы может выглядеть так (на диске он находится под именем “/SRC/iostd.c”):

· #include «stdio.h»

· int main(int argc, char *argv[])

· {

· char buf[100],out[7],tmp,p=0;

· fgets( amp;buf[0],100,stdin);

· while(buf[p])

· {

· sprintf( amp;out[0],"0x%X\n",buf[p++]);

25
{"b":"837821","o":1}