Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
limeyard — Laboratorio Docker deliberatamente vulnerabile con un'infrastruttura DNS instradabile e chiavi di risposta leggibili da macchina per ogni target, valutando localmente precisione, richiamo e ambito dello scanner. | Kitploit
Strumenti/GitHubGitHub/clickswave/limeyard
Scanner di VulnerabilitàSicurezza dei ContenitoriMappatura della ReteAnalisi delle VulnerabilitàEnumerazione DNS e SottodominiVirtualizzazione per la SicurezzaSicurezza WebPenetration TestingDevSecOpsApprendimento e FormazioneLab e Pratica
1144 giorni faNon ancora revisionato
GitHub
clickswave/limeyard

limeyard

Laboratorio Docker deliberatamente vulnerabile con un'infrastruttura DNS instradabile e chiavi di risposta leggibili da macchina per ogni target, valutando localmente precisione, richiamo e ambito dello scanner.

Vedi Repository

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

limeyard

Un laboratorio di security testing. Una flotta di target deliberatamente vulnerabili, un'infrastruttura di rete instradabile con DNS autoritativo per l'asset discovery da enumerare, una answer key leggibile dalla macchina per ogni target e un pannello di controllo per gestire tutto.

Tutto qui è deliberatamente vulnerabile. Solo test locale. Non esporlo a Internet o a una rete non attendibile. Le porte pubblicate si legano a 127.0.0.1; i target del lab non si legano a nulla.

Il nostro scanner ottiene RCE all'interno di questi container di proposito, quindi il container è trattato come un confine di sicurezza: ogni immagine è fissata tramite digest, ogni servizio rimuove tutte le capability e ne riaggiunge un minimo, e ./lime audit lo impone. Leggi SECURITY.md prima del primo avvio, inclusa la parte su cosa l'isolamento dei container non copre.

Il pannello di controllo di limeyard, che elenca ogni target con il suo tipo, stato, indirizzo e upstream

Il pannello di controllo su http://127.0.0.1:7000, che mostra il lab in esecuzione.

limeyard era vuln_apps. È stato rinominato perché ha smesso di essere una cartella di applicazioni: ora contiene servizi nudi, una zona DNS, una coppia di WAF, un target di precisione e fixture APK, nessuno dei quali è un'app.

Perché è cambiato

La vecchia flotta totalizzava 9 su 9, zero mancati, zero falsi positivi. Un benchmark che non può fallire non può rilevare una regressione. Tre cose erano strutturalmente sbagliate:

  • Tre dei cinque motori non avevano ground truth. Ogni app era 127.0.0.1:70xx, quindi l'enumerazione dei sottodomini non aveva nulla da enumerare, il port scanning riceveva la sua risposta e il service fingerprinting non vedeva mai un demone non-HTTP.
  • 11 dei 101 template di detection erano stati attivati. Gli altri 90 venivano distribuiti senza alcun tipo di target live.
  • Nulla misurava la precisione. Ogni target era genuinamente vulnerabile, quindi "zero falsi positivi" era non falsificabile.

Avvio rapido

Ti servono Docker (con il plugin compose) e git. Nient'altro.

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

Questo clona il lab in ./limeyard, scrive il suo .env con un nuovo API token, compila e avvia il control plane, poi chiede cosa eseguire. Prima che qualsiasi cosa parta mostra quanto costa la selezione, misurato a riposo sulla macchina di riferimento, rispetto a quanto la tua macchina ha libero:

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]

Non interattivo: curl ... | bash -s -- --light --yes (oppure --all, --none, --pick dvwa,juice-shop,estate). Metti il checkout altrove con LIMEYARD_DIR=/path.

Il pannello è poi su http://127.0.0.1:7000, e le stesse cose a mano:

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

A mano, senza l'installer:

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

Ogni manifest porta un blocco resources misurato (container, RAM a riposo, disco delle immagini, CPU a riposo). Il wizard, la striscia di selezione del pannello e la pagina di ogni target sommano da lì, quindi la stima è la stessa ovunque.

Branch

Due, e solo due.

  • main è ciò che l'installer clona e ciò che ottieni se non fai nulla. Si muove tramite pull request, mai tramite push diretto.
  • dev è il branch predefinito ed è dove atterra il lavoro. Apri le pull request contro di esso.

Concetti

