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

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

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

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

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

Категории

Все категории
Loading categories
limeyard — Намеренно уязвимая лаборатория Docker с маршрутизируемой DNS-инфраструктурой и машиночитаемыми ключами ответов для каждой цели, локально оценивающая точность, полноту и охват сканера. | Kitploit
Инструменты/GitHubGitHub/clickswave/limeyard
Сканеры уязвимостейБезопасность контейнеровКартирование сетиАнализ уязвимостейПеречисление DNS и поддоменовВиртуализация для безопасностиВеб-безопасностьТестирование на ПроникновениеDevSecOpsОбучение и ОбразованиеЛаборатории и Практика
1144 дней назадЕщё не проверено
GitHub
clickswave/limeyard

limeyard

Намеренно уязвимая лаборатория Docker с маршрутизируемой DNS-инфраструктурой и машиночитаемыми ключами ответов для каждой цели, локально оценивающая точность, полноту и охват сканера.

Репозиторий

Популярное

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

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

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

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

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

limeyard

Лаборатория для тестирования безопасности. Парк намеренно уязвимых целей, маршрутизируемая сетевая инфраструктура с авторитетным DNS для обнаружения активов, машиночитаемый ключ ответов для каждой цели и панель управления для всего этого.

Всё здесь намеренно уязвимо. Только локальное тестирование. Не выставляйте это в интернет или в недоверенную сеть. Публикуемые порты привязаны к 127.0.0.1; цели лаборатории не привязаны ни к чему вообще.

Наш собственный сканер намеренно получает RCE внутри этих контейнеров, поэтому контейнер рассматривается как граница безопасности: каждый образ закреплён по дайджесту, каждый сервис сбрасывает все capabilities и добавляет обратно минимум, и ./lime audit обеспечивает это. Прочитайте SECURITY.md перед первым запуском, включая часть о том, что изоляция контейнеров не покрывает.

Панель управления limeyard со списком всех целей с их типом, состоянием, адресом и upstream

Панель управления на http://127.0.0.1:7000, показывающая лабораторию в работе.

limeyard раньше назывался vuln_apps. Он был переименован, потому что перестал быть папкой приложений: теперь он содержит голые сервисы, зону DNS, пару WAF, точную цель и APK-фикстуры, ни одна из которых не является приложением.

Почему это изменилось

Старый парк показал 9 из 9, ноль пропусков, ноль ложных срабатываний. Бенчмарк, который не может провалиться, не может обнаружить регрессию. Три вещи были структурно неправильны:

  • У трёх из пяти движков не было ground truth. Каждое приложение было 127.0.0.1:70xx, поэтому перечислению поддоменов нечего было перечислять, сканированию портов выдавался его ответ, а фингерпринтинг сервисов никогда не видел не-HTTP демон.
  • 11 из 101 шаблона обнаружения когда-либо срабатывали. Остальные 90 поставлялись без какой-либо живой цели.
  • Ничто не измеряло точность. Каждая цель была действительно уязвима, поэтому «ноль ложных срабатываний» было неопровержимо.

Быстрый старт

Вам нужен Docker (с плагином compose) и git. Больше ничего.

root@kitploit:~
curl -fsSL https://raw.githubusercontent.com/clickswave/limeyard/main/install.sh | bash

Это клонирует лабораторию в ./limeyard, записывает её .env со свежим API токеном, собирает и запускает control plane, затем спрашивает, что запускать. Прежде чем что-либо запустится, он показывает, сколько стоит выбор, измеренный в простое на эталонной машине, против того, что свободно на вашей машине:

root@kitploit:~
This selection, idle, on the box it was measured on:
  17 targets, 1 scenarios, 45 containers
  RAM  about 2.9 GB resident  (host has 22.4 GB available)
  disk about 11.0 GB of images to pull  (host has 111 GB free)
  CPU  near idle once up (3% of one core); pulling and first boots are the busy part
Start it? [y/N]

Неинтерактивно: curl ... | bash -s -- --light --yes (или --all, --none, --pick dvwa,juice-shop,estate). Разместите checkout в другом месте с LIMEYARD_DIR=/path.

Затем панель находится на http://127.0.0.1:7000, и то же самое вручную:

