Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
snowpick — Находит утечки конфиденциальных данных из экземпляров ServiceNow. | Kitploit
Инструменты/GitHubGitHub/bishopfox/snowpick
РазведкаСканеры уязвимостейТестирование безопасности APIСбор информацииВеб-безопасностьТестирование на ПроникновениеБезопасность облачных средНеправильная Конфигурация
GitHubbishopfox/snowpick

snowpick

Находит утечки конфиденциальных данных из экземпляров ServiceNow.

Репозиторий
151 месяц назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

snowpick

snowpick — это сканер раскрытия данных ServiceNow, который находит некорректно настроенные ACL виджетов, ошибки контроля доступа REST API и неаутентифицированное раскрытие данных.

ServiceNow раскрывает данные через две распространённые публичные поверхности: виджеты Service Portal и Table REST API. Если контроль доступа на любой из этих поверхностей настроен некорректно, неаутентифицированные пользователи могут запрашивать внутренние записи, такие как тикеты инцидентов, каталоги пользователей, статьи базы знаний и элементы сервисного каталога. snowpick проверяет обе поверхности, различает раскрытие записей и подтверждение только по количеству, а также формирует детали воспроизведения для авторизованной валидации.

Как это работает

snowpick получает сессионный токен со страницы входа ServiceNow без каких-либо учётных данных, а затем использует его для запросов к внутренним API платформы. Он проверяет две поверхности атаки:

Виджеты — это небольшие приложения, на которых работает ServiceNow Service Portal. У каждого из них собственные настройки контроля доступа. Когда эти настройки слишком разрешительные, неаутентифицированная сессия может получать данные из виджета. snowpick сначала запрашивает у инстанса список установленных виджетов, где это возможно, затем проверяет каждый из них и определяет, возвращает ли он записи или только их количество.

Table API — это REST-интерфейс по адресу /api/now/table/ для прямого запроса таблиц ServiceNow. Контроль доступа у него отдельный от виджетов, поэтому цель может быть закрыта на одной поверхности и открыта на другой. snowpick проверяет ценные таблицы, такие как sys_user, incident и oauth_entity.

Оракул подсчёта. Иногда виджет или таблица подтверждает, что подходящие записи существуют, но не возвращает сами строки. snowpick помечает это как count_oracle — не полное раскрытие, но и не чисто, поскольку через фильтры можно опрашивать счётчики и вслепую делать выводы о данных.

Установка

root@kitploit:~
❯ go install github.com/BishopFox/snowpick@latest

Или соберите из исходного кода:

root@kitploit:~
❯ git clone https://github.com/BishopFox/snowpick.git
❯ cd snowpick
❯ go build -o snowpick .

Требуется Go 1.21 или новее.

Использование

Базовое сканирование

Направьте snowpick на инстанс ServiceNow. Учётные данные не требуются.

root@kitploit:~
❯ snowpick -target prod.service-now.com
snowpick v1.0.0 | 1 targets | 6 widgets | proxy direct
[!] prod.service-now.com
  | ticket-attachments 272 records [internal_operations:inferred]
[*] 1/1 targets complete, 1 with findings

RESULTS
1 targets scanned in 8.2s | 1 reachable | 1 with findings

  EXPOSED prod.service-now.com  272 records [internal_operations:inferred]
    | ticket-attachments       272 records [internal_operations:inferred]
    |   ServiceNow Overview and Open House 'How To.... Videos'
    |   How to - JIRA and Confluence Access Process
    |   Updating Your Personal Time Zone in ServiceNow

ATTACK SURFACE
  ticket-attachments           #################### 272 across 1 target

DATA CLASSIFICATION
  OPERATIONS          1 finding across 1 target

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

Понимание вывода

root@kitploit:~
Progress markers (left of each host):
  [!] findings   [+] clean   [-] unreachable or no session   [*] progress

Summary buckets:
  EXPOSED  data or a confirmed count came back      CLEAN  nothing reachable
  SKIP     no public session (e.g. SSO-only login)  DOWN   host unreachable

Counts:
  272 records              total the instance reports as matching
  272 records, 10 sampled  total, plus the rows snowpick pulled as evidence

Tags:
  [pii:observed]   a hint, written as category:basis
                   basis  observed = value seen in returned data
                          inferred = from a table/field/widget name
                   category  pii, credentials, infrastructure,
                             internal_operations, review_required
  [blind oracle]   count confirmed but no rows returned (a count_oracle)
  [API]            finding came from the Table REST API, not a widget
  [stats.do]       the /stats.do diagnostic endpoint is publicly reachable

