Come ottenere una shell?

8

Sto facendo un'esercitazione (exploit-exercises.com) che richiede l'accesso a una shell in esecuzione come un altro utente.

La mia domanda è questa: posso creare un'applicazione che è garantita per essere eseguita dall'altro utente. Come posso usarlo per ottenere l'accesso alla shell con i loro privilegi / account?

È meno utile per me essere in grado di eseguire comandi come loro e più utile per me essere effettivamente in grado di passare a una shell come , perché c'è un'applicazione che verifica se io ' Sono riuscito a compromettere correttamente l'account, quindi mi piacerebbe eseguirlo in modo interattivo.

La prima cosa che mi è venuta in mente è di generare un demone netcat e di eseguire i miei comandi attraverso questo, ma l'opzione -e non sembra esistere su questa VM compromessa.

Pensieri / idee? Mi sto tormentando le cervella per un po '- e so che è semplice!

EDIT: Non sto cercando una risposta / spoiler sull'esercizio in cui sono bloccato, ma sento che c'è una lacuna nella comprensione fondamentale che ho della sicurezza del sistema. Immagino che se non riesco a capire come sfruttare questo buco, mi manca qualche informazione. Voglio quell'informazione fondamentale, non una risposta al problema reale che sto affrontando.

    
posta Harv 03.03.2012 - 01:54
fonte

3 risposte

6

Se puoi creare un processo che verrà eseguito come utente vittima, già avrà accesso alla shell con i suoi privilegi. Tutto ciò che la vittima può fare, il tuo programma può fare. Quindi hai già vinto, non l'hai ancora realizzato!

(Un semplice esempio: perché hai bisogno di una shell? Se c'è qualcosa che vuoi fare con i privilegi della vittima, perché non codifichi nel tuo programma quali azioni vuoi fare?)

Se vuoi davvero creare una shell interattiva, anche questo è fattibile. Potrei dirti diversi modi per farlo, ma hai detto che non vuoi spoiler, quindi lascia che provi a darti alcuni suggerimenti senza rispondere in modo esaustivo.

  1. Hai detto che eseguire netcat sarebbe un modo per raggiungere i tuoi obiettivi, tuttavia la versione di netcat installata sul loro sistema non è aggiornata. Se Alice volesse installare un programma per il suo uso personale, potrebbe? Se hai accesso all'account di Alice e puoi fare qualsiasi cosa che Alice può fare, ti dà qualche idea?

  2. Come viene implementato netcat, internamente? Come funziona? Potresti fare qualcosa di simile?

  3. Supponiamo che tu abbia compromesso l'account di Alice. Quali sono alcuni modi in cui Alice può accedere al suo account? Certo, poteva accedere con la sua password di accesso, ma che altro?

  4. C'è qualcosa che Alice potrebbe fare per dare a uno dei suoi amici la possibilità di accedere al suo account, se lo desidera? Quali sono alcuni modi in cui lei potrebbe farlo? Se hai la capacità di fare qualcosa che Alice può fare, ti dà qualche idea per qualcosa che potresti fare per ottenere l'accesso al suo account?

  5. Se esegui ls -a dalla home directory di un utente, cosa vedi? Che cosa fanno quei file pazzi? Ti dà qualche idea?

Speriamo che sia abbastanza per farti pensare!

    
risposta data 03.03.2012 - 06:59
fonte
2

Un modo per ottenere una shell come utente è trovare un setuid eseguibile correndo come quell'utente. Idealmente questo eseguibile è una shell, come / bin / bash, in questo caso verrebbe fatto cadere su una shell in esecuzione come quell'utente. In caso contrario, è sempre possibile corrompere la memoria dell'eseguibile in fase di esecuzione utilizzando un buffer overflow. Avere un eseguibile setuid che sia anche scrivibile a livello globale sarà mai accadere nel file reale, ma questo è un gioco di guerra non realistico, quindi non si sa mai.

Un'altra opzione è scrivere sul file /home/USER/.bashrc , che potrebbe essere globalmente scrivibile o potrebbe essere modificato se è possibile eseguire un comando come tale utente. Questo script verrà eseguito da quell'utente ogni volta che accedono. Se questo utente è un sudo'er, puoi modificare il file .bashrc per controllare la variabile di ambiente $PATH e indurre l'utente a eseguire un eseguibile proxy sudo finto per ottenere i privilegi root .

    
risposta data 03.03.2012 - 04:57
fonte
1

Il modo più semplice che ho visto è quello di creare un semplice eseguibile che sia in ascolto su una porta di rete, e su connect forks off una copia di /bin/bash , assegnando il socket di rete dentro e fuori come stdin / stdout per shell ( vedi uomo dup2 ). Quindi quando ti connetti, ti viene presentata una shell bash. Sono circa 10 o 20 righe di codice, o giù di lì.

Questa è la funzionalità di base dietro l'opzione -e di netcat, che in genere è disabilitata al momento della compilazione in modo che non possa essere [così facilmente] utilizzata per aiutare le violazioni della sicurezza.

Nella mia esperienza, però, la maggior parte degli hacker preferisce creare la propria "shell" personalizzata in perl che ha un set di comandi specializzati, autenticazione e un sacco di terribile inglese. Inoltre, la connessione a un server IRC privato e l'ascolto dei comandi in questo modo sono molto popolari per ragioni che non penso di dover spiegare.

    
risposta data 03.03.2012 - 21:49
fonte

Leggi altre domande sui tag