root@kitploit:~
./lime setup                  # the wizard again, any time
./lime start --all            # every light target
./lime start crapi --heavy    # a heavy one, explicitly
./lime scenario-up estate     # the network estate: DNS, vhosts, services
./lime status                 # what is up
./lime stop --all --heavy     # everything down; images and volumes stay
./lime credits                # who wrote each target, and under what licence
./lime doctor                 # environment, attribution and disk checks
./lime doctor --fix           # apply every check's automatic remedy, then re-check
./lime audit                  # container hardening + supply chain invariants
./lime pin                    # report image drift against the registry

Вручную, без установщика:

root@kitploit:~
git clone https://github.com/clickswave/limeyard && cd limeyard
cp .env.example .env
echo "LIMEYARD_DIR=$PWD"                 >> .env
echo "LIME_TOKEN=$(openssl rand -hex 24)" >> .env   # required, see SECURITY.md
docker compose up -d --build  # control plane + UI on http://127.0.0.1:7000
./lime setup

Каждый манифест несёт измеренный блок resources (контейнеры, RAM в простое, диск образов, CPU в простое). Мастер, полоса выбора панели и страница каждой цели суммируют из него, поэтому оценка везде одинакова.

Ветки

Две, и только две.

  • main — это то, что клонирует установщик и что вы получите, если ничего не делаете. Она движется через pull request, никогда через прямой push.
  • dev — ветка по умолчанию и место, куда попадает работа. Открывайте pull request против неё.

Концепции

targetодна вещь под тестом, объявленного kind. Владеет compose-файлом, опциональной настройкой и своим собственным ключом ответов. Запускается как собственный изолированный compose-проект, поэтому две цели, использующие Postgres, никогда не делят один
scenarioнесколько целей, связанных в сетевую топологию с авторитетным DNS. То, против чего оценивается обнаружение активов
truthмашиночитаемый ключ ответов. См. truth/schema.md
doctorодин список проверок с вердиктом для каждой: окружение, атрибуция, цепочка поставок, харденинг. Проверки с однозначным исправлением несут исправление в один клик в панели (/doctor) и --fix в CLI: создать сети, освободить диск, закрепить образы, получить исходники, перепроверить запущенные цели, переписать привязки вне loopback. Атрибуция, конфликты портов и харденинг требуют человека

Типы: web api bench cve service estate edge control mobile.

Структура

root@kitploit:~
targets/<kind>/<slug>/     target.yml, compose.yml, setup.sh, truth.yml
scenarios/<slug>/          scenario.yml, compose.yml, zones/
control/limed/             the daemon: CLI + HTTP API + scorer
control/ui/                the SvelteKit control panel
truth/                     the contract, and dated scorecards

Панель управления

docker compose up -d запускает два контейнера и ничего больше: limeyard_control (демон limed, держащий Docker socket) и limeyard_ui (панель SvelteKit). Оба привязаны только к loopback. Панель находится на http://127.0.0.1:7000, а сырой API на http://127.0.0.1:7099. Оба нуждаются в .env, и LIME_TOKEN в нём обязателен: панель держит токен на стороне сервера, и браузер никогда его не видит.

страницадля чего она
Targetsкаждая цель, фильтр по типу и состоянию, сортировка, множественный выбор с Start, Stop, Restart. Клик по строке открывает цель
Targetфакты (адрес, учётные данные, стек, upstream, верификация, дайджесты образов), живой лог и ключ ответов с его негативами
Scenariosestate: резолвер, зоны, подсеть и таблица хостов с состоянием каждого контейнера. Поднять, опустить, перезапустить
Scorecardпоследний прогон с дельтами, покрытие по классам и по целям, пропущенные id, история, которую можно просмотреть, и diff двух прогонов
Portsчто привязано на localhost и что существует только на лабораторном бридже
Doctorодин список проверок с вердиктом для каждой. Fix и Fix all сначала показывают точные команды и правки файлов, вычисленные из лаборатории как она есть, и выполняют их после подтверждения. Исправление, оставляющее свою проверку проваленной, сообщает об этом
Creditsкто написал каждую цель и под какой лицензией

Панель обновляет себя сама: limed стримит переходы состояний через SSE, поэтому цель, запущенная из CLI, появляется без обновления. Заголовок несёт CPU, RAM и свободный диск хоста из того же потока, окрашиваясь только когда на них стоит обратить внимание. Каждая таблица сортируется по клику на заголовок столбца; второй клик меняет направление.

После изменения панели или демона пересоберите пару:

root@kitploit:~
docker compose up -d --build

Чтобы работать над панелью против запущенного демона без пересборки образа:

