
Цель этого руководства очень проста — научить любого, кто интересуется кибербезопасностью, независимо от уровня его знаний, максимально эффективно использовать Netlas.io.
Цель этого руководства — научить любого, кто интересуется кибербезопасностью, независимо от уровня его знаний, максимально эффективно использовать Netlas Search Tools. Это длинное чтение. Мы собрали как можно больше простых примеров использования и показали, как их автоматизировать.
⭐️ Поставьте нам звезду, чтобы выразить свою признательность
👁️ Подпишитесь на обновления
Netlas — это поисковая система, предназначенная для поиска и анализа информации обо всех IP-адресах и доменах, доступных в Интернете. Netlas имеет некоторые функции управления поверхностью атаки, но это руководство в основном посвящено Netlas Search Tools и тому, как использовать их в автоматизациях.
Netlas включает несколько инструментов поиска:
В основном мы будем использовать поиск ответов (результаты сканирования интернета), но все инструменты работают одинаково. Если вы поймете, как использовать инструмент поиска ответов, вы сможете работать с любым другим.
Прежде чем углубиться в технические детали, давайте посмотрим, как работает Netlas.io, на нескольких простых примерах.

Откройте Netlas.io IP/Domain info и введите доменное имя или IP. В результате будет отображена следующая информация:

Если вам нужно найти китайские или другие интернационализированные доменные имена, преобразуйте их в Punycode. Например:``` domain:*.xn--fiqs8s
Это можно сделать с помощью специальных онлайн-инструментов. Например — [Charset.org](https://www.charset.org/punycode)
### Поиск веб-сайтов, содержащих определенное слово в заголовке

Откройте [поиск ответов Netlas.io](https://app.netlas.io/responses/) и введите:```
http.title:g*thub
Это найдет все серверы, в HTTP-заголовках которых содержится слово, начинающееся на "g" и заканчивающееся на "thub". Подробнее об использовании звездочек читайте ниже.
Теперь давайте подробнее узнаем, как работают поисковые запросы в Netlas.io.
Netlas.io основан на Elasticsearch — бесплатной, открытой, распределенной RESTful поисковой системе. Методы поиска в Netlas.io очень похожи на методы других баз данных на основе Elasticsearch.

Поиск по Response, DNS, IP и Certificates позволяет использовать фильтры (поля) в поисковых запросах. Например:``` http.body:netlas
[Попробовать в Netlas](https://app.netlas.io/responses/?q=http.body%3Anetlas&page=1&indices=)
Вы можете использовать этот запрос, чтобы найти страницы, содержащие слово "netlas" внутри тега <body>.
Список доступных фильтров для каждого типа поиска отображается в правой части страницы.

Фильтры позволяют искать серверы по множеству различных параметров. Например:
* `domain`
* `ip`
* `protocol`
* `certificate`
* `cve`
* `geolocation` (`city`, `continent`, `country`)
и многие другие.
### Логические операторы
Вы можете использовать несколько фильтров в одном запросе и комбинировать их с помощью логических операторов `AND`, `OR`, `NOT`. Например:```
http.title:netlas NOT port:443
Если вы хотите объединить несколько условий в вашем запросе, используйте круглые скобки:``` http.title:(netlas OR shodan) NOT port:443
[Попробовать в Netlas](https://nt.ls/OrFOY)
### Диапазоны
Если вы используете числовое значение в качестве значения поля, вы можете указать его как значение от и до (крайние пределы диапазона значений):```
ip:[173.194.222.0 TO 173.194.222.255]
Или укажите только верхнюю или только нижнюю границу значения:``` host:"1.1.1.1" port:<=1000
[Try in Netlas](https://app.netlas.io/responses/?q=host%3A%221.1.1.1%22%20port%3A%3C%3D1000&page=1&indices=)
### Подстановочные знаки
Если вы не знаете точного описания определённого символа в вашем запросе (например, вы не знаете точной зоны для домена или написания имени), вы можете заменить его звёздочкой:```
domain:google.*
Вы также можете использовать вопросительный знак:``` domain:google.?
[Попробовать в Netlas](https://app.netlas.io/responses/?q=domain%3Agoogle.%3F&page=1&indices=)
`*` — много символов, `?` — один символ.
Также можно использовать звёздочки в фильтрах. Например:
```bash
$ cat hosts.txt | filter-resolved
*.banner:database
Этот запрос выполняет поиск по всем типам баннеров одновременно и заменяет несколько фильтров: `amqp.banner:`, `ftp.banner:`, `dns.banner:`, `telnet.banner:`, и т.д.
### Нечёткость