Сканирование нескольких целей

Передайте файл с одним hostname на строку. snowpick сканирует их параллельно.

root@kitploit:~
❯ snowpick -targets hosts.txt -concurrency 5
snowpick v1.0.0 | 6 targets | 6 widgets | proxy direct
[!] prod.service-now.com
  | ticket-attachments 272 records [internal_operations:inferred]
[*] 1/6 targets complete, 1 with findings
[+] staging.service-now.com clean
[*] 2/6 targets complete, 1 with findings
[!] dev.service-now.com [stats.do]
  | ticket-attachments 61 records [internal_operations:inferred]
[*] 3/6 targets complete, 2 with findings
[+] sandbox.service-now.com clean
[*] 4/6 targets complete, 2 with findings
[-] internal.service-now.com bootstrap failed: /login.do returned 302
[+] test.service-now.com clean
[*] 6/6 targets complete, 2 with findings

Проверка REST API

ServiceNow также предоставляет Table REST API по адресу /api/now/table/ для прямого запроса внутренних таблиц. Это отдельная от виджетов поверхность контроля доступа. Используйте -table-api, чтобы проверить обе.

root@kitploit:~
❯ snowpick -target prod.service-now.com -table-api
snowpick v1.0.0 | 1 targets | 6 widgets | proxy direct
[!] prod.service-now.com
  | [API] cmn_department 1,234 records, 10 sampled [infrastructure:inferred]
[*] 1/1 targets complete, 1 with findings

Для находок Table API record_count показывает общее количество раскрытых записей, когда ServiceNow возвращает итоговое число. sample_count показывает, сколько записей snowpick собрал в качестве ограниченного доказательства.

Обнаружение таблиц

По умолчанию snowpick проверяет подобранный набор ценных таблиц (инциденты, записи пользователей, вложения и т. д.). С флагом -discover он пытается перечислить имена таблиц из инстанса и проверить их тоже.

root@kitploit:~
❯ snowpick -target prod.service-now.com -discover -discover-limit 200

Определение версии

Используйте -fingerprint, чтобы определить, какой релиз ServiceNow запущен на цели. Это помогает понять, какие патчи безопасности установлены.

root@kitploit:~
❯ snowpick -target prod.service-now.com -fingerprint
snowpick v1.0.0 | 1 targets | 6 widgets | proxy direct
[!] prod.service-now.com [Zurich (glide-zurich-07-01-2025__patch7-02-19-2026)] [stats.do]
  | ticket-attachments 61 records [internal_operations:inferred]
[*] 1/1 targets complete, 1 with findings

Прокси и ограничение частоты запросов

Пропускайте трафик через Burp, ZAP или SOCKS-прокси. Используйте -rate, чтобы ограничить частоту запросов к боевым инстансам.

root@kitploit:~
❯ snowpick -target prod.service-now.com -proxy socks5://127.0.0.1:1080 -insecure -rate 200ms

Конвейерный режим

Подавите вывод прогресса с помощью -quiet. JSON по умолчанию выводится в stdout или в файл с -output. Код выхода 2 означает, что есть находки, 1 — одну или несколько целей не удалось проверить, 0 — сканирование завершилось без находок.

root@kitploit:~
❯ snowpick -target prod.service-now.com -quiet -output results.json
❯ echo $?
2

Работа с результатами

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

Структура JSON

root@kitploit:~
{
  "target": "acme.service-now.com",
  "reachable": true,
  "token_obtained": true,
  "stats_do": false,
  "widgets": [
    {
      "id": "ff26f2b1db12220099f93691f0b8f5ce",
      "name": "ticket-attachments",
      "status": "exposed",
      "record_count": 847,
      "sample_count": 10,
      "hints": [
        {
          "category": "pii",
          "basis": "observed",
          "reason": "email pattern in sample content",
          "signals": ["content:[email protected]"]
        },
        {
          "category": "internal_operations",
          "basis": "inferred",
          "reason": "widget name associated with internal operations",
          "signals": ["widget:ticket-attachments"]
        }
      ],
      "reproduction": {
        "method": "POST",
        "url": "https://acme.service-now.com/api/now/sp/widget/ff26f2b1db12220099f93691f0b8f5ce",
        "headers": {"X-UserToken": "...", "Cookie": "JSESSIONID=..."},
        "body": "{\"payload\":{\"start\":0,\"end\":1}}",
        "status_code": 200,
        "curl": "curl -i -sS -X 'POST' ..."
      }
    }
  ]
}