root@kitploit:~
cd control/ui && npm install
LIMED_URL=http://127.0.0.1:7099 LIME_TOKEN=<from .env> npm run dev   # :7000

API

Каждый вызов, кроме /api/health, требует X-Lime-Token.

root@kitploit:~
GET  /api/targets                    list, with state and attribution
GET  /api/targets/<slug>             plus truth, images, lab addresses
GET  /api/targets/<slug>/logs        SSE, docker compose logs -f
POST /api/targets/<slug>/<action>    start | stop | restart | pull | setup
POST /api/targets/bulk               {action, slugs}: a pool of three, per-slug refusals
GET  /api/scenarios                  with per-host container state
POST /api/scenarios/<slug>/<action>  up | down | restart
GET  /api/scorecards                 newest first, by_class carries false positives
GET  /api/scorecards/<id>            one card
POST /api/score                      {tool, findings, save?, targets?}
GET  /api/doctor                     checks with verdict, reason, value, items, fix
POST /api/doctor/fix                 {ids}: those checks, or every fixable one when empty
GET  /api/ports  /api/credits  /api/truth  /api/status
GET  /api/events                     SSE: state, scenario, tick

Сети

Три уровня, потому что один был исходной проблемой.

  • lime-web bridge. Web и API цели, публикуемые на 127.0.0.1:70xx.
  • lime-lab bridge, 10.66.0.0/16, статические IP, без привязки к хосту. Сканер присоединяется к этой сети как контейнер и видит реальную подсеть с реальными хостами и реальными портами вместо списка портов loopback.
  • lime-edge уровень WAF, с достижимым origin, но отсутствующим в DNS.

DNS — это авторитетный BIND на зонах .test (RFC 6761 резервирует его). Сетевые алиасы Docker намеренно не являются источником истины: они никогда не появляются в zone transfer и заставили бы топологию расходиться с ключом ответов.

Порты

диапазониспользование
7000UI
7099limed API
7001-7099web и api цели
7100-7199наборы бенчмарков
7200-7299CVE лаборатории
7300-7399edge и control цели
5353лабораторный DNS
нетservice и estate цели, только адреса lime-lab

Оценка

Каждая цель поставляет truth.yml. Скорер превращает находки в precision, recall и F1, по цели и по классу:

root@kitploit:~
curl -s -XPOST localhost:7099/api/score -H 'Content-Type: application/json' \
  -d '{"tool":"crossfyre","save":true,"findings":[...]}'

Считаются три вещи, а не одна. Recall: нашли ли мы то, что есть. Precision: избежали ли мы сообщения о том, чего нет, измеряется против записей negative, которые несёт каждый ключ ответов. Scope: то, что мы корректно не пытались сделать, записано, чтобы никто не пересматривал это каждый квартал.

Цель mirage существует только для второй. Ничто в ней не уязвимо, и всё в ней выглядит так, будто уязвимо, поэтому любая находка против неё — ложное срабатывание по построению.

Участие

CONTRIBUTING.md содержит всё это: чем обычно является вклад, инварианты, которые обеспечивает ./lime audit, и почему исправление ключа ответов здесь ценнее новой функции. Краткая версия правил ниже. Все участвующие связаны кодексом поведения.

Добавление цели

root@kitploit:~
targets/<kind>/<slug>/
  target.yml    manifest, including a REQUIRED upstream block
  compose.yml   the containers. 127.0.0.1 binds only
  setup.sh      optional one-time init, run after start
  truth.yml     the answer key

Правила, которые держат лабораторию чистой:

  • Привязывайте только порт цели, к 127.0.0.1.
  • Одноконтейнерные цели присоединяются только к [lime-web]. Не добавляйте сеть на проект: слишком много сетей, и у Docker заканчивается пул адресов.
  • Цели с базой данных присоединяются к [default, lime-web] и помещают базу данных на [default] только. Каждая цель получает свой собственный сервис базы данных и том.
  • Цели, которые существуют, чтобы быть обнаруженными, а не просмотренными, присоединяются к [lime-lab] со статическим IP и не публикуют порт хоста.
  • upstream обязателен. lime doctor проваливает цель без него, и менеджер отказывается регистрировать такую. См. ниже.
  • limeyard не вендорит сторонний исходный код. Поместите repo: и compose: в манифест, и исходники будут получены во время выполнения в <target>/src вместо этого.
  • Записывайте, сколько это стоит. Запустите, дайте устояться, и ./lime measure <slug> выведет блок resources для вставки. Установщик и панель суммируют их, чтобы предупредить кого-то перед запуском, поэтому догадка здесь — ложь там.

