Файл: Paul Troncone and Carl AlbingCybersecurity Ops with bashAttack, Defend, and Analyze from the.pdf
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 12.01.2024
Просмотров: 470
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
СОДЕРЖАНИЕ
Глава 2. Основы работы с bash 39
echo $VAL
done
Здесь.переменная.
VAL
,.в.свою.очередь,.будет.принимать.значение.для.каждого.фай- ла,.который.командой.
ls
.передается.в.
grep
.и.содержит.буквы.pdf.в.своем.имени.
(например,.
doc.pdf
.или.
notapdfile.txt
),.а.затем.переменная.
VAL
.примет.значение.
каждого.числа.от.0.до.5..Возможно,.не.очень.разумно,.чтобы.переменная.
VAL
.иногда.
была.именем.файла,.а.иногда.—.одной.цифрой,.но.это.всего.лишь.пример.
Фигурные скобки можно использовать для создания последовательности чисел
(или отдельных символов) {first..last..step}, где ..step может быть положительным или отрицательным и является опциональным. В последних версиях bash указа- ние 0 приведет к тому, что числовые значения будут дополнены нулем до той же длины. Например, последовательность {090..104..2} будет заполнена четными цифрами, находящимися в диапазоне от 090 до 104 включительно, причем каждая цифра будет представлена в виде трех чисел.
Функции
Синтаксис.функции.в.bash.следующий:
function myfun ()
{
# это тело функции
}
Не.все.эти.компоненты.обязательны..Вы.можете.указать.или.
function
,.или.
()
..Мы.же.
будем.использовать.и.ключевое.слово,.и.скобки.в.основном.для.удобства.чтения.
Есть.несколько.важных.факторов,.которые.следует.учитывать.при.работе.с.функ- циями.bash.
Если.указанная.внутри.функции.команда.не.объявлена.как.
local
,.переменные.
в.видимой.области.являются.глобальными..Цикл.
for
,.устанавливающий.и.уве- личивающий.значение.
i
,.можно.использовать.в.любом.месте.вашего.кода.
Скобки.—.это.наиболее.популярные.символы.для.группировки.в.теле.функции,.
но.разрешен.любой.из.составных.синтаксисов.команд.оболочки..Хотя.зачем,.
например,.запускать.функцию.в.подоболочке?
Перенаправление.ввода/вывода.(I/O),.заключенное.в.фигурные.скобки,.рас- пространяется.на.все.операторы.внутри.функции..Примеры.такого.перенаправ- ления.будут.приведены.в.следующих.главах.
40 Часть I • Основы
В.определении.функции.параметры.не.объявляются..Какие.бы.аргументы.
и.их.количество.при.вызове.функции.ни.приводились,.они.передаются.этой.
функции.
Функция.вызывается.(активизируется).так.же,.как.и.любая.команда.в.командной.
оболочке..Определив.
myfun
.как.функцию,.вы.можете.вызвать.ее.следующим.об- разом:
myfun 2 /arb "14 years"
Эта.команда.вызывает.функцию.
myfun
,.предоставляя.ей.три.аргумента.
Аргументы функции
Внутри.определения.функции.аргументы.упоминаются.так.же,.как.параметры.
сценария.оболочки,.то.есть.как.
$1
,.
$2
.и.т..д..Это.означает,.что.аргументы.«скрыва- ют».параметры,.первоначально.переданные.в.сценарий..Если.вы.хотите.получить.
доступ.к.первому.параметру.скрипта,.то.перед.вызовом.функции.нужно.сохранить.
$1
.в.переменной.(или.передать.его.в.качестве.параметра.функции).
Другие.переменные.установлены.соответственно:.
$#
.выдает.количество.аргументов,.
переданных.функции,.хотя.обычно.мы.получаем.количество.аргументов,.переданных.
самому.сценарию..Единственное.исключение.—.
$0
,.которая.в.функции.не.изменяет- ся..Она.сохраняет.свое.значение.как.имя.скрипта,.а.не.функции.
Возвращаемые значения
Функции,.как.и.команды,.должны.возвращать.статус:.
0
,.если.все.идет.хорошо,.
и.значение,.отличное.от.нуля,.если.произошла.ошибка..Чтобы.возвращать.другие.
типы.значений.(например,.пути.или.вычисленные.значения),.можно.установить.
для.хранения.значения.переменную,.потому.что.переменные.являются.глобаль- ными,.если.они.не.объявлены.локально.внутри.функции..Кроме.того,.вы.можете.
отправить.результат.в.stdout,.то.есть.напечатать.ответ..Только.не.пытайтесь.делать.
и.то.и.другое.одновременно.
Если ваша функция выводит ответ, вы можете использовать этот вывод как часть конвейера команд (например, myfunc args | next step | etc). Или можете захватить вывод следующим образом: RETVAL = $ (myfunc args). В обоих случаях функция будет выполняться в подоболочке, а не в текущей оболочке. Таким образом, изме- нения любых глобальных переменных будут эффективны только в этой подоболочке, а не в основном экземпляре оболочки. Фактически они будут потеряны.
Глава 2. Основы работы с bash 41
Шаблон соответствия в bash
Когда.в.командной.строке.нужно.перечислить.много.файлов,.не.обязательно.вво- дить.имя.каждого..Bash.обеспечивает.сопоставление с шаблоном.(иногда.называ- емое.подстановкой знаков.(wildcarding)),.чтобы.вы.могли.указать.набор.файлов.
с.шаблоном.
Самый.простой.подстановочный.знак.—.символ.звездочки.(
*
),.который.будет.со- ответствовать.любому.количеству.любых.символов..Поэтому,.когда.используется.
только.подстановочный.знак,.он.сопоставляет.все.файлы.в.текущем.каталоге..
Звездочку.также.можно.указывать.вместе.с.другими.символами..Например,.
*.txt соответствует.всем.файлам.в.текущем.каталоге,.имена.которых.заканчиваются.че- тырьмя.символами.
.txt
..Шаблон.
/usr/bin/g*
.будет.соответствовать.всем.файлам.
в.
/usr/bin
,.которые.начинаются.с.буквы.g.
Другой.специальный.символ.для.сопоставления.—.вопросительный.знак.(
?
),.ко- торый.соответствует.одному.символу..Например,.
source.?
.будет.соответствовать.
source.c
.или.
source.o
,.но.не.
source.py
.или.
source.cpp
Последний.из.трех.подстановочных.символов.для.сопоставления.—.квадратные.
скобки:.
[
]
..Сопоставление.может.быть.выполнено.с.любым.из.символов,.пере- численных.в.квадратных.скобках..Так,.шаблон.
x[abc]y
.соответствует.любому.или.
всем.файлам.с.именами.
xay
,.
xby
.или.
xcy
.при.условии,.что.они.существуют..Вы.мо- жете.указать.диапазон.в.квадратных.скобках,.например:.
[0–9]
.для.всех.цифр..
Если.первый.символ.в.скобках.—.восклицательный.знак.(
!
).или.«шляпка».(
^
),.то.
шаблон.определяет.все.что.угодно,.кроме.оставшихся.символов.в.скобках..Напри- мер,.
[aeiou]
.будет.соответствовать.гласным.буквам,.тогда.как.
[^aeiou]
.—.любым.
символам.(включая.цифры.и.знаки.пунктуации),.кроме.гласных.
Как.и.для.диапазонов,.в.фигурных.скобках.вы.можете.указывать.классы.символов..
В.табл..2.3.перечислены.классы.символов.и.их.описания.
1 2 3 4 5 6 7 8 9 ... 23
Таблица 3.2. Сокращения регулярных выражений
Символ
Значение
\s
Пробельный.символ
\S
Непробельный.символ
\d
Цифровой.символ
\D
Нецифровой.символ
\w
Слово
\W
Не.слово
\x
Шестнадцатеричное.число.(например,.0x5F)
Обратите.внимание,.что.эти.сокращения.не.поддерживаются.командой.
egrep
Чтобы.их.применить,.вы.должны.воспользоваться.командой.
grep
.с.параме- тром.
–P
,.который.позволяет.механизму.регулярных.выражений.Perl.поддерживать.
52 Часть I • Основы сокращения..Например,.чтобы.найти.любые.числа.в.файле.
frost.txt
,.вы.напишете.
следующее:
$ grep -P '\d' frost.txt
1
Two roads diverged in a yellow wood,
2
And sorry I could not travel both
3
And be one traveler, long I stood
4
And looked down one as far as I could
5
To where it bent in the undergrowth;
6
7
Excerpt from The Road Not Taken by Robert Frost
Другие.символьные.классы.(с.более.подробным.синтаксисом).действительны.
только.внутри.скобок,.как.показано.в.табл..3.3..Они.соответствуют.одному.симво- лу,.поэтому,.если.вам.нужно.сопоставить.несколько.строк.подряд,.чтобы.получить.
необходимое.повторение,.используйте.символы.
*
.или.
+
Таблица 3.3. Символьные классы регулярных выражений в скобках
Символьный класс
Значение
[:alnum:]
Любой.буквенно-цифровой.символ
[:alpha:]
Любой.алфавитный.символ
[:cntrl:]
Любой.управляющий.символ
[:digit:]
Любая.цифра
[:graph:]
Любой.графический.символ
[:lower:]
Любой.символ.нижнего.регистра
[:print:]
Любой.печатаемый.символ
[:punct:]
Любой.знак.препинания
[:space:]
Любой.пробельный.символ
[:upper:]
Любой.символ.верхнего.регистра
[:xdigit:]
Любая.шестнадцатеричная.цифра
Чтобы.можно.было.использовать.один.из.этих.классов,.он.должен.быть.внутри.ско- бок..Таким.образом,.вы.получите.два.набора.скобок..Например,.
grep
'[[:
cntrl:]]'
large.data
.будет.искать.строки,.содержащие.управляющие.символы.(ASCII.0–25)..
Вот.еще.один.пример:
grep 'X[[:upper:][:digit:]]' idlist.txt
Согласно.этой.команде.будет.выполнен.поиск.содержимого.в.файле.
idlist.txt и.в.результате.будет.выведена.любая.строка,.содержащая.символ.X,.за.которым.
Глава 3. Регулярные выражения 53
следует.любая.прописная.буква.или.цифра..У.нас.при.выполнении.данной.команды.
отображаются.следующие.строки:
User: XTjohnson an XWing model 7
an X7wing model
В.каждой.из.этих.строк.есть.прописная.буква.X,.за.которой.сразу.следует.либо.
другая.прописная.буква,.либо.цифра.
Обратные ссылки
Обратные ссылки.на.регулярные.выражения.являются.одной.из.самых.мощных.
и.часто.сбивающей.с.толку.операцией.регулярных.выражений.
Рассмотрим
1
.следующий.файл.
tags.txt
:
1 Command
2 line
3 is
4
great
5 !
Предположим,.вы.хотите.написать.регулярное.выражение,.которое.будет.извлекать.
любую.строку,.содержащую.соответствующую.пару.полных.тегов.HTML..От- крывающий.тег.включает.имя.тега.HTML;.закрывающий.тег.имеет.то.же.имя,.но.
с.символом.слеша..Рассмотрим.теги.
.и.
..Вы.можете.найти.их,.написав.
длинное.регулярное.выражение,.содержащее.все.возможные.значения.тегов.HTML,.
или.же.сосредоточиться.на.формате.тега.HTML.и.использовать.обратную.ссылку.
на.регулярное.выражение,.как.показано.ниже:
$ egrep '<([A-Za-z]*)>.*\1>' tags.txt
2 line
4
great
5 !
В.этом.примере.обратная.ссылка.
\1
.расположена.в.последней.части.регулярного.
выражения..Эта.ссылка.направляет.нас.к.выражению,.заключенному.в.первый.на- бор.скобок,.
[A-Za-z]*
..Данное.выражение.состоит.из.двух.частей..Диапазон.букв.
1.
Для.эксперимента.создайте.этот.файл.и.сохраните.его.в.папке,.в.которой.ранее.был.со- хранен.файл.frost.txt,.то.есть.в.папке.C:/home.(для.Windows).или.в.каталоге./home.(для.
Linux).
54 Часть I • Основы в.скобках.обозначает,.что.может.быть.выбрана.любая.буква,.прописная.или.строч- ная..Знак.
*
,.который.следует.за.буквенным.выражением.в.квадратных.скобках,.
означает.повторение.действия.ноль.и.некоторое.количество.раз..Следовательно,.
\1
.ссылается.на.соответствующий.шаблон,.который.задан.в.скобках..Если.
[A-Za-z]*
соответствует.
div
,.то.
\1
.также.ссылается.на.шаблон.
div
Таким.образом,.общее.регулярное.выражение.можно.описать.так..Сначала.должен.
быть.указан.знак.«меньше».(
<
)..Это.первый.символ.в.регулярном.выражении..
За.ним.следует.некоторое.количество.букв.(от.нуля.и.более)..Далее.находится.
символ.«больше».(
>
)..После.символа.
>
.может.располагаться.некоторое.количество.
символов.(от.нуля.и.более)..Точка.(
).означает.любой.символ,.кроме.конца.строки,.
а.звездочка.(
*
).—.ноль.или.большее.количество.совпадений.с.предыдущим.элемен- том,.сопровождаемым.еще.одним.символом.
<
.и.слешем.(
/
)..Далее.располагается.
последовательность,.соответствующая.выражению.в.круглых.скобках,.которая.
завершается.символом.
>
..Если.данная.последовательность.соответствует.любой.
части.строки.нашего.текстового.файла,.
egrep
.выведет.эту.строку.
Вы.можете.использовать.несколько.обратных.ссылок.в.выражении.и.обращаться.
к.каждой.как.
\1
,.или.
\2
,.или.
\3
,.в.зависимости.от.ее.порядка.в.регулярном.вы- ражении..Символ.
\1
.относится.к.первому.набору.скобок,.
\2
.—.ко.второму.и.т..д..
Обратите.внимание,.что.круглые.скобки.являются.метасимволами;.у.них.есть.
особое.значение..Если.вы.просто.хотите.найти.соответствие.круглой.скобке,.вам.
нужно.исключить.ее.специальное.значение,.поставив.перед.ней.обратный.слеш..
Например,.напишите.
sin\([0-9.]*\)
,.чтобы.найти.такие.выражения,.как.
sin(6.2)
или.
sin(3.14159)
Валидный HTML-код не обязательно должен быть расположен в одной строке; закрывающий тег может находиться в нескольких строках от открывающего. Кро- ме того, встречаются одиночные теги, например для разрыва строки или для пустого абзаца. Для того чтобы включить такие условия в наш поиск, придется использовать более сложный подход.
Квантификаторы
Квантификаторы.указывают,.сколько.раз.элемент.должен.появиться.в.строке,.
и.определяются.фигурными.скобками.
{}
..Например,.шаблон.
T{5}
.означает,.что.
буква.T.должна.последовательно.появляться.ровно.пять.раз..Шаблон.
T{3,6}
означает,.что.буква.T.должна.появляться.последовательно.от.трех.до.шести.раз..
Шаблон.
T{5,}
.означает,.что.буква.T.должна.появляться.пять.раз.или.более.
Глава 3. Регулярные выражения 55
Якоря и границы слов
Если.нужно.указать,.что.шаблон.должен.находиться.в.начале.или.в.конце.строки,.
можно.использовать.якоря..Символ.каретки.(
^
).предназначен.для.привязки.ша- блона.к.началу.строки..Например,.
^[1-5]
.означает,.что.соответствующая.строка.
должна.начинаться.с.одной.из.цифр.от.1.до.5..Символ.
$
.используется.для.привязки.
шаблона.к.концу.последовательности.или.строки..Например,.
[1-5]$
.означает,.что.
строка.должна.заканчиваться.одной.из.цифр.от.1.до.5.
Кроме.того,.вы.можете.использовать.
\b
.для.определения.границы.слова.(то.есть.обо- значить.пробел)..Шаблон.
\b[1-5]\b
.будет.соответствовать.любой.из.цифр.от.1.до.5,.
где.цифра.представлена.словом.
Выводы
Регулярные.выражения.чрезвычайно.эффективны.для.описания.шаблонов.и.могут.
использоваться.в.сочетании.с.другими.инструментами.для.поиска.и.обработки.
данных.
Использование.регулярных.выражений.и.их.полный.синтаксис.выходят.далеко.
за.рамки.этой.книги..Для.получения.дополнительной.информации.о.регулярных.
выражениях.можете.посетить.следующие.ресурсы:
http://www.rexegg.com/
;
https://regex101.com
;
https://www.regextester.com/
;
http://www.regular-expressions.info/
В.следующей.главе.мы.рассмотрим.некоторые.принципы.кибербезопасности.высо- кого.уровня,.чтобы.вы.получили.общее.понимание.операций,.связанных.с.атаками.
на.другие.компьютерные.системы.и.защитой.собственных.данных.
Упражнения
1.. Напишите.регулярное.выражение,.соответствующее.десятичному.числу,.на- пример.
3.14
..С.обеих.сторон.от.десятичной.точки.могут.быть.цифры,.но.не.обя- зательно,.чтобы.они.были.слева.или.справа..В.регулярном.выражении.должна.
совпадать.только.десятичная.точка.
56 Часть I • Основы
2.. Используйте.обратную.ссылку.в.регулярном.выражении,.чтобы.числа,.находя- щиеся.по.обе.стороны.от.знака.равенства,.соответствовали.друг.другу..Например,.
«314.is.=.to.314».—.это.правильно,.а.«6.=.7».—.это.неправильно.
3.. Напишите.регулярное.выражение,.с.помощью.которого.будет.выполняться.
поиск.строки,.начинающейся.с.цифры.и.заканчивающейся.цифрой,.при.этом.
между.этими.цифрами.может.быть.все.что.угодно.
4.. Напишите.регулярное.выражение,.которое.использует.группирование.для.со- поставления.по.следующим.двум.IP-адресам:.10.0.0.25.и.10.0.0.134.
5.. Напишите.регулярное.выражение,.которое.будет.соответствовать.условию,.при.
котором.шестнадцатеричная.строка.0x90.встречается.более.трех.раз.подряд.
(то.есть.0x90.0x90.0x90).
Чтобы.просмотреть.дополнительные.ресурсы.и.получить.ответы.на.эти.вопросы,.
зайдите.на.сайт.
https://www.rapidcyberops.com/