penlab


Namepenlab JSON
Version 1.0.0 PyPI version JSON
download
home_pagehttps://github.com/h3lls1nk1/penlab
SummaryCLI tool para gestión de proyectos de pentesting y ciberseguridad
upload_time2025-11-02 11:18:45
maintainerNone
docs_urlNone
authorh3lls1nk1
requires_python>=3.8
licenseMIT
keywords pentesting cli cybersecurity automation yaml templates
VCS
bugtrack_url
requirements click rich PyYAML jinja2
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # 🛡️ Penlab

**Penlab** es una herramienta de línea de comandos desarrollada en **Python** para gestionar y documentar proyectos de **pentesting** de forma organizada, rápida y personalizable.

Automatiza la creación de estructuras de directorios, archivos, notas y configuraciones específicas para cada tipo de proyecto, utilizando **templates YAML** completamente adaptables.

---

## 🚀 Características principales

- ⚙️ **Automatización completa** de la estructura inicial de un proyecto de pentesting.
- 🧩 **Templates YAML personalizables**, que definen directorios, archivos, contenido predefinido y variables dinámicas.
- 🗂️ **Gestión visual y ordenada** en consola mediante la librería [`Rich`](https://github.com/Textualize/rich).
- 🧠 **Enfoque en la documentación**: fomenta mantener registros claros y estructurados de cada evaluación.
- 🔄 **Configuración persistente**, que guarda tus preferencias y rutas de trabajo.
- 🐍 **CLI simple y modular**, desarrollada con [`Click`](https://click.palletsprojects.com/).

---

## 🔽 Instalación

> Requisitos previos:
> - Python 3.9 o superior  
> - pip instalado  
> - Git (opcional, si clonas el repositorio)


### Opción 1 — Instalar desde PyPI (recomendada)

```bash
pip install penlab
```

### Opción 2 — Instalar localmente

```bash
git clone https://github.com/h3lls1nk1/penlab.git
cd penlab
pip install -r requirements.txt
pip install .
```

## 🧩 Cómo funcionan las Templates en Penlab

Las **templates** son el corazón de Penlab.  
Definen **cómo se crea la estructura de un proyecto de pentesting**: carpetas, archivos, contenido y variables dinámicas.

Cada template está escrita en **YAML**, lo que la hace fácil de leer, editar y compartir.  
Cuando ejecutas un comando como:

```bash
penlab init htb-Blue --template htb --target 10.10.10.40
```

Penlab busca el archivo htb.yaml (dentro de tu carpeta de plantillas), lo interpreta, sustituye las variables ({{target}}, {{project_name}}, etc.) y genera automáticamente todo el árbol de directorios con sus archivos.

## 📄 Estructura básica de una template

Una template YAML se divide en metadatos y una estructura (structure) que define carpetas y archivos.

```bash
# htb.yaml
name: htb
version: 1.0
author: Penlab
description: >
  Template optimizada para maquinas de tipo Hack The Box (HTB).
tags:
  - htb
  - ctf
  - pentest
  - web
  - network

# Variables que pueden usarse en nombres y contenidos ({project-name}, {target}, etc.)
variables:
  project-name: "Nombre del proyecto (usado en archivos y rutas)"
  target: "IP o hostname del objetivo (ej: 10.10.10.10)"
  your-ip: "Tu IP atacante / VPN (ej: 10.10.14.2)"
  date: "Fecha de creación (se sustituye automáticamente)"
  author: "Autor del proyecto"

# Estructura del proyecto (dirs, subdirs y archivos)
structure:
  - dir: reconnaissance
    files:
      - name: README.md
        content: |
          # Recon - {project-name}
          **Target:** {target}
          **Fecha:** {date}
          **Autor:** {author}

          ## Notas de recon
          - Puertos abiertos:
          - Servicios detectados:
          - Observaciones iniciales:
      - name: notes.md
        content: |
          # Notes - {project-name}
          - Objetivo: {target}
          - Estado inicial: pendiente
    subdirs:
      - dir: scans
        files:
          - name: "{target}_nmap_initial.txt"
            content: |
              # Nmap inicial - {target}
              # Ejecutado: {date}
              # Escaneo por defecto (tcp)
          - name: "{target}_nmap_full.xml"
            content: ""
      - dir: enum
        files:
          - name: web_enum.md
            content: |
              # Web enumeration
              - fuzzer:
              - endpoints:
  - dir: exploitation
    files:
      - name: payloads
        content: ""
      - name: notes_exploit.md
        content: |
          # Exploit notes - {project-name}
          - Vector:
          - POC:
    subdirs:
      - dir: scripts
        files:
          - name: scan_http.sh
            content: |
              #!/usr/bin/env bash
              # Scan básico HTTP para {target}
              echo "Escaneando {target}..."
              nmap -sV -p- --min-rate 1000 {target} -oA scans/{target}_http
            executable: true
  - dir: post-exploitation
    files:
      - name: priv-esc.md
        content: |
          # Privilege Escalation - {project-name}
          - Técnicas probadas:
          - Resultado:
      - name: persistence.md
        content: |
          # Persistence notes
  - dir: reports
    files:
      - name: README.md
        content: |
          # Reportes - {project-name}
          Genera aquí resúmenes y entregables.
      - name: draft_report.md
        content: |
          # Borrador de informe - {project-name}
          ## Resumen ejecutivo
          ## Hallazgos
  - dir: tools
    files:
      - name: README.md
        content: |
          # Tools
          Guarda scripts y herramientas útiles aquí.
  - dir: misc
    files:
      - name: journal.md
        content: |
          # Diario de pentesting - {project-name}
          Fecha | Acción | Resultado

# Archivos globales que se copian al root del proyecto
global_files:
  - name: README.md
    content: |
      # {project-name}
      Proyecto HTB generado con Penlab.
      - Target: {target}
      - Autor: {author}
      - Fecha: {date}

  - name: .gitignore
    content: |
      # Node / Python / general
      __pycache__/
      *.pyc
      *.log
      scans/
      *.xml
      *.nmap
      .env

  - name: LICENSE
    content: |
      MIT License
      Copyright (c) {author}

  - name: notes.md
    content: |
      # Central notes
      Usa este archivo para apuntes rápidos.

# Fin del template

```

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/h3lls1nk1/penlab",
    "name": "penlab",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": null,
    "keywords": "pentesting cli cybersecurity automation yaml templates",
    "author": "h3lls1nk1",
    "author_email": "h3lls1nk1@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/1a/04/b111a62b76268b9ff1d8c9e1d6c4d519a2b9044115329cea6ffcfb8da50d/penlab-1.0.0.tar.gz",
    "platform": null,
    "description": "# \ud83d\udee1\ufe0f Penlab\r\n\r\n**Penlab** es una herramienta de l\u00ednea de comandos desarrollada en **Python** para gestionar y documentar proyectos de **pentesting** de forma organizada, r\u00e1pida y personalizable.\r\n\r\nAutomatiza la creaci\u00f3n de estructuras de directorios, archivos, notas y configuraciones espec\u00edficas para cada tipo de proyecto, utilizando **templates YAML** completamente adaptables.\r\n\r\n---\r\n\r\n## \ud83d\ude80 Caracter\u00edsticas principales\r\n\r\n- \u2699\ufe0f **Automatizaci\u00f3n completa** de la estructura inicial de un proyecto de pentesting.\r\n- \ud83e\udde9 **Templates YAML personalizables**, que definen directorios, archivos, contenido predefinido y variables din\u00e1micas.\r\n- \ud83d\uddc2\ufe0f **Gesti\u00f3n visual y ordenada** en consola mediante la librer\u00eda [`Rich`](https://github.com/Textualize/rich).\r\n- \ud83e\udde0 **Enfoque en la documentaci\u00f3n**: fomenta mantener registros claros y estructurados de cada evaluaci\u00f3n.\r\n- \ud83d\udd04 **Configuraci\u00f3n persistente**, que guarda tus preferencias y rutas de trabajo.\r\n- \ud83d\udc0d **CLI simple y modular**, desarrollada con [`Click`](https://click.palletsprojects.com/).\r\n\r\n---\r\n\r\n## \ud83d\udd3d Instalaci\u00f3n\r\n\r\n> Requisitos previos:\r\n> - Python 3.9 o superior  \r\n> - pip instalado  \r\n> - Git (opcional, si clonas el repositorio)\r\n\r\n\r\n### Opci\u00f3n 1 \u2014 Instalar desde PyPI (recomendada)\r\n\r\n```bash\r\npip install penlab\r\n```\r\n\r\n### Opci\u00f3n 2 \u2014 Instalar localmente\r\n\r\n```bash\r\ngit clone https://github.com/h3lls1nk1/penlab.git\r\ncd penlab\r\npip install -r requirements.txt\r\npip install .\r\n```\r\n\r\n## \ud83e\udde9 C\u00f3mo funcionan las Templates en Penlab\r\n\r\nLas **templates** son el coraz\u00f3n de Penlab.  \r\nDefinen **c\u00f3mo se crea la estructura de un proyecto de pentesting**: carpetas, archivos, contenido y variables din\u00e1micas.\r\n\r\nCada template est\u00e1 escrita en **YAML**, lo que la hace f\u00e1cil de leer, editar y compartir.  \r\nCuando ejecutas un comando como:\r\n\r\n```bash\r\npenlab init htb-Blue --template htb --target 10.10.10.40\r\n```\r\n\r\nPenlab busca el archivo htb.yaml (dentro de tu carpeta de plantillas), lo interpreta, sustituye las variables ({{target}}, {{project_name}}, etc.) y genera autom\u00e1ticamente todo el \u00e1rbol de directorios con sus archivos.\r\n\r\n## \ud83d\udcc4 Estructura b\u00e1sica de una template\r\n\r\nUna template YAML se divide en metadatos y una estructura (structure) que define carpetas y archivos.\r\n\r\n```bash\r\n# htb.yaml\r\nname: htb\r\nversion: 1.0\r\nauthor: Penlab\r\ndescription: >\r\n  Template optimizada para maquinas de tipo Hack The Box (HTB).\r\ntags:\r\n  - htb\r\n  - ctf\r\n  - pentest\r\n  - web\r\n  - network\r\n\r\n# Variables que pueden usarse en nombres y contenidos ({project-name}, {target}, etc.)\r\nvariables:\r\n  project-name: \"Nombre del proyecto (usado en archivos y rutas)\"\r\n  target: \"IP o hostname del objetivo (ej: 10.10.10.10)\"\r\n  your-ip: \"Tu IP atacante / VPN (ej: 10.10.14.2)\"\r\n  date: \"Fecha de creaci\u00f3n (se sustituye autom\u00e1ticamente)\"\r\n  author: \"Autor del proyecto\"\r\n\r\n# Estructura del proyecto (dirs, subdirs y archivos)\r\nstructure:\r\n  - dir: reconnaissance\r\n    files:\r\n      - name: README.md\r\n        content: |\r\n          # Recon - {project-name}\r\n          **Target:** {target}\r\n          **Fecha:** {date}\r\n          **Autor:** {author}\r\n\r\n          ## Notas de recon\r\n          - Puertos abiertos:\r\n          - Servicios detectados:\r\n          - Observaciones iniciales:\r\n      - name: notes.md\r\n        content: |\r\n          # Notes - {project-name}\r\n          - Objetivo: {target}\r\n          - Estado inicial: pendiente\r\n    subdirs:\r\n      - dir: scans\r\n        files:\r\n          - name: \"{target}_nmap_initial.txt\"\r\n            content: |\r\n              # Nmap inicial - {target}\r\n              # Ejecutado: {date}\r\n              # Escaneo por defecto (tcp)\r\n          - name: \"{target}_nmap_full.xml\"\r\n            content: \"\"\r\n      - dir: enum\r\n        files:\r\n          - name: web_enum.md\r\n            content: |\r\n              # Web enumeration\r\n              - fuzzer:\r\n              - endpoints:\r\n  - dir: exploitation\r\n    files:\r\n      - name: payloads\r\n        content: \"\"\r\n      - name: notes_exploit.md\r\n        content: |\r\n          # Exploit notes - {project-name}\r\n          - Vector:\r\n          - POC:\r\n    subdirs:\r\n      - dir: scripts\r\n        files:\r\n          - name: scan_http.sh\r\n            content: |\r\n              #!/usr/bin/env bash\r\n              # Scan b\u00e1sico HTTP para {target}\r\n              echo \"Escaneando {target}...\"\r\n              nmap -sV -p- --min-rate 1000 {target} -oA scans/{target}_http\r\n            executable: true\r\n  - dir: post-exploitation\r\n    files:\r\n      - name: priv-esc.md\r\n        content: |\r\n          # Privilege Escalation - {project-name}\r\n          - T\u00e9cnicas probadas:\r\n          - Resultado:\r\n      - name: persistence.md\r\n        content: |\r\n          # Persistence notes\r\n  - dir: reports\r\n    files:\r\n      - name: README.md\r\n        content: |\r\n          # Reportes - {project-name}\r\n          Genera aqu\u00ed res\u00famenes y entregables.\r\n      - name: draft_report.md\r\n        content: |\r\n          # Borrador de informe - {project-name}\r\n          ## Resumen ejecutivo\r\n          ## Hallazgos\r\n  - dir: tools\r\n    files:\r\n      - name: README.md\r\n        content: |\r\n          # Tools\r\n          Guarda scripts y herramientas \u00fatiles aqu\u00ed.\r\n  - dir: misc\r\n    files:\r\n      - name: journal.md\r\n        content: |\r\n          # Diario de pentesting - {project-name}\r\n          Fecha | Acci\u00f3n | Resultado\r\n\r\n# Archivos globales que se copian al root del proyecto\r\nglobal_files:\r\n  - name: README.md\r\n    content: |\r\n      # {project-name}\r\n      Proyecto HTB generado con Penlab.\r\n      - Target: {target}\r\n      - Autor: {author}\r\n      - Fecha: {date}\r\n\r\n  - name: .gitignore\r\n    content: |\r\n      # Node / Python / general\r\n      __pycache__/\r\n      *.pyc\r\n      *.log\r\n      scans/\r\n      *.xml\r\n      *.nmap\r\n      .env\r\n\r\n  - name: LICENSE\r\n    content: |\r\n      MIT License\r\n      Copyright (c) {author}\r\n\r\n  - name: notes.md\r\n    content: |\r\n      # Central notes\r\n      Usa este archivo para apuntes r\u00e1pidos.\r\n\r\n# Fin del template\r\n\r\n```\r\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "CLI tool para gesti\u00f3n de proyectos de pentesting y ciberseguridad",
    "version": "1.0.0",
    "project_urls": {
        "Homepage": "https://github.com/h3lls1nk1/penlab"
    },
    "split_keywords": [
        "pentesting",
        "cli",
        "cybersecurity",
        "automation",
        "yaml",
        "templates"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "a798b1c3554ad02d51bc3b18dc6fb88ca3f47a5c740427d0c51ffaf54a2a90a7",
                "md5": "a1a1d8c4f6c9f3f751a5d79446d38754",
                "sha256": "84f44a37e1a3b80207f3c898577ad28228b8426b271316a05c63429a9061f090"
            },
            "downloads": -1,
            "filename": "penlab-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "a1a1d8c4f6c9f3f751a5d79446d38754",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 39790,
            "upload_time": "2025-11-02T11:18:44",
            "upload_time_iso_8601": "2025-11-02T11:18:44.201910Z",
            "url": "https://files.pythonhosted.org/packages/a7/98/b1c3554ad02d51bc3b18dc6fb88ca3f47a5c740427d0c51ffaf54a2a90a7/penlab-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "1a04b111a62b76268b9ff1d8c9e1d6c4d519a2b9044115329cea6ffcfb8da50d",
                "md5": "d061ba7e7bf1357ef6573ee54fe779f0",
                "sha256": "c01592966895b741e7642e4bd3e12bac51e825133de98f435c6c94c6c331eb00"
            },
            "downloads": -1,
            "filename": "penlab-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "d061ba7e7bf1357ef6573ee54fe779f0",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 35929,
            "upload_time": "2025-11-02T11:18:45",
            "upload_time_iso_8601": "2025-11-02T11:18:45.548998Z",
            "url": "https://files.pythonhosted.org/packages/1a/04/b111a62b76268b9ff1d8c9e1d6c4d519a2b9044115329cea6ffcfb8da50d/penlab-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-11-02 11:18:45",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "h3lls1nk1",
    "github_project": "penlab",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "click",
            "specs": [
                [
                    ">=",
                    "8.0.0"
                ]
            ]
        },
        {
            "name": "rich",
            "specs": [
                [
                    ">=",
                    "13.0.0"
                ]
            ]
        },
        {
            "name": "PyYAML",
            "specs": [
                [
                    ">=",
                    "6.0"
                ]
            ]
        },
        {
            "name": "jinja2",
            "specs": [
                [
                    ">=",
                    "3.0.0"
                ]
            ]
        }
    ],
    "lcname": "penlab"
}
        
Elapsed time: 2.71445s