Доверие и изоляция

Цели — это намеренно уязвимое программное обеспечение других людей, поэтому происхождение записывается, а не предполагается, и среда выполнения ограничивается, а не считается доверенной. SECURITY.md содержит полную картину; краткая версия:

  • Каждый образ закреплён по дайджесту, а не плавающим тегом, по дайджесту, который был получен и протестирован здесь. ./lime pin сообщает о дрейфе.
  • Издатели документированы для каждого образа: Docker Official Images, аккаунты организаций проектов (OWASP, ISC, Traefik, Prometheus) или собственное пространство имён автора. Два самых слабых звена, raesene/bwapp (архивирован, последний раз пересобран в 2022, без лицензии) и delfer/alpine-ftp-server (один человек), названы как таковые.
  • Каждый сервис работает с no-new-privileges, cap_drop: ALL плюс минимальный для образа cap_add, потолком pid и потолком памяти. Уровни баз данных находятся на сетях internal: true без маршрута наружу.
  • limed держит Docker socket, который является root на хосте, поэтому он требует общего секрета на каждом вызове. Взломанная цель может достучаться до него и ничего не узнать.
  • ./lime audit проваливается на privileged, host networking, монтировании сокета в цели, привязке вне loopback, незакреплённом образе или отсутствующем токене.

Ничто здесь не защищает от побега из контейнера на уровне ядра. Для этого используйте одноразовую VM.

Атрибуция

Почти всё здесь было написано кем-то другим, и несколько целей не объявляют никакой лицензии вообще. Поэтому указание автора — жёсткое требование, а не соглашение:

  • target.yml несёт обязательный блок upstream: автор, репозиторий, лицензия и дата, когда мы последний раз проверяли, что это собирается. packager записывает человека, который контейнеризировал что-то, когда это отличается от того, кто это написал.
  • Каждая карточка дашборда показывает автора под именем цели, со ссылкой на источник, с лицензией рядом. Лицензия none declared отображается как предупреждение, что также является сигналом не распространять.
  • Детальный вид каждой цели открывается блоком кредитов, выше списка уязвимостей, с нашим ключом ответов, чётко отделённым от собственных документов upstream.
  • /credits в UI и ./lime credits перечисляют каждую цель, автора и лицензию. ./lime credits --markdown регенерирует раздел ниже.

Кредиты

limeyard запускает работу других людей. Каждая цель и сценарий ниже были созданы кем-то другим, если не указано Clickswave.

api

targetauthorlicencesource
OWASP crAPIOWASP crAPI projectApache-2.0repo
DVGADolev FarhiMITrepo
VAmPIerev0sMITrepo

bench

targetauthorlicencesource
CrawlgroundZAP project (zaproxy)Apache-2.0repo
Security Crawl MazeGoogleApache-2.0repo
OWASP VulnerableAppSasanLabs (OWASP VulnerableApp project)Apache-2.0repo
XSSMazehahwul (author of dalfox)MITrepo

control

targetauthorlicencesource
mirageClickswaveMITrepo

cve

targetauthorlicencesource
Log4Shell labChristophe Tafani-Dereeper (christophetd)Apache-2.0repo

edge

targetauthorlicencesource
ModSecurity CRS pairOWASP Core Rule Set project (coreruleset)Apache-2.0repo

mobile

targetauthorlicencesource
AndroGoatSatish Patnayaknone declaredrepo

scenario

scenarioauthorlicencesource
estateClickswaveMIT-

service

targetauthorlicencesource
Open servicesClickswave (composition of upstream official images)mixed, per-image-

web

targetauthorlicencesource
bWAPPMalik Mesellem (pkg: Rory McCune (raesene))none declaredrepo
DVWARobin Wood (digininja)GPL-3.0repo
FaultLine ISPClickswaveMITrepo
OWASP Juice ShopBjoern Kimminich (OWASP Juice Shop project)MITrepo
OWASP Mutillidae IIJeremy Druin (webpwnized), OWASP Mutillidae IIGPL-3.0repo
OWASP RailsGoatOWASP RailsGoat projectMITrepo
OWASP WebGoat + WebWolfOWASP WebGoat projectGPL-2.0repo
Скачать инструмент