Come elencare tutti i file con solo il percorso del file arbitrario letto, ma nessun elenco di directory né sudo?

8

Ho trovato una vulnerabilità path traversal che mi consente di leggere qualsiasi percorso sul server che non richiede sudo .

Per sfruttare appieno questo aspetto, vorrei sapere quali file esistono in ogni directory in modo che io possa leggerli.

In altre parole, posso fare cat /any/path , ma non ls /any/pathsudo cat /any/path . Quindi, come posso trovare quanti più file possibile a cat (senza provare tutte le possibilità ...)

Leggendo file speciali come dev o proc, o i file presenti sulla maggior parte delle distribuzioni Linux è OK. Ad esempio, se potessi leggere locate s /var/lib/mlocate/mlocate.db database il problema sarebbe risolto: ma non posso perché non ho sudo .

Se non esiste una risposta ideale che elenchi file tutti , sono interessato anche a risposte che elencano un numero elevato di file esistenti.

In questa particolare istanza, l'attraversamento avviene all'interno di una VM remota, quindi l'escalation dei privilegi di per sé non è l'obiettivo principale: ciò che mi interessa è il codice sorgente confidenziale che può essere trovato sulla VM. Ma sono molto apprezzati anche i comuni percorsi di escalation dei privilegi in quanto ci darebbero mlocate e risolveremo il problema, oltre ad essere direttamente utili in altri sistemi.

Più precisamente, il sistema nel mio caso è un servizio Git push build analogo alle pagine GitHub / GH (supponendo che ogni generazione di Jekyll venga eseguita su VM, cosa che non so). Citando questo perché è già stato risolto dai venditori ovviamente :) Sono io che creo il repository Git: questo è il vettore di attacco, quindi leggere il repository Git non è molto interessante.

    
fonte

2 risposte

5

Puoi provare altre implementazioni di individuazione che indicizzano i file accessibili in tutto il mondo in un indice leggibile in tutto il mondo, in genere situato a /var/lib/locate/locatedb o /var/cache/locate/locatedb o alcuni di questi.

Non vedo molta necessità che l'elenco dei file aumenti l'accesso su un server tipico. Normalmente sapresti quale applicazione stai attaccando e recuperi i suoi file di configurazione e il suo database e ottieni le credenziali in questo modo. Potresti provare file come .netrc , .ssh/id_rsa e .ssh/config per vedere se l'account può essere un gateway in altri account. Se non sei sicuro di ciò che potrebbe essere in esecuzione sulla scatola, prova un sacco e molti nomi di file plausibili.

L'unica cosa che è un po 'lunga per esaurire sono i valori PID, per esplorare ciò che è in esecuzione. Richiede 32k richieste per esaurire pid_t sotto Linux di default, e puoi controllare il valore massimo in /proc/sys/kernel/pid_max . La riga di comando è in /proc/PID/cmdline ; non vedi l'elenco dei file aperti (hai bisogno di readlink per quello) ma puoi vedere il loro contenuto ( cat /proc/PID/fd/0 ...).

Per il caso specifico di un servizio di generazione, controlla i file di configurazione di quel servizio. Questo dovrebbe aiutarti a localizzare il repository git. Se sei stato in grado di localizzare un checkout git, guarda .git/index e .git/logs/HEADS e forse altri file in .git/logs (fai un esperimento con quel servizio per vedere quali rami sono usati e quali operazioni usa). Questo dovrebbe consentire di recuperare gli ID oggetto che puoi leggere da .git/objects .

Oltre a trovare un database di localizzazione, non riesco a pensare a un modo per elevare l'accesso ai file di lettura in file di elenco con una configurazione tipica.

    
risposta data 26.12.2014 - 01:11
fonte
0

Su alcune versioni di Unix (specialmente quelle più vecchie), potresti essere in grado di cat di directory stesse; ad esempio cat /any o anche cat / . Il risultato sarà un file binario il cui formato è diverso su diverse versioni di Unix, ma che conterrà sempre i nomi di tutte le voci nella directory (iniziando con . e .. ) e i loro numeri di inode (in formato binario). Ad esempio, l'output di cat / includerà any , ecc.

Vedi Quando le directory smettono di essere leggibili come file?

    
risposta data 26.12.2014 - 23:27
fonte

Leggi altre domande sui tag