Если вам нужно выполнить поиск не по точному, а по приблизительному значению поля (например, страницы, заголовки которых содержат все имена, созвучные Joseph), просто добавьте `~` в запрос:```
http.title:Joseph~
Регулярное выражение — это последовательность символов, позволяющая искать, извлекать и заменять фрагменты текста в исходном документе, соответствующие определённым шаблонам. Например:
Для получения дополнительной информации об использовании регулярных выражений см. примеры в Netlas Cookbook (то, что вы сейчас читаете) и ссылки ниже:
Руководство по синтаксису регулярных выражений в документации Elasticsearch

Вы можете сохранить свои результаты (все или выбранные поля) в формате JSON и CSV, чтобы просматривать их в удобном для вас виде или автоматически анализировать с помощью различных инструментов.

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

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

Также помните, что все сделанные вами запросы можно просмотреть на странице вашего профиля (ссылка в правом верхнем углу).
Самая важная функция Netlas.io — помогать людям проводить исследования в области кибербезопасности быстрее и эффективнее. Сервис имеет API (интерфейс прикладного программирования), который позволяет автоматизировать выполнение различных запросов.
Его можно реализовать как в простых скриптах на Python или Bash длиной в несколько строк, так и в сложных многофункциональных приложениях.
Вы можете узнать больше об использовании API Netlas в Netlas Cookbook (то, что вы сейчас читаете) или в официальной документации:
Это самое первое, с чего стоит начать работу с API. Вам даже не нужно платить за подписку (50 запросов в день предоставляются бесплатно). Просто перейдите на страницу профиля.

Вам не нужно писать скрипты или создавать приложения, чтобы начать использовать API Netlas. Вы можете просто протестировать его с помощью вашего любимого API-клиента. См. инструкции здесь.

Как и в других API, ответ API Netlas состоит из заголовков и тела ответа в формате JSON (JavaScript Object Notation). JSON-файлы содержат данные в формате «ключ-значение» и могут быть проанализированы практически на любом языке программирования.
Если вы используете Swagger, вы можете скопировать или скачать тело ответа и просмотреть его в любом текстовом редакторе или анализаторе JSON.

Небольшой совет, который пригодится при написании кода с использованием API Netlas. Чтобы быстрее понять структуру JSON-файла и найти путь для получения определённого значения, используйте специальные инструменты, такие как:
Самый простой способ автоматизировать запросы к API Netlas — использовать специально разработанную библиотеку (пакет) Python.
Репозиторий библиотеки Netlas-Python на GitHub
Давайте посмотрим, как это работает, на простом примере. Все примеры кода из Netlas Cookbook находятся в папке scripts. Вы можете клонировать этот репозиторий и запускать их на своём устройстве:```shell git clone https://github.com/netlas-io/netlas-cookbook
Если вы до сегодняшнего дня не запускали скрипты Python и не знаете, как это сделать, вы можете начать с открытия репозитория Netlas CookBook в Gitpod.
Gitpod — это облачная среда разработки на основе Ubuntu (дистрибутив Linux). Просто откройте эту ссылку в вашем браузере (войдите в свою учетную запись Github):
[Run Netlas Cookbook in Gitpod](https://gitpod.io#https://github.com/netlas-io/netlas-cookbook)

Установите библиотеку Netlas Python с помощью pip (менеджер пакетов для Python). Введите в командной строке:```shell
pip install netlas
Проверьте установку. Введите в командной строке:```shell netlas --help
Запустите netlas_python_example.py:```shell
python3 scripts/netlas_python_example.py
И, конечно, вы можете просто скопировать код и сохранить в файлы. Вот код первого примера:```python import netlas
apikey = "YOUR API KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
port:7001netlas_query = netlas_connection.query(query="port:7001")
for response in netlas_query['items']: print(f"{response['data']['ip']}:{response['data']['port']}{response['data']['path']} [{response['data']['protocol']}]")
### Примеры ключей ответа для получения полезных данных
Выше упоминалось, что для поиска JSON-патчей ответа API и получения нужных данных можно использовать специальные онлайн-приложения (JSON-оценщики). Чтобы сделать вашу жизнь еще проще, вот небольшой список примеров ключей ответа библиотеки Python, которые требуются чаще всего.```python
# Main domain/ip info
response['data']['uri']
response['data']['ip']
response['data']['http']['title']
response['data']['http']['meta']
response['data']['http']['body']
# Geo info
response['data']['geo']['continent']
response['data']['geo']['country']
response['data']['geo']['city']
response['data']['geo']['location']['lat']
response['data']['geo']['location']['long']
# Whois geo info
response['data']['whois']['net']['country']
response['data']['whois']['net']['address']
response['data']['whois']['net']['city']
response['data']['whois']['net']['contacts']['emails']
response['data']['whois']['net']['contacts']['phones']
# Http status and favicon ico info
response['data']['port']
response['data']['http']['status_code']
response['data']['http']['status_line']
response['data']['http']['favicon']['image']
response['data']['http']['favicon']['path']
# Basic CVE info
response['data']['cve'][0]['name']
response['data']['cve'][0]['description']
response['data']['cve'][0]['base_score']
response['data']['cve'][0]['has_exploit']
response['data']['cve'][0]['exploit_links']

При работе с библиотекой Netlas Python очень важно правильно указать тип данных, которые вы хотите получить. По умолчанию возвращается тип response, и многие примеры Netlas CookBook используют его.
Но для некоторых задач, таких как получение информации whoois о домене или поиск доменов в подсети, необходимо использовать другой тип данных. Например:```python netlas_query = netlas_connection.query(query='a:"163.114.132.0/24"',datatype="domain")
Если вы считаете, что какой-то запрос не возвращает результаты, хотя должен, — просто попробуйте изменить значение параметра **datatype**. Скорее всего, это поможет.
Доступные типы данных:
- **datatype="response"** соответствует результатам, которые можно получить в [Netlas Responses Search](https://app.netlas.io/responses/).
- **datatype="domain"** соответствует результатам, которые можно получить в [Netlas DNS search](https://app.netlas.io/domains/)
- **datatype="domain-whois"** соответствует результатам, которые можно получить в [Netlas Domain Whois Search](https://app.netlas.io/whois_domains/).
- **datatype="ip-whois"** соответствует результатам, которые можно получить в [Netlas IP Whois Search](https://app.netlas.io/whois_ip/).
- **datatype="cert"** соответствует результатам, которые можно получить в [Netlas Certificates Search](https://app.netlas.io/certs/).
### Netlas CLI Tools

Вы также можете использовать библиотеку Netlas Python непосредственно из командной строки. Например:```bash
netlas search "http.title:johnsmith" -f json >results.json
This simple command searches for all servers that have the word johnsmith in their header, returns the results in JSON format, and stores the results in the resutls.json file.
All other features of the Netlas API can be used in the same way. You can learn more about this from the help (-h command) and examples in the Netlas Cookbook (what you are reading now).``` Usage: netlas [OPTIONS] COMMAND [ARGS]...
Options: -h, --help Show this message and exit.
Commands: count Calculate count of query results. download Download data. host Host (ip or domain) information. indices Get available data indices. profile Get user profile data. savekey Save API key to the local system. search (query) Search query. stat Get statistics for query.
Перед запуском различных команд Netlas CLI Tools сохраните ключ API в настройках:```bash
netlas savekey YOUR_API_KEY
Мы также имеем Github-репозиторий с несколькими примерами автоматизации различных задач с помощью bash-скриптов и утилит командной строки Netlas:
Netlas API имеет множество методов, но наиболее часто используемыми являются методы search и download. Они очень похожи друг на друга, но всё же имеют некоторые различия.
Метод search загружает одну страницу результатов (20 элементов) за раз и позволяет загрузить максимум 200 страниц (20*200=4000 элементов). Метод download загружает все результаты (но требует больше ресурсов для выполнения).
Также существует метод host, который просто возвращает самую базовую информацию о конкретном домене или IP (тип данных (как и в других методах) указывать не нужно):```bash netlas host "51.159.153.170"
### Дополнительные параметры запроса
API Netlas позволяет гибко настраивать данные, возвращаемые запросами, с помощью дополнительных параметров. Например:
* indices — идентификатор, соответствующий конкретной дате индексации. Чтобы узнать идентификатор для определённой даты, откройте app.netlas.io, нажмите на календарь справа от строки ввода поискового запроса, выберите интересующую вас дату и посмотрите, как меняется параметр indices в URL в адресной строке браузера.
* start — номер страницы результатов (по умолчанию 0)
* fields — имена полей, которые будут включены в результаты (по умолчанию все поля). Будет полезно для ускорения и оптимизации кода при большом количестве запросов.
### Выполнение запросов с помощью Python (без библиотеки Netlas Python)
В некоторых случаях вам может быть проще не использовать библиотеку Netlas Python, а применить стандартный пакет Python request, знакомый многим разработчикам:
Введите в командной строке:```bash
python scripts/python_example.py
Исходный код python_example.py:```python import requests
response = requests.get("https://app.netlas.io/api/domains/?q=ivanov.com&source_type=include&start=0&fields=*",{'X-API-Key': 'YOUR API KEY'})
print(response.json())
Но библиотека Netlas Python по-прежнему предпочтительна, так как она предназначена для решения различных проблем с обработкой запросов (ошибки, длительные ожидания и т.д.).
### Примеры для других языков программирования
Хотя мы рекомендуем использовать нашу библиотеку Python для автоматизации поиска в Netlas, стоит отметить, что API Netlas можно встроить в большинство приложений с самыми разными технологическими стеками. Главное, чтобы они могли выполнять **REST-запросы** и **парсить JSON**.
Вот несколько примеров на разных популярных языках программирования.
#### NodeJS <!-- omit in toc -->

Введите в командной строке:```bash
node scripts/node_example.js
Если вы не используете Gitpod, у вас на устройстве должен быть установлен NodeJS.
Исходный код nodejs_example.js:```javascript fetch('https://app.netlas.io/api/domains/?q=ivanov.com&source_type=include&start=0&fields=*', { headers: { "X-API-Key": "YOUR_API_KEY", }, }) .then((response) => response.text()) .then((body) => { var jsonArray = JSON.parse(body); console.log(jsonArray['items'][0]); });
#### Ruby <!-- omit in toc -->

Введите в командной строке:```bash
ruby scripts/ruby_example.rb
Если вы не используете Gitpod, на вашем устройстве должен быть установлен Ruby.
Исходный код ruby_example.rb:```ruby require 'net/http' require 'uri' require 'json'
uri = URI("https://app.netlas.io/api/domains/?q=ivanov.com&source_type=include&start=0&fields=*") req = Net::HTTP::Get.new(uri) req['X-API-Key'] = "YOUR_API_KEY"
res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: uri.scheme == 'https') { |http| http.request(req) }
jsonArray = JSON.parse(res.body)
puts jsonArray['items'][0]['data']['domain']
#### Bash <!-- omit in toc -->

Введите в командной строке:```bash
bash scripts/bash_example.sh
Исходный код bash_example.sh:```
curl -X 'GET'
'https://app.netlas.io/api/domains/?q=ivanov.com&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: YOUR_API_KEY' | jq .items[0].data.last_updated
### Утилита JQ
Обратите внимание, что в приведённом выше примере для извлечения полей из JSON-данных использовалась утилита JQ.
Иногда её называют «как sed для JSON-данных». Это на удивление удобный инструмент для работы с любыми JSON-данными. Вот несколько примеров синтаксиса.
Вывести первый элемент JSON-массива:```
.items[0]
Вывести все элементы JSON-массива:``` .items[]
Вывести все подэлементы 'data' первого элемента JSON-array:```
.['items'][0]['data'][]
Вывести все под-подэлементы для каждого элемента JSON-массива:``` .items[].data.technical[]
Вы можете узнать больше о JQ здесь (я рекомендую обратить особое внимание на фильтрацию данных): [Документация по утилите JQ](https://jqlang.github.io/jq/)
### Инструменты ИИ для написания кода

Если у вас возникнут проблемы при настройке примеров Netlas Cookbook, мы рекомендуем обратиться за помощью к инструментам ИИ для улучшения и написания кода. Например:
[ChatGPT](https://chatgpt.com)
[Code Llama](https://huggingface.co/spaces/codellama/codellama-playground)
[You.com](https://you.com/)
При работе с такими сервисами вам просто нужно словами описать задачу, которую вы хотите решить с помощью кода.
### Проверка кода

Когда вы переделываете примеры Netlas Cookbook для своих целей, вы можете обнаружить, что код не выполняется из-за некоторых ошибок. Специальные онлайн-инструменты помогут вам найти и исправить их:
[ExtendsClass Python Tester](https://extendsclass.com/python-tester.html)
[Snyk](https://snyk.io/code-checker/python/)
Если вы не хотите копировать свой код в сторонние сервисы, вы можете проверить его на ошибки на своем устройстве с помощью Pylint (статический анализатор кода):
[Pylint Python Package](https://pypi.org/project/pylint/)
## Использование Netlas.io для OSINT (разведка по открытым источникам)

Netlas.io может помочь вам собрать данные о домене или компании, а также найти упоминания человека (или кого-либо) в интернете.
Его также можно использовать для поиска старых версий веб-страниц (как аналог Wayback Machine).
### Поиск ника или email человека в контактах WHOIS
Чаще всего данные WHOIS содержат только контактную информацию компании, регистрирующей домены. Но иногда там могут быть личные контакты интересующих лиц. Этот запрос поможет вам их найти.
*Этот метод может потребовать платной подписки.* [Смотрите цены](https://netlas.io/pricing/)
**Пример поискового запроса**
```
whois.related_nets.contacts.emails:sweetwater
Пример API-запроса
Инструменты Netlas CLI:```bash netlas search "whois.related_nets.contacts.emails:sweetwater*" -f json
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=whois.related_nets.contacts.emails%3Asweetwater*&fields=' \
-H 'accept: application/json' \
-H 'X-API-Key: aqkd8L4MR93Tkcaz2UXDXrRleV8Vlvbv' | jq .items[].data.uri
Пример кода (библиотека Netlas Python)

Запуск в командной строке:```bash python scripts/osint/whois_email_search.py
Исходный код scripts/osint/whois_email_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `whois.related_nets.contacts.emails:sweetwater`
netlas_query = netlas_connection.query(query="whois.related_nets.contacts.emails:sweetwater*")
# iterate over data and print: URL, Country, Related nets data
for response in netlas_query['items']:
print (response['data']['uri'])
print (response['data']['geo']['country'])
print (response['data']['whois']['related_nets'])
Netlas позволяет искать упоминания определенных слов в заголовках и HTML-коде веб-страниц. Можно искать слова по точному совпадению, по приблизительному совпадению (см. раздел о нечетких запросах) и заменять символы, в которых вы не уверены, звездочками.
Пример поискового запроса
```
http.title:sweetwater OR http.body:sweetwater
[Попробовать в Netlas](https://app.netlas.io/responses/?q=http.title%3Asweetwater%20OR%20http.body%3Asweetwater&page=1&indices=)
**Пример запроса API**
Netlas CLI Tools:```bash
netlas search "http.title:sweetwater OR http.body:sweetwater" -f json
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=whois.related_nets.contacts.emails%3Asweetwater*&fields='
-H 'accept: application/json'
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.uri
**Пример кода (библиотека Netlas Python)**

Запустить в командной строке:```bash
python scripts/osint/title_body_search.py
Исходный код скрипта scripts/osint/title_body_search.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
http.title:sweetwater OR http.body:sweetwaternetlas_query = netlas_connection.query(query="http.title:sweetwater OR http.body:sweetwater*")
for response in netlas_query['items']: print (response['data']['ip']) print (response['data']['uri']) print (response['data']['http']['title'])
### Search for "Juicy Info Files" on Subdomains of the Company's Website

Metagoofil уже много лет является популярным инструментом среди специалистов по OSINT. Он ищет в Google файлы документов на веб-сайте компании (pdf, xlsx, docx и т. д.) и анализирует их метаданные.
А то, что не проиндексировано Google, можно найти с помощью Netlas, затем загрузить на свой компьютер и проанализировать с помощью инструмента [MetaDetective](https://github.com/franckferman/MetaDetective).```
uri:*lidl.* AND http.body:pdf
Вы можете заменить фильтр uri: на domain: и host: (я рекомендую всегда сравнивать результаты при использовании этих трех фильтров).
Вы также можете искать самые разные расширения файлов, в зависимости от того, что хотите найти. Например:``` http.body:xls http.body:xlsx http.body:doc http.body:docx http.body:ppt http.body:pptx http.body:mdb http.body:csv http.body:sql http.body:sqlite
**Пример API-запроса**
Netlas CLI Tools:```bash
netlas search "uri:*lidl.* AND http.body:pdf"
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=uri%3A*lidl.*%20AND%20http.body%3Apdf&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: 'YOUR_API_KEY' | jq .items[].data.domain
**Пример кода (библиотека Netlas Python)**

Запустите в командной строке:```bash
python scripts/osint/juicyinfo_search.py
Исходный код scripts/osint/juicyinfo_search.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
uri:*lidl.* AND http.body:pdfnetlas_query = netlas_connection.query(query='uri:lidl. AND http.body:pdf')
for response in netlas_query['items']: print (response['data']['uri']) print (response['data']['http']['body'])
Чтобы автоматизировать создание ссылок на PDF-документы из тела веб-страницы, можно использовать пакет Python [Re](https://docs.python.org/3/library/re.html).
### Поиск упоминаний номеров телефонов
Как и в случае с никами и электронными письмами, вы также можете искать упоминания номера телефона в коде веб-страниц или контактной информации WHOIS.
Мы выделяем эту задачу в отдельный пример, поскольку поиск номера телефона усложняется тем, что он может быть записан в разных форматах.
**Пример поискового запроса**
```
http.body:1?234?567?89?99 OR http.body:12345678999 OR http.body:1234?5678?999
При выполнении запроса следует учитывать формат записи телефонного номера, принятый в стране, которой принадлежит интересующий вас номер.
Пример запроса к API
Netlas CLI Tools:```bash netlas search "http.body:1?234?567?89?99 OR http.body:12345678999 OR http.body:1234?5678?999" -f json
Не забудьте, что вы можете искать номера телефонов не только в теле страницы, но и в контактной информации WHOIS. Это можно сделать с помощью фильтра **whois.related_nets.contacts.phones:**
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=http.body%3A1%3F234%3F567%3F89%3F99%20OR%20http.body%3A12345678999%20OR%20http.body%3A1234%3F5678%3F999&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: YOUR_API_KEY' jq .items[].data.uri
Пример кода (Netlas Python Library)

Запустите в командной строке:```bash python scripts/osint/phonenumber_search.py
Исходный код скрипта scripts/osint/phonenumber_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `http.body:1?234?567?89?99 OR http.body:12345678999 OR http.body:1234?5678?999`
netlas_query = netlas_connection.query(query="http.body:1?234?567?89?99 OR http.body:12345678999 OR http.body:1234?5678?999")
# iterate over data and print: ip, url
for response in netlas_query['items']:
print (response['data']['ip'])
print (response['data']['uri'])
Представьте, что вы музыкант и хотите найти все сайты, где опубликованы ваши треки. Это можно сделать, выполнив поиск страниц, на которых упоминается ваше имя и есть ссылки на файлы с расширением .mp3.
Пример поискового запроса
```
(http.title:alla OR http.body:alla) AND http.body:*.mp3
[Попробовать в Netlas](https://nt.ls/HEhJj)
**Пример API-запроса**
Netlas CLI Tools:```bash
netlas search "(http.title:alla OR http.body:alla) AND http.body:*.mp3" -f json
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=(http.title%3Aalla%20OR%20http.body%3Aalla)%20AND%20http.body%3A*.mp3&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.http.title
**Пример кода (библиотека Netlas на Python)**

Запустите в командной строке:```bash
python scripts/osint/file_mentions_search.py
Исходный код scripts/osint/file_mentions_search.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
(http.title:alla OR http.body:alla) AND http.body:*.mp3netlas_query = netlas_connection.query(query="(http.title:alla OR http.body:alla) AND http.body:*.mp3")
for response in netlas_query['items']: print (response['data']['ip']) print (response['data']['uri']) print (response['data']['http']['title'])
### Сбор информации WHOIS о доменах
WHOIS — это общедоступная глобальная база данных, в которой хранится информация о всех зарегистрированных доменах в мире.
**Пример поискового запроса**

Используйте [поиск WHOIS по доменам](https://app.netlas.io/whois_domains/)```
github.com
Пример API-запроса
Netlas CLI Tools:```bash netlas host github.com -f json
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/whois_domains/?q=github.com&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.technical.street
Пример кода (Netlas Python Library)

Запуск в командной строке:```bash python scripts/osint/whois_search.py
Исходный код скрипта scripts/osint/whois_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from whois for google.com domain
netlas_query = netlas_connection.query(query="google.com",datatype="whois-domain")
# iterate over data and print: owner name
for response in netlas_query['items']:
print (response['data']['technical']['name'])
Тег <address> находится внутри тега <head> веб-страницы и может содержать физические адреса. Используя поиск по этому тегу, вы можете найти сайты, связанные с конкретной улицей, а иногда и с конкретным зданием.
Пример поискового запроса
```
http.contacts.address:kirby
[Try in Netlas](https://app.netlas.io/responses/?q=http.contacts.address%3Akirby&page=1&indices=)
Вы также можете использовать http.contacts.email: для поиска по email.
**Пример запроса API**
Netlas CLI Tools:```bash
netlas search "http.contacts.address:kirby" -f json
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=http.contacts.address%3Akirby&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: 'YOUR_API_KEY' | jq .items[].data.http.contacts
**Пример кода (библиотека Netlas Python)**

Запуск в командной строке:```bash
python scripts/osint/contacts_search.py
Исходный код scripts/osint/contacts_search.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
http.contacts.address:kirbynetlas_query = netlas_connection.query(query="http.contacts.address:kirby")
for response in netlas_query['items']: print (response['data']['uri']) print (response['data']['http']['contacts'])
### Поиск имени автора в мета-тегах
`<meta>` теги находятся внутри тега `<head>` веб-страницы и содержат наиболее важные ключевые слова, описание, различную служебную информацию и имя автора.
Поиск никнейма и имени/фамилии по мета-тегам (http.meta) позволяет быстрее находить сайты, связанные с конкретным человеком, чем поиск по всему html-коду (http.body).
**Пример поискового запроса**
```
http.meta:nazar
Пример API-запроса
Netlas CLI Инструменты:```bash netlas search "http.meta:nazar" -f json
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=http.meta%3Anazar&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.http.meta
Пример кода (библиотека Netlas Python)

Запустите в командной строке:```bash python scripts/osint/author_meta_search.py
Исходный код файла scripts/osint/author_meta_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `http.meta:nazar`
netlas_query = netlas_connection.query(query="http.meta:nazar")
# iterate over data and print: ip, url
for response in netlas_query['items']:
print (response['data']['uri'])
print (response['data']['http']['title'])
print (response['data']['http']['meta'])
Помимо имени автора, мета-теги могут содержать разнообразную информацию: кодировку, язык, разрешение на индексацию страницы поисковыми роботами, текст для карточек ссылок в социальных сетях, метаданные OpenGraph и многое другое. Вот ещё несколько примеров мета-тегов, которые могут быть полезны для расследований:
<meta name="description"> - описание содержимого веб-страницы.<meta name="keywords"> - ключевые слова, описывающие содержимое веб-страницы.<meta name="generator"> - название инструмента, использованного для генерации содержимого страницы (полезно для поиска CMS и хостинг-платформ)<meta name="copyright"> - имя лица или название компании, владеющей авторскими правами на содержимое веб-страницы.Ещё один важный шаг в поиске информации о человеке или компании — искать упоминания в тексте баннеров FTP-серверов. Возможно, IP-адрес найденных серверов станет ключом к обнаружению других сайтов, связанных с интересующим вас лицом или компанией. А в случае большой удачи — найти что-то интересное в размещённых там файлах (если FTP-сервер открыт).
Пример поискового запроса
```
ftp.banner:"Collado"
Если вам нужно искать FTP-серверы по какому-либо другому параметру (например, по городу или диапазону IP-адресов), используйте фильтр prot7:ftp.
[Try in Netlas](https://app.netlas.io/responses/?q=ftp.banner%3A%22Collado%22%20&page=1&indices=)
**Пример API-запроса**
Netlas CLI Tools:```bash
netlas search 'ftp.banner:"Collado"' -f json
Обратите внимание, что при использовании двойных кавычек в запросах сам запрос записывается внутри одинарных кавычек.
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=ftp.banner%3A%22Collado%22&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.uri
**Пример кода (библиотека Netlas Python)**

Запуск в командной строке:```bash
python scripts/osint/ftp_banner_search.py
Исходный код скрипта scripts/osint/ftp_banner_search.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
ftp.banner:"Collado"netlas_query = netlas_connection.query(query='ftp.banner:"Collado"')
for response in netlas_query['items']: print (response['data']['ip']) print (response['data']['uri']) print (response['data']['ftp']['banner'])
### Поиск контактной информации в SSL-сертификатах

SSL-сертификат — это цифровой сертификат, который подтверждает подлинность веб-сайта и позволяет использовать зашифрованное соединение. Он может содержать информацию о владельце: имя контактного лица, название организации, страну, а иногда даже адрес и почтовый индекс. Вы можете искать эту информацию, используя следующие фильтры (и многие другие):
- `certificate.issuer.email_address`
- `certificate.issuer.given_name`
- `certificate.issuer.organization`
- `certificate.issuer.postal_code`
- `certificate.issuer.street_address`
- `certificate.issuer.surname`
Давайте попробуем найти IP-адреса, у которых в сертификате в поле street address содержится определённое слово:```
certificate.issuer.street_address:*mcgill*
Пример API-запроса
Инструменты Netlas CLI:```bash netlas search "certificate.issuer.street_address:mcgill" -f json
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=certificate.issuer.street_address%3A*mcgill*&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: YOUR_API_KEY' jq .items[].data.uri
Пример кода (библиотека Netlas на Python)

Запуск в командной строке:```bash python scripts/osint/certificates_search.py
Исходный код скрипта scripts/osint/certificates_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `certificate.issuer.street_address:*mcgill*`
netlas_query = netlas_connection.query(query="certificate.issuer.street_address:*mcgill*")
print (type(netlas_query))
# iterate over data and print: ip, url, cetificate issuer
for response in netlas_query['items']:
print (response['data']['uri'])
print (response['data']['certificate']['issuer'])
Archive.org использовался специалистами по OSINT для поиска старых версий веб-сайтов и страниц профилей в социальных сетях, чтобы найти удалённые контактные и другие данные.
Но, к сожалению, archive.org сохраняет копии не всех сайтов и делает это не очень часто (для некоторых сайтов лишь пару раз в год или реже).
Но Netlas тоже сохраняет старые версии сайтов с 2021 года!
Следующие фильтры чаще всего используются для поиска сайтов:``` http.title:"github.com"
domain:github.com
host:github.com

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

Чтобы посмотреть, как выглядит сайт, скопируйте содержимое поля «body» (вкладка response) в любой текстовый редактор и удалите из HTML-кода символы \t\r\n.

После этого вставьте код в один из онлайн-просмотрщиков HTML, например [Code beautify](https://codebeautify.org/htmlviewer). Или просто сохраните файл в формате HTML и откройте его в браузере.
### 9 способов поиска связанных веб-сайтов

При сборе информации о человеке или компании бывает важно найти как можно больше сайтов, которые могут быть с ними так или иначе связаны. С помощью Netlas это можно сделать как минимум 5 способами.
1. ID различных сервисов (аналитики, рекламных систем, приложений для интеграции с социальными сетями и системами публикаций). Их совпадение может указывать на то, что над проектами работал один человек или одна команда. Вот несколько примеров:
Google Analytics:```
http.tracker.google_analytics:"G-X82FSVSMTV"
Google Tag Manager:``` http.tracker.google_analytics:"GTM-N6462KFQ"
AddThis:```
http.body:"AT-ra-500bcd681b192302"
Facebook Pixel:``` http.tracker.facebook_pixel:317853189093681
Yandex Metrika```
http.tracker.yandex_metrica:89723437
Amazon Publisher Servies:``` http.body:APS-XXXX
Да, всё это можно найти в коде на некоторых сайтах.
И множество других идентификаторов, которые чаще всего встречаются в начале HTML-кода (но иногда и по всему коду).
[Try in Netlas](https://nt.ls/BCrw9)
2. ID партнёрских программ (также используйте http.body для их поиска). Вы можете найти их в партнёрских ссылках, которые человек публикует на других сайтах или в социальных сетях. Это могут быть следующие параметры URL (и подобные им):```
aff_fcid=
user_id=
partner_id=
ref_id=
```
"GitHub, Inc."
[Попробовать в Netlas](https://app.netlas.io/whois_domains/?q=%22GitHub%2C%20Inc.%22&page=1&indices=)
4. Поиск по почтовым серверам в DNS Netlas
```
mx:*.parklogic.com
```
ns:ns?.parklogic.com
[Try in Netlas](https://app.netlas.io/domains/?q=mx%3A*.parklogic.com&page=1&indices=)
6. Файлы (в основном логотипы и аватары пользователей) поиск упоминаний [->](https://github.com/netlas-io/netlas-cookbook#search-file-mentions-looking-for-content-that-may-be-infringing-on-copyrights)
7. Поиск поддоменов [->](https://github.com/netlas-io/netlas-cookbook#search-subdomains)
8. Поиск контактов Whois (в ответе Netlas) [->](https://github.com/netlas-io/netlas-cookbook#search-persons-nickname-or-email-in-whois-contacts)
9. Поиск по фавикону [->](https://github.com/netlas-io/netlas-cookbook#favicon-search)
## Скрапинг (Извлечение данных из тела веб-страницы)
Netlas API — отличный инструмент для сбора контактных и других данных с веб-сайтов. Во-первых, он позволяет делать это быстро. Во-вторых, для его использования не требуется прокси. В-третьих, он позволяет собирать данные с сайтов, которые временно недоступны.
Однако есть и недостатки: Netlas сканирует только главные страницы сайтов, а некоторые редкие сайты не попадают в его базу из-за защиты. Но тем не менее он может быть очень полезен.
Существует три основных подхода к скрапингу: сбор информации из HTML-тегов и CSS-селекторов, извлечение данных с помощью регулярных выражений и ИИ-скрапинг. Рассмотрим подробнее первые два.
### Пакет BeautifulSoup
[Beatifulsoup](https://pypi.org/project/beautifulsoup4/) — один из самых популярных в мире пакетов Python для парсинга HTML-кода и XML-файлов. Давайте попробуем использовать его для извлечения заголовков страниц (из тегов \<h1>, а НЕ \<title>).
Сначала установите пакет:```bash
pip install beautifulsoup4
И запустите scripts/osint/scraping_beatifulsoup.py:```bash python scripts/osint/scraping_beatifulsoup.py

Исходный код scripts/osint/scraping_beatifulsoup.py:```python
import netlas
from bs4 import BeautifulSoup
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `http.body:shop`
netlas_query = netlas_connection.query(query="http.body:shop")
# iterate over data and print: URL, h1 tags from body
for response in netlas_query['items']:
print (response['data']['uri'])
soup = BeautifulSoup(response['data']['http']['body'], "html.parser")
try:
print(soup.find("h1").get_text())
except Exception:
print("no h1 tags")
pass
Вы можете извлечь данные из других элементов веб-страниц аналогичным образом:``` soup.find("h3").get_text() soup.find("id='loginform'").get_text() soup.find("class='forms'").get_text() soup.find("href='https://example.com'").get_text()
Если вы хотите найти все элементы определенного типа, используйте метод find_all().
### Re Пакет
[Re](https://docs.python.org/3/library/re.html) — это предустановленный пакет Python для поиска и извлечения данных с помощью регулярных выражений. Он полезен для извлечения контактной информации с веб-страниц и многих других задач. Давайте рассмотрим пример его работы.
Запустите scripts/osint/scraping_re.py:```bash
python scripts/osint/scraping_re.py

Исходный код скрипта scripts/osint/scraping_re.py:```python import netlas import re
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
http.body:shopnetlas_query = netlas_connection.query(query="http.body:shop")
for response in netlas_query['items']: print (response['data']['uri']) emails = re.findall("[a-zA-Z0-9-.]+@[a-zA-Z0-9-.]+", response['data']['http']['body']) try: print(emails) except Exception: print("no emails") pass
Аналогично вы можете извлекать ссылки, номера телефонов, адреса криптовалютных кошельков и многое другое. Готовые шаблоны можно найти в библиотеках регулярных выражений:
[Regex Lib](https://regexlib.com/)
[UI Bakery Regex Library](https://uibakery.io/regex-library)
[Regex 101](https://regex101.com/)
### Другие пакеты Python для скрапинга
Пакеты Beaitiful soup и Re — лишь одни из многих инструментов для извлечения данных с веб-страниц с помощью Python. Вот ещё несколько примеров таких пакетов:
* [Scrapy](https://pypi.org/project/Scrapy/): В первую очередь это краулер (инструмент для обхода страниц сайта по ссылкам, найденным на других страницах), и, кроме того, он обладает широкими возможностями для извлечения данных с веб-страниц.
* [Selenium](https://pypi.org/project/selenium/): Инструмент для автоматизации работы с браузером. Позволяет извлекать данные из контента, созданного с помощью JavaScript.
* [Lxml](https://pypi.org/project/lxml/): Инструмент для скрапинга и проверки XML-файлов.
* [PDFtoText](https://pypi.org/project/pdftotext/) — инструмент для извлечения текстового содержимого из PDF-файлов.
* [pyChatGPT](https://pypi.org/project/pyChatGPT/) — неофициальный пакет для взаимодействия с CHATGP (не требует API-ключа OpenAI), позволяющий анализировать текстовую информацию с помощью ИИ.
## Использование Netlas.io для крипто-расследований
Netlas предоставляет отличные возможности для исследователей, специализирующихся на криптовалютных преступлениях. Во-первых, его можно использовать для поиска ссылок на адреса кошельков и номера транзакций. Во-вторых, — для поиска уязвимых майнинговых ферм, узлов и других серверов, связанных с криптоинфраструктурой.
### Поиск майнинговых ферм

Майнинговые фермы Antminer, впервые выпущенные компанией Bitmain ещё в 2013 году, являются одной из самых популярных линеек моделей майнинговых ферм в мире. Их можно найти по наличию слова «antMiner» в заголовке www_authenticate.```
http.headers.www_authenticate:antMiner
Вы также можете искать другие типы майнинговых ферм. Например:``` http.headers.www_authenticate:XMR-Stak-Miner
Экспериментируйте, комбинируя различные фильтры, слова "miner/mining" и названия криптовалют.
**Пример API-запроса**
Netlas CLI Tools:```bash
netlas search "http.headers.www_authenticate:antMiner"
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=http.headers.www_authenticate%3AantMiner&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: 'YOUR_API_KEY' | jq .items[].data.uri
**Пример кода (библиотека Netlas Python)**

Запустите в командной строке:```bash
python scripts/crypto/mining_farms_search.py
Исходный код scripts/crypto/mining_farms_search.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
http.headers.www_authenticate:antMinernetlas_query = netlas_connection.query(query='http.headers.www_authenticate:antMiner')
for response in netlas_query['items']: print (response['data']['uri']) print (response['data']['http']['headers'])
### Поиск сайтов, заражённых криптомайнерами

Coinhive, сервис, который позволяет сайтам (в основном взломанным) использовать компьютеры своих посетителей для майнинга криптовалют, закрывается в 2019 году. Но тем не менее, ссылки на него всё ещё встроены на многих сайтах по всему миру. Давайте попробуем их найти:```
http.body:coinhive.min.js domain:*
Обратите внимание, что мы используем фильтр domain:* для поиска именно сайтов, а не всех устройств.
Аналогично вы можете искать сайты, зараженные другими криптомайнерами (а также другим вредоносным кодом, выполняющимся на стороне пользователя).
Пример API-запроса
Netlas CLI Tools:```bash netlas search "http.body:coinhive.min.js domain:*"
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=http.body%3Acoinhive.min.js%20domain%3A*&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: 'YOUR_API_KEY' | jq .items[].data.uri
Пример кода (Netlas Python Library)

Запуск в командной строке:```bash python scripts/crypto/search_sites_injected_with_miners.py
Исходный код:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `http.body:coinhive.min.js domain:*`
netlas_query = netlas_connection.query(query='http.body:coinhive.min.js domain:*')
# iterate over data and print: uri
for response in netlas_query['items']:
print (response['data']['uri'])

Узлы Bitcoin используют порт 8333 для TCP-соединения. Поэтому их легко найти с помощью поискового фильтра "port:".``` port:8333 cve:*
Обратите внимание, что мы используем фильтр "cve:*" для поиска серверов с уязвимостями.
**Пример API-запроса**
Netlas CLI Tools:```bash
netlas search "port:8333 cve:*"
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=port%3A8333%20cve%3A*&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: 'YOUR_API_KEY' | jq .items[].data.uri
**Пример кода (библиотека Netlas для Python)**

Запуск в командной строке:```bash
python scripts/crypto/search_bitcoin_nodes.py
Исходный код scripts/crypto/search_bitcoin_nodes.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
port:8333 cve:*netlas_query = netlas_connection.query(query='port:8333 cve:*')
for response in netlas_query['items']: print (response['data']['uri']) print (response['data']['cve'][0]['name']) print (response['data']['cve'][0]['description'])
## Использование Neltas для пентеста
Netlas.io позволяет искать сайты со множеством различных типов уязвимостей. Это можно сделать по номеру уязвимости (CVE-...), названию программного обеспечения, установленного на сервере, определенным словам в заголовках страниц и другим параметрам.
Вы можете отслеживать самые последние опубликованные CVE (Common Vulnerabilities and Exposures) на этих сайтах:
* [CVE Details](https://www.cvedetails.com/)
* [VulDB](https://vuldb.com/)
* [OpenCVE](https://www.opencve.io/)
Мы также регулярно публикуем наиболее актуальные запросы для поиска уязвимых устройств и программного обеспечения в наших лентах [Twitter](https://twitter.com/Netlas_io), [Telegram](https://t.me/netlas) и [Discord](https://nt.ls/discord), а также в репозитории GitHub [Netlas Dorks](https://github.com/netlas-io/netlas-dorks).
В этом разделе мы просто рассмотрим общие принципы поиска сайтов и серверов с уязвимостями.
### Поиск поддоменов
Используя звездочки в поисковых запросах, вы можете найти все поддомены разных уровней (чьи имена заканчиваются на имя конкретного домена первого уровня (.com) или домена второго уровня (google.com)).
**Пример поискового запроса**
```
domain:*.github.com OR host:*.github.com
Пример API-запроса
Инструменты командной строки Netlas:```bash netlas search "domain:.github.com OR host:.github.com" -f json
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=domain%3A*.github.com%20OR%20host%3A*.github.com&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.uri
Пример кода (Netlas Python Library)

Запуск в командной строке:```bash python scripts/pentest/subdomain_search.py
Исходный код scripts/pentest/subdomain_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `domain:*.github.com OR host:*.github.com`
netlas_query = netlas_connection.query(query="domain:*.github.com OR host:*.github.com")
# iterate over data and print: ip, url
for response in netlas_query['items']:
print (response['data']['ip'])
print (response['data']['uri'])
Пример поискового запроса
```
cve.name:CVE-2022-22965
[Try in Netlas](https://app.netlas.io/responses/?q=cve.name%3ACVE-2022-22965&page=1&indices=)
**Пример API-запроса**
Netlas CLI Tools:```bash
netlas search "cve.name:CVE-2022-22965" -f json
CVE-2022-22965 - Spring MVC или Spring WebFlux приложение, работающее на JDK 9+, может быть уязвимо для удаленного выполнения кода (RCE) через связывание данных. Подробнее
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=http.body%3A1%3F234%3F567%3F89%3F99%20OR%20http.body%3A12345678999%20OR%20http.body%3A1234%3F5678%3F999&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: YOUR_API_KEY' jq .items[].data.uri
**Пример кода (библиотека Netlas Python)**

Запуск в командной строке:```bash
python scripts/pentest/cve_search.py
Исходный код scripts/pentest/cve_search.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
cve.name:CVE-2022-22965netlas_query = netlas_connection.query(query="cve.name:CVE-2022-22965")
for response in netlas_query['items']: print (response['data']['ip']) print (response['data']['uri'])
### Поиск сайтов с уязвимостями, содержащими определенное слово в описании
Если вам не нужно исследовать серверы с конкретным типом уязвимости, а просто хочется увидеть уязвимые серверы в определенной группе (например, Oracle WebLogic Server или сайты на WordPress), вы можете искать их по ключевым словам и фильтру cve.description:.
Чтобы отфильтровать сайты, для уязвимостей которых опубликованы эксплойты, используйте cve.has_exploit:true.
**Пример поискового запроса**
```
cve.description:weblogic AND cve.has_exploit:true
Пример API-запроса
Инструменты командной строки Netlas:```bash netlas search "cve.description:weblogic AND cve.has_exploit:true" -f json
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=cve.description%3Aweblogic%20AND%20cve.has_exploit%3Atrue&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: YOUR_API_KEY | jq .items[].data.uri
Пример кода (Netlas Python Library)

Запуск в командной строке:```bash python scripts/pentest/cve_description_search.py
Исходный код scripts/pentest/cve_description_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `cve.description:weblogic AND cve.has_exploit:true`
netlas_query = netlas_connection.query(query="cve.description:weblogic AND cve.has_exploit:true")
# iterate over data and print: url, first CVE name first CVE description
for response in netlas_query['items']:
print (response['data']['uri'])
print (response['data']['cve'][0]['name'])
print (response['data']['cve'][0]['description'])
Этот метод позволяет найти устройства, произведенные конкретной компанией.
Пример поискового запроса
```
http.headers.server:"yawcam"
Поиск веб-камер YawCam.
[Try in Netlas](https://app.netlas.io/responses/?q=http.headers.server%3A%22yawcam%22&page=1&indices=)
**Пример API-запроса**
Инструменты командной строки Netlas:```bash
netlas search 'http.headers.server:"yawcam"' -f json
Обратите внимание, что при использовании двойных кавычек в запросах сам запрос пишется внутри одинарных кавычек.
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=http.headers.server%3A%22yawcam%22&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.uri
**Пример кода (библиотека Netlas для Python)**

Запустить в командной строке:```bash
python scripts/pentest/server_name_search.py
Исходный код scripts/pentest/server_name_search.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
http.headers.server:"yawcam"netlas_query = netlas_connection.query(query='http.headers.server:"yawcam"')
for response in netlas_query['items']: print (response['data']['ip']) print (response['data']['http']['headers']['server'])
#### Стандартные логины и пароли <!-- omit in toc -->
Одно из практических применений поиска по имени программного обеспечения в заголовках серверов — это поиск устройств от конкретного вендора. Это может быть необходимо как при поиске устройств с конкретными уязвимостями, так и устройств со стандартными логинами и паролями.

Стандартные логины и пароли для различных моделей устройств можно найти в специальных списках. Например:
* [Стандартные логины и пароли для роутеров (список 2023)](https://www.softwaretestinghelp.com/default-router-username-and-password-list/)
* [Стандартные имена пользователей, пароли и IP-адреса для камер видеонаблюдения](https://www.a1securitycameras.com/blog/default-username-passwords-ip-addresses-for-surveillance-cameras/)
* [Стандартные пароли почти всех IP-камер](https://www.hackers-arise.com/post/the-default-passwords-of-nearly-every-ip-camera)
* [Список стандартных паролей от Datarecovery](https://datarecovery.com/rd/default-passwords/)
Помните, что использование стандартных логинов и паролей для входа в чужие системы нарушает этические нормы и может быть незаконным в вашей стране.
---
### Поиск уязвимых серверов по хешу фавикона
Один из способов найти веб-серверы, подверженные определённой уязвимости, — это поиск по favicon ico определённого программного обеспечения веб-сервера.
**Пример поискового запроса**
```
http.favicon.hash_sha256:ebaaed8ab7c21856f888117edaf342f6bc10335106ed907f95787b69878d9d9e
Этот запрос ищет favicon SecurePoint (CVE-2023-22620).
Пример запроса API
Инструменты Netlas CLI:```bash netlas search "http.favicon.hash_sha256:ebaaed8ab7c21856f888117edaf342f6bc10335106ed907f95787b69878d9d9e" -f json
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=http.favicon.hash_sha256%3Aebaaed8ab7c21856f888117edaf342f6bc10335106ed907f95787b69878d9d9e&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.uri
Пример кода (библиотека Netlas Python)

Запуск в командной строке:```bash python scripts/pentest/favicon_hash_search.py
Исходный код scripts/pentest/favicon_hash_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `http.favicon.hash_sha256:ebaaed8ab7c21856f888117edaf342f6bc10335106ed907f95787b69878d9d9e`
netlas_query = netlas_connection.query(query="http.favicon.hash_sha256:ebaaed8ab7c21856f888117edaf342f6bc10335106ed907f95787b69878d9d9e")
# iterate over data and print: IP,URL,web page title
for response in netlas_query['items']:
print (response['data']['ip'])
print (response['data']['uri'])
print (response['data']['http']['title'])
Чтобы упростить поиск по серверам, работающим с разным программным обеспечением, Netlas автоматически назначает результаты поиска определенными тегами.
Примеры тегов:
Вы можете искать по тегам, используя фильтр "tag.name:". Также можно искать по категории тега, используя фильтр "tag.category:". Список всех доступных тегов и категорий отображается при нажатии на иконку справа от поля ввода поискового запроса на главной странице Netlas.
Примечание: Не все тарифные планы поддерживают использование тегов.
Пример поискового запроса
```
tag.name:"adobe_coldfusion"
Этот запрос ищет Adobe ColdFusion (CVE-2023-26359).
[Попробовать в Netlas](https://app.netlas.io/responses/?q=tag.name%3A%22adobe_coldfusion%22&page=1&indices=)
**Пример запроса API**
Netlas CLI Tools:```bash
netlas search 'tag.name:"adobe_coldfusion"' -f json
Обратите внимание, что при использовании двойных кавычек в запросах сам запрос пишется в одинарных кавычках.
Curl:```bash
curl -X 'GET'
'https://app.netlas.io/api/responses/?q=tag.name%3A%22adobe_coldfusion%22&source_type=include&start=0&fields=*'
-H 'accept: application/json'
-H 'X-API-Key: YOUR_API_KEY' | jq .items[].data.uri
**Пример кода (библиотека Netlas для Python)**

Запуск в командной строке:```bash
python scripts/pentest/search_tag_name.py
Исходный код scripts/pentest/search_tag_name.py:```python import netlas
apikey = "YOUR_API_KEY"
netlas_connection = netlas.Netlas(api_key=apikey)
tag.name:"adobe_coldfusion"netlas_query = netlas_connection.query(query='tag.name:"adobe_coldfusion"')
for response in netlas_query['items']: print (response['data']['ip']) print (response['data']['uri'])
### Поиск уязвимых серверов и устройств рядом с вами (или в любом другом месте)

Хотите узнать, сколько уязвимых сайтов и устройств находятся рядом с вами? Просто найдите все IP-адреса, у которых заполнено поле CVE в определённой геолокации.```
geo.city:London AND cve:*
Вы также можете использовать другие фильтры геолокации.
geo.continentgeo.countrygeo.locationПример API-запроса
Netlas CLI Tools:``` geo.city:London AND cve:*
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=geo.city%3ALondon%20AND%20cve%3A*&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: 'YOUR_API_KEY' | jq .items[].data.domain
Пример кода (библиотека Netlas Python)

Запустить в командной строке:```bash python scripts/pentest/cve_location_search.py
Исходный код scripts/pentest/cve_location_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `geo.city:London AND cve:*`
netlas_query = netlas_connection.query(query='geo.city:London AND cve:*')
# iterate over data and print: uri, cve name, location
for response in netlas_query['items']:
print (response['data']['uri'])
print (response['data']['cve'][0]['name'])
print (response['data']['geo']['city'])

Многие сайты и серверы имеют веб-страницы входа и пароля, которые могут быть использованы для получения полного контроля над сайтом или сервером (с использованием стандартных паролей, перебора или эксплуатации уязвимостей).
Вы можете найти их с помощью фильтра uri: или/и http.title:```
uri:login.php
uri:login.aspx
uri:user http.title:login
uri:admin http.title:login
http.title:admin http.title:panel
Существует так много комбинаций. Чтобы найти только панели уязвимых серверов, используйте фильтр `cve:*`.
Также не забывайте, что можно фильтровать серверы по установленному программному обеспечению с помощью тегов. Например:```
tag.1c_bitrix:*
tag.Cisco:
tag.amazon_s3:*
tag.drupal:*
tag.wordpress:*

Попробуем найти уязвимую панель администратора phpMyAdmin (одно из самых популярных программ для администрирования баз данных MySQL):``` http.title:phpMyAdmin cve:*
А вот несколько примеров для других популярных инструментов управления базами данных:
[Adminer](https://www.adminer.org/):```
http.title:adminer http.title:login cve:*
PostgreSQL``` http.title:(phpPgAdmin OR pgadmin) cve:*
Вы также можете искать серверы, на которых установлено программное обеспечение для различных баз данных, используя теги или специальные фильтры:```
tag.adminer:*
tag.phpMyAdmin:*
tag.elastic:*
mongodb:*
mssql:*
mysql:*
django:*
Поиск панелей администратора для серверов, найденных таким образом, может быть не самой простой задачей, так как администраторы сайтов часто меняют стандартные ссылки на более безопасные.

SQL-инъекция — это тип уязвимости, который позволяет выполнять запросы к базе данных путем манипулирования параметрами URL (это может быть возможным из-за неправильных конфигураций и низкокачественного кода).
Один из старейших методов поиска страниц, потенциально уязвимых к SQL-инъекциям, — это поиск страниц, в которых включено отображение сообщений об ошибках в запросах MySQl с помощью Google Dorks.
Аналогичный поиск можно выполнить в Netlas:``` http.body:mysql_fetch_array http.body:warning
[Попробовать в Netlas](https://app.netlas.io/responses/?q=http.body%3Amysql_fetch_array%20http.body%3Awarning&page=1&indices=)
Несколько других примеров:```
http.body:mysql_num_rows http.body:warning
http.body:mysql_connect http.body:denied
http.body:mysql_query http.body:warning
http.body:pg_connect http.body:fatal
Пример API-запроса
Netlas CLI Tools:```bash netlas search "http.body:mysql_fetch_array http.body:warning" -f json
Curl:```bash
curl -X 'GET' \
'https://app.netlas.io/api/responses/?q=http.body%3Amysql_fetch_array%20http.body%3Awarning&source_type=include&start=0&fields=*' \
-H 'accept: application/json' \
-H 'X-API-Key: YOUR_API_KEY' jq .items[].data.uri
Пример кода (Netlas Python Library)

Запустите в командной строке:```bash python scripts/pentest/sql_injection_search.py
Исходный код scripts/pentest/sql_injection_search.py:```python
import netlas
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# search in Netlas "http.body:mysql_fetch_array http.body:warning"
netlas_query = netlas_connection.query(query="http.body:mysql_fetch_array http.body:warning")
# iterate over data and print: uri, web page body
for response in netlas_query['items']:
print (response['data']['uri'])
print (response['data']['http']['body'])
Вы также можете использовать следующие фильтры для поиска уязвимых серверов MySQL:
mysql.error_codemysql.error_idmysql.error_messageNetlas ищет не только веб-сайты и серверы, но и все устройства, подключенные к Интернету: умные домашние приборы, камеры наблюдения, принтеры, маршрутизаторы, светофоры, медицинское оборудование и многое другое.
Существует четыре основных способа найти эти устройства.

Самый простой способ — просто найти название производителя или тип устройства в HTTP-заголовке ответа.
Попробуйте найти устройства домашней автоматизации Jeedom:``` http.title:Jeedom
[Попробовать в Netlas](https://app.netlas.io/responses/?q=http.title%3AJeedom&page=1&indices=)
Или веб-камеры Avigilon:```
http.title:"Avigilon"
У этого метода есть два недостатка. Первый — большое количество неподходящих результатов (просто сайты с релевантными словами в заголовке). Но при использовании кавычек и дополнительных фильтров поиска, таких как port:, их становится меньше.
Второй — многие устройства IoT не содержат в http-заголовке никакой информации, по которой их можно было бы идентифицировать. Поэтому другие фильтры поиска также могут быть полезны.

Аналогично можно попробовать поискать ключевые слова в теле http-ответа. Чтобы отфильтровать хотя бы часть обычных сайтов, используйте фильтр NOT domain:. Попробуем найти камеры Reolink:``` http.body:(clip-status) NOT domain:
Пример не совсем верен, поэтому такие камеры можно найти с помощью тегов (подробнее об этом ниже).
### Поиск по номеру порта

Разные IoT-устройства используют разные порты для связи. И по номеру открытого порта можно гипотетически предположить, что IP-адрес принадлежит определённому типу устройств (**часто предположение верно, но могут быть неточности и совпадения**).
Попробуйте поискать интернет-радио (порт 8000):```
port:8000 http.title:radio
Или все устройства с открытым портом 7547 (используется для удалённого управления маршрутизаторами через CWMP):``` port:7547
[Попробовать в Netlas](https://app.netlas.io/responses/?q=port%3A7547&page=1&indices=)
### Поиск по баннеру

Давайте поищем маршрутизаторы, использующие протокол Telnet (вы также можете отфильтровать их по port:23):```
telnet.banner:router
Или ищите баннеры для всех протоколов:``` *.banner:router
[Try in Netlas](https://app.netlas.io/responses/?q=%5C*.banner%3Arouter&page=1&indices=)
### Поиск по фавикону

Один из самых простых способов найти устройства с установленным определенным программным обеспечением — это поиск по фавикону. Давайте попробуем найти, где используются различные продукты Cisco:```
http.favicon.hash_sha256:62a8461e328d5bace3780ff738d0b58f6502592c04afa564e0a8a792583a7bfb
Есть три основных способа поиска по фавикону в Netlas:

Иногда бывает так, что идентифицирующая информация об устройстве отсутствует в http title, но может находиться в других заголовках. Например, в http.server.header:``` http.headers.server:"i-Catcher Console"
[Try in Netlas](https://app.netlas.io/responses/?q=http.headers.server%3A%22i-Catcher%20Console%22&page=1&indices=)
Netlas поддерживает поиск по нескольким десяткам типов заголовков. Попробуйте разные варианты.
### Поиск по Cookies

Поиск парковок Eco JS Parking lots:```
http.headers.set_cookie:(regist_carNo=)

Этот метод может потребовать платной подписки. См. цены
Вы также можете попробовать поиск устройств по тегам (категориям).``` tag.category:"IoT" tag.category:"Web cameras"
[Try in Netlas](https://app.netlas.io/responses/?q=tag.category%3A%22Web%20cameras%22&page=1&indices=)
Помните, что теги назначаются автоматически, и некоторые подходящие устройства могут не быть включены в соответствующую категорию.
### Дополнительные фильтры поиска
Вы можете искать IoT-устройства, расположенные в определенных геолокациях:
- `geo.city`
- `geo.country`
- `geo.continent`
Фильтровать устройства по диапазону IP-адресов:```
ip:[162.245.241.131 TO 162.245.241.133]
Или устройства с «свежими» уязвимостями:``` cve.name:2023
Больше примеров запросов для поиска IoT-устройств можно найти здесь:
[Netlas Dorks](https://github.com/netlas-io/netlas-dorks)
## Использование Netlas.io для исследования Darknet
Одно из главных преимуществ Netlas заключается в том, что вы можете использовать его для поиска вещей, которые не индексируются Google. Это то, что условно можно назвать DeepWeb. Например, FTP-серверы или Telnet-серверы:```
ftp.banner:*
telnet.banner:*
Но, к сожалению, Netlas не индексирует даркнет (.onion, .i2p и т.д.), так как сканирует только глобальные IP-адреса. Однако его всё ещё можно использовать для исследования альтернативной сетевой инфраструктуры и поиска ссылок на .onion-сайты.
Выходной узел Tor — это точка, где веб-трафик покидает сеть Tor и направляется к месту назначения. Актуальный список IP-адресов активных входных узлов Tor всегда доступен на сайте TorProject:
Список выходных узлов Tor Project
Давайте посмотрим, как с помощью Netlas можно собрать информацию обо всех активных выходных узлах Tor за один раз. Этот пример будет полезен и для других задач, где необходимо собрать информацию о списке доменов или IP-адресов.
Запустите scripts/darknet/tor_nodes.py:```bash python scripts/darknet/tor_nodes.py

Исходный код скрипта scripts/darknet/tor_nodes.py:```python
import netlas
import urllib
import time
apikey = 'YOUR_API_KEY'
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# read file with Tor Exit Nodes IPs line by line
response = urllib.request.urlopen('https://check.torproject.org/torbulkexitlist?ip=1.1.1.1')
ip_lines = response.readlines()
# save each line to ip variable
for ip in ip_lines:
# wait one second
time.sleep(1)
# conver byte string to text
ip=ip.decode("utf-8")
# retrieve data from responses by query `ip: + tor exit node ip`
netlas_query = netlas_connection.query(query="ip:"+ip)
# iterate over data and print: ip, geo data, banner text
for response in netlas_query['items']:
print(response['data']['ip'])
print(response['data']['geo'])
print(response['data']['ntp']['banner'])
pass
pass
Использование пакета time и метода sleep подходит только для простых примеров. Лучшим решением является использование пакета ограничения скорости.
Как упоминалось выше, Netlas сканирует только глобальные домены, поэтому поиск .onion доменов невозможен. Однако можно искать ссылки на .onion домены в тексте веб-страниц. Вот пример простого скрипта на Python (с регулярным выражением), который это делает:
Запустите scripts/darknet/onion_links.py:```bash python scripts/darknet/onion_links.py

Исходный код scripts/darknet/onion_links.py:```python
import netlas
import re
apikey = "YOUR_API_KEY"
# create new connection to Netlas
netlas_connection = netlas.Netlas(api_key=apikey)
# retrieve data from responses by query `http.body:*.onion AND forum`
netlas_query = netlas_connection.query(query="http.body:(*.onion AND forum)")
# iterate over data and print: URL, .onion link from body
for response in netlas_query['items']:
print(response['data']['uri'])
onion_links = re.findall("[a-z-1-9]*\.onion", response['data']['http']['body'])
try:
print(onion_links)
except:
print("no onion links")
pass
Вы можете собирать ссылки для других сетей, таких как I2Pin, таким же образом:``` http.body:*.i2p
## Поиск директорий файлов, резервных копий и журналов

Существует огромное количество сайтов и серверов, которые оставляют свои файловые директории открытыми из-за ошибки конфигурации (а иногда и намеренно). Вот несколько примеров запросов, которые помогут вам их найти.
Поиск любых директорий файлов:```
http.title:Index http.title:of
Поиск каталогов с файлами логов:``` http.title:Index http.title:of http.body:logs
Поиск директорий с дампами баз данных:```
http.title:Index http.title:of http.body:sql
Поиск директорий с архивированными резервными копиями:``` http.title:Index http.title:of http.body:backup?zip
Поиск каталогов с информацией для доступа по SSH:```
http.title:Index http.title:of http.body:("ssh_config" OR "ssh_known_hosts" OR "authorized_keys" OR "id_rsa" OR "id_dsa")
Поиск каталогов с файлами, содержащими другую информацию об авторизации:``` http.title:Index http.title:of http.body:("pass" OR "logins" OR "config" OR "password")
Поиск каталогов с файлами, загруженными пользователями:```
http.title:index http.title:of http.body:downloads
---
[Read more](https://github.com/netlas-io/netlas-cookbook)