targetuna cosa sotto test, di un kind dichiarato. Possiede un file compose, un setup opzionale e la propria answer key. Viene eseguito come proprio progetto compose isolato, quindi due target che usano Postgres non ne condividono mai uno
scenariodiversi target collegati in una topologia di rete con DNS autoritativo. È ciò contro cui viene valutata l'asset discovery
truthla answer key leggibile dalla macchina. Vedi truth/schema.md
doctorun unico elenco di controlli con un verdetto ciascuno: ambiente, attribuzione, supply chain, hardening. I controlli con un rimedio inequivocabile portano un fix con un clic nel pannello (/doctor) e --fix sulla CLI: crea reti, recupera disco, fissa immagini, scarica sorgenti, ri-verifica i target in esecuzione, riscrive i bind fuori dal loopback. Attribuzione, conflitti di porte e hardening richiedono una persona

Tipi: web api bench cve service estate edge control mobile.

Struttura

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

Pannello di controllo

docker compose up -d avvia due container e nient'altro: limeyard_control (il demone limed, che detiene il socket Docker) e limeyard_ui (il pannello SvelteKit). Entrambi si legano solo al loopback. Il pannello è su http://127.0.0.1:7000 e l'API grezza su http://127.0.0.1:7099. Entrambi richiedono .env, e LIME_TOKEN al suo interno è obbligatorio: il pannello detiene il token lato server e il browser non lo vede mai.

paginaa cosa serve
Targetsogni target, filtra per tipo e stato, ordina, selezione multipla con Start, Stop, Restart. Clicca una riga per il target
Targetfatti (indirizzo, credenziali, stack, upstream, verifica, digest delle immagini), il log live e la answer key con i suoi negativi
Scenariosl'estate: resolver, zone, subnet e una tabella degli host con lo stato per container. Avvia, ferma, riavvia
Scorecardl'ultima esecuzione con i delta, copertura per classe e per target, id mancati, uno storico consultabile e un diff tra due esecuzioni
Portscosa si lega su localhost e cosa esiste solo sul bridge del lab
Doctorun unico elenco di controlli con un verdetto ciascuno. Fix e Fix all mostrano prima i comandi esatti e le modifiche ai file, calcolati dal lab così com'è, e li eseguono alla conferma. Un fix che lascia il suo controllo fallito lo dice
Creditschi ha scritto ogni target e sotto quale licenza

Il pannello si aggiorna da solo: limed trasmette le transizioni di stato via SSE, quindi un target avviato dalla CLI compare senza refresh. L'intestazione porta la CPU, la RAM e il disco libero dell'host dallo stesso stream, colorati solo quando vale la pena notarli. Ogni tabella si ordina cliccando l'intestazione di una colonna; un secondo clic inverte la direzione.

Dopo una modifica al pannello o al demone, ricompila la coppia:

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

Per lavorare sul pannello contro un demone in esecuzione senza ricompilare l'immagine:

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

API

Ogni chiamata tranne /api/health richiede 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

Reti

Tre livelli, perché uno solo era il problema originale.

  • lime-web bridge. Target web e API, pubblicati su 127.0.0.1:70xx.
  • lime-lab bridge, 10.66.0.0/16, IP statici, nessun binding sull'host. Uno scanner si unisce a questa rete come container e vede una vera subnet con veri host e vere porte invece di un elenco di porte su loopback.
  • lime-edge il livello WAF, con l'origin raggiungibile ma assente dal DNS.

Il DNS è BIND autoritativo su zone .test (la RFC 6761 la riserva). Gli alias di rete Docker deliberatamente non sono la fonte di verità: non compaiono mai in un zone transfer e farebbero divergere la topologia dalla answer key.

Porte

rangeuso
7000la UI
7099limed API
7001-7099target web e api
7100-7199suite di benchmark
7200-7299lab CVE
7300-7399target edge e control
5353DNS del lab
nessunatarget service ed estate, solo indirizzi lime-lab

Scoring

Ogni target distribuisce un truth.yml. Lo scorer trasforma i finding in precision, recall e F1, per target e per classe:

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

Si contano tre cose, non una. Recall: abbiamo trovato ciò che c'è. Precision: abbiamo evitato di segnalare ciò che non c'è, misurato rispetto alle voci negative che ogni answer key porta. Scope: ciò che correttamente non abbiamo tentato, registrato così nessuno lo rimette in discussione ogni trimestre.

Il target mirage esiste solo per il secondo. Nulla in esso è vulnerabile e tutto in esso sembra esserlo, quindi qualsiasi finding contro di esso è un falso positivo per costruzione.

Contribuire