Находки перечисления таблиц попадают в table_findings, а находки Table REST API — в table_api_findings. Они используют ту же структуру hints. Находки Table API также включают record_count и sample_count, когда доступно итоговое количество.

Часто используемые jq-запросы

Список всех целей с находками:

root@kitploit:~
❯ jq -r '.findings[] | select(any(.widgets[]?; .status == "exposed" or .status == "count_oracle") or ((.table_findings // []) | length > 0) or ((.table_api_findings // []) | length > 0)) | .target' results.json
prod.service-now.com
dev.service-now.com

Получить curl-команды для воспроизведения раскрытых находок (скопируйте и вставьте, чтобы воспроизвести):

root@kitploit:~
❯ jq -r '.findings[] | (.widgets[]?, .table_findings[]?, .table_api_findings[]?) | select(.status == "exposed") | .reproduction.curl' results.json
curl -i -sS -X 'POST' 'https://acme.service-now.com/api/now/sp/widget/ff26f...' -H 'X-UserToken: MOCK_TOKEN' ...

Показать находки PII с целью, вектором, статусом, количеством, образцами и основанием подсказки:

root@kitploit:~
❯ jq -r '.findings[] as $f | ($f.widgets[]?, $f.table_findings[]?, $f.table_api_findings[]?) | select(any(.hints[]?; .category=="pii")) | [$f.target, (.name // (.table + (if .field then "." + .field else "" end))), .status, ((.record_count // .count // 0)|tostring), ((.sample_count // 0)|tostring), ([.hints[]? | select(.category=="pii") | .basis] | unique | join(","))] | @tsv' results.json
acme.service-now.com	ticket-attachments	exposed	847	10	observed
acme.service-now.com	sys_user	exposed	250	10	inferred

Получить заголовки образцов для находки:

root@kitploit:~
❯ jq -r '.findings[] | select(.target == "acme.service-now.com") | .widgets[] | select(.name == "ticket-attachments") | .samples[]?.title' results.json
Synthetic ticket attachment title
Example onboarding guide

Подсчитать общее количество раскрытых записей:

root@kitploit:~
❯ jq '[.findings[] | (.widgets[]? | select(.status == "exposed") | .record_count), (.table_findings[]? | select(.status == "exposed") | .count), (.table_api_findings[]? | select(.status == "exposed") | .record_count)] | add // 0' results.json
12896

Флаги

root@kitploit:~
TARGETS
  -target string          Single ServiceNow hostname
  -targets string         File with one hostname per line

OUTPUT
  -output string          JSON output file (default: stdout)
  -quiet                  Suppress informational output
  -version                Print version and exit

CONNECTION
  -proxy string           Proxy URL (http, https, socks5, socks5h)
  -timeout duration       HTTP timeout per request (default: 15s)
  -insecure               Skip TLS certificate verification
  -rate duration          Minimum interval between requests (default: unlimited)
  -vendor string          X-Vendor header for engagement tracking

SCANNING
  -concurrency int        Max parallel targets (default: 3)
  -table-concurrency int  Max parallel table probes per target (default: 5)
  -samples int            Sample records per exposed finding (default: 10)

WIDGET PROBING
  -widgets string         Comma-separated widget IDs (overrides defaults)
  -widgets-file string    JSON file with additional widget candidates

TABLE ENUMERATION
  -tables                 Enumerate via widget-simple-list (default: true)
  -tables-file string     JSON file with additional table/field candidates
  -table-api              Probe /api/now/table/ REST API

DISCOVERY
  -discover               Discover tables dynamically from the instance
  -discover-limit int     Max tables from discovery (default: 100)
  -discover-widgets-limit int
                          Max widgets from discovery (default: 50)
  -fingerprint            Detect ServiceNow version and release

Расширение покрытия

snowpick поставляется с 6 виджетами по умолчанию и 26 парами таблица/поле по умолчанию. Вы можете добавить свои, не изменяя код, с помощью JSON-файлов:

Кандидаты виджетов (-widgets-file):

root@kitploit:~
[{"id": "WIDGET_ID", "name": "custom-widget"}]

Кандидаты таблиц (-tables-file):

root@kitploit:~
[{"table": "TABLE_NAME", "field": "FIELD_NAME"}]

Они объединяются со встроенными значениями по умолчанию. Дубликаты удаляются автоматически.

Отказ от ответственности

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

Лицензия

MIT

Скачать инструмент