Файл: Paul Troncone and Carl AlbingCybersecurity Ops with bashAttack, Defend, and Analyze from the.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 458
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
20 Часть I • Основы
Примеры.команд.в.Windows,.если.на.это.нет.особых.указаний,.запускаются.с.по- мощью.Git.Bash,.а.не.из.командной.строки.Windows.
Запуск Linux и bash в Windows
Оболочка.bash.и.обсуждаемые.нами.команды.практически.во.всех.дистрибутивах.
Linux.установлены.по.умолчанию,.чего.нельзя.сказать.о.Windows..Но,.к.счастью,.
в.Windows.существует.множество.способов.запуска.Linux-команд.и.скриптов.для.
bash..Здесь.мы.опишем.четыре.варианта:.Git.Bash,.Cygwin,.подсистему.Windows.
для.Linux.(Windows.Subsystem.for.Linux,.WSL),.командную.строку.Windows.и.ин- струмент.написания.скриптов.
Git Bash
Многие.стандартные.команды.Linux.и.оболочку.bash.можно.запустить.в.Windows,.
если.установить.Git,.где.есть.порт.bash..Благодаря.тому.что.Git Bash.популярен.
и.способен.выполнять.как.стандартные.команды.Linux.и.bash,.так.и.многие.
команды.самой.Windows,.это.наиболее.предпочтительный.способ.выполнения.
приведенных.в.книге.примеров.
Git.можно.загрузить.с.сайта.
https://git-scm.com/
..После.того.как.Git.будет.загружен,.
для.его.запуска.достаточно.щелкнуть.правой.кнопкой.мыши.на.
Рабочем столе
.и.вы- брать.в.появившемся.контекстном.меню.команду.
Git Bash Here
.(Установить.Git.
Bash).
Cygwin
Cygwin.—.это.полноценный.эмулятор.Linux,.предоставляющий.также.возмож- ность.установить.различные.дополнения..Он.похож.на.Git.Bash.тем,.что,.помимо.
стандартных.команд.Linux,.позволяет.запускать.многие.команды.самой.Windows..
Cygwin.можно.загрузить.с.сайта.
https://www.cygwin.com/
Подсистема Windows для Linux
В.Windows.10,.если.в.ней.установлена.подсистема Windows для Linux.(WSL),.
предумотрен.встроенный.способ.запуска.Linux.(а.следовательно,.и.bash)..Чтобы.
установить.WSL,.выполните.следующие.действия.
Глава 1. Работа с командной строкой
1 2 3 4 5 6 7 8 9 ... 23
21
1.. Щелкните.на.поисковой.строке.Windows.10.
2.. Введите.поисковый.запрос.
Control Panel
.(Панель.управления).и.откройте.одно- именную.панель.
3.. Щелкните.на.строке.
Programs and Features
.(Программы.и.компоненты).
4.. В.левой.части.открывшегося.окна.щелкните.на.строке.
Turn Windows features on or off
.(Включение.и.выключение.компонентов.Windows).
5.. Установите.флажок.
Windows Subsystem for Linux
.(Подсистема.Windows.для.Linux).
6.. Перезагрузите.систему.
7.. После.перезагрузки.откройте.
Windows Store
.(Хранилище.Windows).и.введите.по- исковый.запрос.Linux..Вы.увидите.список.доступных.к.установке.приложений.
8.. Найдите.и.установите.Ubuntu.
9.. После.установки.Ubuntu.откройте.командную.строку.Windows,.введите.
ubuntu и.нажмите.клавишу.
Enter
Заметьте,.что.при.подобном.использовании.дистрибутива.WSL.Linux.вы.можете.
выполнять.сценарии.bash.и.подключать.файловую.систему.Windows,.но.не.можете,.
как.в.Git.Bash.и.Cygwin,.выполнять.вызовы.системных.функций.к.командам.самой.
Windows.
Установив WSL и зайдя в Windows Store, помимо Ubuntu, вы можете выбрать и другие версии Linux, например Kali.
Командная строка и инструмент создания скриптов Windows
Установив.подсистему.Windows.для.Linux,.с.помощью.команды.
bash
-c
.вы.можете.
выполнять.команды.Linux.и.сценарии.bash.напрямую.из.командной.строки.и.с.ис- пользованием.инструмента.создания.скриптов.Windows.
Например,.можно.выполнить.Linux-команду.
pwd
.из.командной.строки.Windows.
по.отношению.к.открытому.в.данный.момент.каталогу:
C:\Users\Paul\Desktop>bash -c "pwd"
/mnt/c/Users/Paul/Desktop
22 Часть I • Основы
Если.у.вас.в.виде.части.WSL.установлено.несколько.дистрибутивов.Linux,.при.
запуске.команды.вместо.слова.
bash
.вы.можете.использовать.название.дистри- бутива:
C:\Users\Paul\Desktop>ubuntu -c "pwd"
/mnt/c/Users/Paul/Desktop
Этим.методом.также.можно.воспользоваться.для.выполнения.пакетов,.установлен- ных.в.вашем.дистрибутиве.Linux.из.WSL,.если.у.него.есть.интерфейс.командной.
строки,.например.пакета.Nmap.
Это.дополнение,.кажущееся.несущественным,.предоставляет.вам.возможность.
с.помощью.командной.строки.Windows.и.инструментов.создания.сценариев.ис- пользовать.целый.арсенал.Linux-команд,.пакетов.и.функций.bash.
Основы работы с командной строкой
«Командная строка».—.это.общий.термин,.относящийся.к.средствам,.передающим.
команды.в.интерактивную.систему.компьютера..Командная.строка.появилась.
с.первыми.операционными.системами,.и.ею.пользовались,.пока.не.был.создан.GUI..
В.системах.Linux.это.инструмент.ввода.в.оболочку.bash.(или.другую)..Одна.из.
базовых.операций.bash.—.исполнение.команды,.то.есть.запуск.связанной.с.этой.
командой.программы..Когда.вы.ввели.несколько.слов.в.командную.строку,.bash.
предполагает,.что.первое.слово.—.это.название.программы,.которую.нужно.запу- стить,.а.остальные.слова.—.аргументы.команды..Например,.чтобы.bash.запустила.
команду.под.названием.
mkdir
.и.передала.ей.два.аргумента,.
-p
.и.
/tmp/scratch/
garble
,.нужно.ввести.следующее:
mkdir -p /tmp/scratch/garble
По.умолчанию.опции.программ.обычно.расположены.в.начале.команды,.после.
названия.запускаемого.ею.приложения,.и.начинаются.с.дефиса.(
-
)..В.нашем.
примере.дефис.установлен.перед.опцией.
-p
.(заметьте,.между.дефисом.и.буквой.
пробела.быть.не.должно!)..Эта.конкретная.команда.(
mkdir
).дает.указание.создать.
каталог.с.названием.
/tmp/scratch/garble
,.где.каталог.
garble
.вложен.в.каталог.
/scratch
,.который,.в.свою.очередь,.вложен.в.каталог.
/tmp
..Опция.
-p
.обозначает.
определенное.поведение,.которое.выбирает.пользователь:.в.частности,.отсутствие.
отчетов.об.ошибках.и.при.необходимости.создание.(или.попытку.создания).любых.
промежуточных.каталогов.(так.как.если.в.команде.указан.только.каталог.
/tmp
,.
то.
mkdir
.сначала.создаст.каталог.
/tmp/scratch
,.а.потом.попытается.создать
/tmp/
scratch/garble
).
Глава 1. Работа с командной строкой 23
Команды, аргументы, встроенные функции и ключевые слова
Команды,.которые.вы.можете.запустить,.определяют.либо.файлы,.либо.встроенные.
функции,.либо.ключевые.слова.
Файлы.—.это.исполняемые.приложения,.которые.становятся.результатом.компи- ляции.и.теперь.состоят.из.машинных.команд..Примером.подобного.приложения.
служит.программа.
ls
..В.большинстве.файловых.систем.Linux.этот.файл.находится.
в.каталоге.
/bin/ls
Другой.тип.файла.—.это.скрипт..Это.текстовый.файл,.который.может.прочесть.
человек..Скрипт.пишется.на.одном.из.языков,.поддерживаемых.вашей.системой,.
с.помощью.интерпретатора.(программы).для.этого.языка..Примерами.языков.для.
написания.скриптов.могут.служить.bash,.Python.и.Perl..В.следующих.главах.мы.
создадим.несколько.скриптов.(написанных.на.bash).
Встроенные функции.—.это.часть.оболочки..Они.выглядят.как.исполняемые.
файлы,.но.в.файловой.системе.нет.файла,.который.загружается.для.исполнения.
того,.что.делают.встроенные.функции..Вместо.этого.работа.выполняется.внутри.
оболочки..Примером.встроенной.функции.служит.команда.
pwd
..Применение.таких.
функций.позволит.добиться.результатов.быстрее.и.с.большей.продуктивностью..
Как.пользователь,.вы.можете.определять.наиболее.часто.используемые.функции.
оболочки.как.встроенные.команды.
Существуют.и.другие.слова,.которые.выглядят.как.команды,.но.на.самом.деле.
являются.частью.языка.оболочки,.например.
if
..Это.слово.часто.используется.
в.качестве.первого.слова.в.командной.строке,.но.это.не.команда..Это.ключевое
слово..Оно.связано.с.синтаксисом,.который.может.быть.сложнее,.чем.обычный.
формат.командной.строки:.
команда
-опции
аргументы
..Многие.ключевые.слова.мы.
рассмотрим.в.следующей.главе.
Вы.можете.использовать.команду.
type
,.чтобы.определить,.чем.является.конкретное.
слово.—.ключевым.словом,.встроенной.функцией,.командой.или.ничем.из.пере- численного..Если.добавить.опцию.
-t
,.то.можно.свести.результат.к.одному.слову:
$ type -t if keyword
$ type -t pwd
builtin
$ type -t ls file
24 Часть I • Основы
Можно.использовать.команду.
compgen
,.чтобы.определить,.какие.команды,.встроенные.
функции.и.ключевые.слова.вам.доступны..Чтобы.увидеть.список.команд,.добавьте.
опцию.
-c
,.список.встроенных.функций.—.
-b
,.перечень.ключевых.слов.—.
-k
:
$ compgen -k if then else elif
Если.поначалу.вы.будете.путаться.в.этих.понятиях,.не.волнуйтесь..Не.всегда.нужно.
понимать.разницу,.но.стоит.знать.о.том,.что.использование.встроенных.функций.
и.ключевых.слов.гораздо.эффективнее,.чем.выполнение.команд.(исполняемых.во.
внешних.файлах),.особенно.если.их.зациклить.и.вызывать.много.раз.подряд.
Стандартные ввод/вывод/ошибка
На.жаргоне.специалистов.по.операционным.системам.запущенная.программа.на- зывается.процессом..Каждый.процесс.в.среде.Unix/Linux/POSIX.(и,.следовательно,.
в.Windows).обладает.тремя.различными.файловыми.дескрипторами..Дескрипторам.
присвоены.следующие.названия:.стандартный ввод.(сокращенно.stdin),.стандарт-
ный вывод.(stdout).и.стандартная ошибка (stderr).
Как.можно.догадаться.по.названию,.stdin.—.это.ресурс.ввода.в.программу.по.умол- чанию..Обычно.это.символы,.поступающие.при.вводе.с.клавиатуры..Когда.ваш.
скрипт.читает.из.stdin,.он.читает.символы,.набранные.на.клавиатуре,.или.(как.вы.
вскоре.увидите).его.можно.изменить.таким.образом,.что.он.будет.читать.из.файла..
Stdout.—.это.место,.куда.по.умолчанию.отправляется.результат,.выданный.про- граммой..По.умолчанию.результат.появляется.в.окне,.в.котором.запущены.ваши.
оболочка.или.сценарий.оболочки..Стандартная.ошибка.тоже.может.быть.резуль- татом,.отправленным.программой..Но.в.stderr.пишутся.(или.должны.писаться).
сообщения.об.ошибках..Программист.решает,.отправить.результат.в.stdout.или.
stderr..Поэтому.стоит.писать.сценарии.аккуратно,.чтобы.они.отправляли.отчеты.
об.ошибках.в.stderr,.а.не.в.stdout.
Перенаправление и конвейер
Одной.из.главнейших.инноваций.оболочки.было.то,.что.она.предоставила.нам.ме- ханизм,.с.помощью.которого.можно.было.взять.запущенную.программу.и.поменять.
Глава 1. Работа с командной строкой 25
место.ввода.и/или.вывода,.не изменяя саму программу..Если.у.вас.есть.программа.
под.названием.
handywork
,.читающая.ввод.из.stdin.и.записывающая.результаты.
в.stdout,.вы.легко.можете.это.изменить:
handywork < data.in > results.out
Так,.
handywork
.запустится,.но.ее.ввод.будет.поступать.не.с.клавиатуры,.а.из.файла.
под.названием.
data.in
.(если.такой.файл.существует.и.в.нем.есть.информация.
в.нужном.формате)..А.результат.будет.отправляться.не.на.экран,.а.в.файл.под.
названием results.out
.(если.его.не.существует,.он.будет.создан,.а.если.существу- ет.—.переписан)..Эта.техника.называется.перенаправлением,.потому.что.мы.пере- направляем.ввод.из.другого.места.и.вывод.не.на.экран.
А.что.делать.с.stderr?.Синтаксис.в.данном.случае.схож..При.перенаправлении.
данных,.выводимых.программой,.нужно.различать.stdout.и.stderr,.и.мы.создаем.
это.различие.с.помощью.номеров.файловых.дескрипторов..Stdin.—.это.файловый.
дескриптор.0,.stdout.—.файловый.дескриптор.1,.а.stderr.—.файловый.дескриптор.2..
Таким.образом,.мы.можем.перенаправить.сообщения.об.ошибках:
handywork 2> err.msgs
Здесь.мы.перенаправляем.только.stderr,.и.любое.сообщение.об.ошибке.будет.от- правлено.в.файл,.который.мы.назвали.
err.msgs
Разумеется,.мы.можем.выполнить.все.три.действия.одной.строкой.кода:
handywork < data.in > results.out 2> err.msgs
Иногда.нужно,.чтобы.сообщения.об.ошибках.были.объединены.с.нормальными.
результатами.(как.это.происходит.по.умолчанию,.когда.и.то.и.другое.выводится.
на.экране)..Это.можно.сделать.так:
handywork < data.in > results.out 2>&1
Данное.действие.заставляет.отправлять.stderr.(
2
).в.то.же.место,.что.и.файловый.
дескриптор.1.(
&1
)..Отметьте,.что,.если.не.будет.значка.амперсанда.(
&
),.сообще- ния.об.ошибках.будут.просто.отправляться.в.файл.с.названием.
1
..Такое.соче- тание.stdout.и.stderr.так.распространено,.что.существует.удобная.сокращенная.
нотация:
handywork < data.in &> results.out
Если.вы.хотите.отсеять.стандартный.вывод,.можете.перенаправить.его.в.специ- альный.файл.под.названием.
/dev/null
:
handywork < data.in > /dev/null
26 Часть I • Основы
Чтобы.видеть.результаты.в.командной.строке.и.одновременно.перенаправ- лять.их.в.файл,.используйте.команду.
tee
..Следующий.пример.выводит.резуль- таты.выполнения.команды.
handywork
.на.экран.и.в.то.же.время.сохраняет.их.
в.файл.
results.out
:
handywork < data.in | tee results.out
Используйте.опцию.
-a
.команды.
tee
,.чтобы.добавлять.результаты.в.файл,.а.не.
переписывать.его.заново..Символ.
|
.известен.как.«пайп» (pipe)..Указав.его,.можно.
использовать.результаты.одной.команды.в.качестве.исходных.данных.для.другой..
В.данном.примере.результаты.выполнения.
handywork
.передаются.команде.
tee
.для.
дальнейшей.обработки.
При.перенаправлении.результата.с.использованием.символа.
>
.файл.будет.создан.
или.обрезан.(то.есть.из.файла.будет.удалено.содержимое)..Если.вы.хотите.заранее.
сохранить.имеющееся.содержимое.данного.файла,.вам.следует.его.дополнить,.ис- пользуя.символ.
>>
,.как.показано.ниже:
handywork < data.in >> results.out
Таким.образом,.выполняется.
handywork
,.а.затем.любой.результат.из.stdout.до- бавляется.в.файл.
results.out
,.а.не.перезаписывается.поверх.существующего.
содержимого.
Следующая.строка:
handywork < data.in &>> results.out позволяет.выполнить.
handywork
,.а.затем.добавить.и.stdout,.и.stderr.в.файл.
results.out
,.
не.перезаписывая.поверх.существующего.содержимого.
Выполнение команд в фоновом режиме
На.протяжении.этой.книги.мы.выйдем.за.рамки.однострочных.команд.и.начнем.
создавать.сложные.сценарии..Некоторые.из.них.могут.выполняться.в.течение.
довольно.длительного.времени,.и.вы,.возможно,.не.захотите.долго.ждать..Вместо.
этого.вы.можете.запустить.любую.команду.или.сценарий.в.фоновом.режиме,.ис- пользуя.оператор.
&
..Скрипт.будет.выполняться.дальше,.но.вы.сможете.продолжать.
использовать.оболочку,.давая.другие.команды.и/или.выполняя.другие.сценарии..
Например,.чтобы.запустить.
ping
.в.фоновом.режиме.и.перенаправить.стандартный.
вывод.в.файл,.используйте.эту.команду:
ping 192.168.10.56 > ping.log &
Глава 1. Работа с командной строкой 27
Вы.можете.перенаправить.стандартный.вывод.и/или.стандартные.ошибки.в.файл,.
отправив.задание.в.фоновый.режим,.иначе.задание.продолжит.выводиться.на.экран.
и.будет.прерывать.другие.ваши.действия:
ping 192.168.10.56 &> ping.log &
Осторожно: не перепутайте символ & (для отправки задания в фоновый режим) и &> (для совместного перенаправления стандартного вывода и стандартных ошибок).
Для.получения.списка.задач,.которые.сейчас.выполняются.в.фоновом.режиме,.
можно.использовать.команду.
jobs
:
$ jobs
[1]+ Running ping 192.168.10.56 > ping.log &
Введите.команду.
fg
.и.соответствующий.номер.задания,.чтобы.снова.вывести.задачу.
в.приоритет.из.фонового.режима:
$ fg 1
ping 192.168.10.56 > ping.log
Если.ваша.задача.сейчас.выполняется.в.приоритетном.режиме,.для.приостановки.
процесса.можно.нажать.сочетание.клавиш.
Ctrl
+
Z
..Для.продолжения.работы.в.фо- новом.режиме.введите.команду.
bg
..После.этого.вы.можете.использовать.команды.
jobs
.и.
fg
,.как.описано.ранее.
От командной строки до скрипта
Скрипт оболочки.—.это.просто.файл,.содержащий.команды,.которые.вы.можете.
последовательно.ввести.в.командную.строку..Если.ввести.одну.команду.или.более.
в.файл,.получится.скрипт.оболочки..Если.вы,.например,.назовете.этот.файл.
myscript
,.
его.можно.будет.запустить,.введя.команду.
bash myscript
..Кроме.того,.можете.наде- лить.его.полномочиями на выполнение.(например,.
chmod
755
myscript
),.а.затем,.чтобы.
управлять.сценарием,.вызывать.его.напрямую:.
./myscript
..Следующая.строка,.
сообщающая.операционной.системе,.какой.язык.скриптов.мы.используем,.часто.
становится.первой.строкой.скрипта:
#!/bin/bash -
28 Часть I • Основы
Конечно,.в.этой.строке.предполагается,.что.bash.находится.в.каталоге.
/bin
Если.вам.потребуется.сделать.скрипт.более.мобильным,.можно.воспользоваться.
следующим.подходом:
#!/usr/bin/env bash
Здесь,.чтобы.найти.местонахождение.bash,.используется.команда.
env
..Этот.способ.
считается.стандартным.методом.решения.проблемы.мобильности..Однако.в.данном.
случае.предполагается,.что.команду.
env
.можно.найти.в.каталоге.
/usr/bin
Выводы
Командная.строка.—.это.виртуальный.аналог.универсального.инструмента..Если.вам.
нужно.завинтить.шуруп.в.деревянный.брусок,.лучше.всего.взять.для.этого.специ- альный.инструмент,.например.ручную.или.электрическую.отвертку..Но.если.вы.
заблудились.в.лесу.и.ваши.ресурсы.ограниченны,.нет.ничего.лучше.универсального.
инструмента..С.ним.вы.можете.завинтить.шуруп,.разрезать.веревку.и.даже.открыть.
бутылку..То.же.самое.можно.сказать.и.о.командной.строке:.она.ценна.не.уровнем.
выполнения.одного.конкретного.задания,.а.своей.гибкостью.и.доступностью.
В.последние.годы.оболочка.bash.и.команды.Linux.стали.общедоступными..С.по- мощью.Git.Bash.или.Cygwin.вы.с.легкостью.можете.получить.доступ.к.функционалу.
из.Windows..Для.получения.большего.количества.функций.можно.установить.под- систему.Windows.для.Linux,.которая.даст.вам.возможность.запускать.полные.версии.
операционных.систем.Linux.и.пользоваться.их.функциями.напрямую.из.командной.
строки.и.с.помощью.инструмента.PowerShell.для.создания.скриптов.Windows.
В.следующей.главе.мы.обсудим.пользу.скриптов,.проявляющуюся.благодаря.
возможности.запускать.команды.повторно,.принимать.решения.и.зацикливать.
различные.исходные.данные.
Упражнения
1.. Напишите.команду,.которая.выполняет.
ifconfig
.и.перенаправляет.стандартный.
вывод.в.файл.
ipaddress.txt
2.. Напишите.команду,.которая.выполняет.
ifconfig
,.перенаправляет.стандартный.
вывод.и.дополняет.им.файл.
ipaddress.txt
3.. Напишите.команду,.которая.копирует.все.файлы.из.каталога.
/etc/a
.в.каталог.
/etc/b
.и.перенаправляет.стандартные.ошибки.в.файл.
copyerror.log