CONTRIBUTING.md contiene tutto: cos'è di solito un contributo, le invarianti che ./lime audit impone e perché una correzione a una answer key vale più qui di una nuova funzionalità. La versione breve delle regole è qui sotto. Tutti coloro che partecipano sono tenuti al code of conduct.

Aggiungere un target

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

Regole che mantengono il lab pulito:

  • Lega solo la porta del target, a 127.0.0.1.
  • I target a container singolo si uniscono solo a [lime-web]. Non aggiungere una rete per progetto: troppe reti e Docker esaurisce il pool di indirizzi.
  • I target con un database si uniscono a [default, lime-web] e mettono il database su [default] soltanto. Ogni target ottiene il proprio servizio database e volume.
  • I target che esistono per essere scoperti anziché navigati si uniscono a [lime-lab] con un IP statico e non pubblicano alcuna porta sull'host.
  • upstream è obbligatorio. lime doctor fa fallire un target senza di esso e il manager rifiuta di registrarne uno. Vedi sotto.
  • limeyard non include sorgenti di terze parti. Metti repo: e compose: nel manifest e il sorgente viene scaricato a runtime in <target>/src.
  • Registra quanto costa. Avvialo, lascialo assestare e ./lime measure <slug> stampa il blocco resources da incollare. L'installer e il pannello sommano questi per avvisare qualcuno prima che lo avvii, quindi una stima qui è una bugia là.

Fiducia e isolamento

I target sono software deliberatamente vulnerabile di altre persone, quindi la provenienza è registrata anziché presunta, e il runtime è vincolato anziché fidato. SECURITY.md ha il quadro completo; la versione breve:

  • Ogni immagine è fissata tramite digest, non un tag mobile, al digest che è stato scaricato e testato qui. ./lime pin segnala la deriva.
  • Gli editori sono documentati per immagine: Docker Official Images, account di organizzazioni di progetto (OWASP, ISC, Traefik, Prometheus) o il namespace dell'autore stesso. I due anelli più deboli, raesene/bwapp (archiviato, ultima ricostruzione 2022, nessuna licenza) e delfer/alpine-ftp-server (un singolo individuo), sono indicati come tali.
  • Ogni servizio viene eseguito con no-new-privileges, cap_drop: ALL più un minimo cap_add per immagine, un tetto di pid e un tetto di memoria. I livelli database stanno su reti internal: true senza route verso l'esterno.
  • limed detiene il socket Docker, che è root sull'host, quindi richiede un segreto condiviso su ogni chiamata. Un target compromesso può raggiungerlo e non apprendere nulla.
  • ./lime audit fallisce su privileged, host networking, un mount del socket in un target, un bind fuori dal loopback, un'immagine non fissata o un token mancante.

Nulla qui difende da un container escape a livello di kernel. Per quello, usa una VM usa e getta.

Attribuzione

Quasi tutto qui è stato scritto da qualcun altro, e diversi target non dichiarano alcuna licenza. Quindi accreditare l'autore è un gate obbligatorio, non una convenzione:

  • target.yml porta un blocco upstream obbligatorio: autore, repo, licenza e la data in cui abbiamo verificato l'ultima volta che compila. packager registra la persona che ha containerizzato qualcosa quando differisce da chi l'ha scritto.
  • Ogni scheda della dashboard mostra l'autore sotto il nome del target, collegato alla fonte, con la licenza accanto. Una licenza none declared viene resa come un avviso, che è anche il segnale di non-ridistribuzione.
  • La vista di dettaglio di ogni target si apre con un blocco di credito, sopra la lista delle vulnerabilità, con la nostra answer key chiaramente separata dalla documentazione di upstream.
  • /credits nella UI e ./lime credits elencano ogni target, autore e licenza. ./lime credits --markdown rigenera la sezione qui sotto.

Crediti

limeyard esegue il lavoro di altre persone. Ogni target e scenario qui sotto è stato costruito da qualcun altro a meno che non dica Clickswave.

api

targetautorelicenzafonte
OWASP crAPIOWASP crAPI projectApache-2.0repo
DVGADolev FarhiMITrepo
VAmPIerev0sMITrepo

bench

targetautorelicenzafonte
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

targetautorelicenzafonte
mirageClickswaveMITrepo

cve

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

edge

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

mobile

targetautorelicenzafonte
AndroGoatSatish Patnayaknone declaredrepo

scenario

scenarioautorelicenzafonte
estateClickswaveMIT-

service

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

web

targetautorelicenzafonte
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
Scarica lo strumento