[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [linux_var] Bash e Taint Check



#include <stdio.h>
#include <stdlib.h>

int main( int argc, char ** argv ) {
  // printf( "argc: %d\n", argc ) ;
  if( argc > 1 ) {
    int ea1, ea2, ea3, ea4, ea5, ea6, ea7, ea8 ;
    sscanf( argv[1], "%x:%x:%x:%x:%x:%x", &ea1, &ea2, &ea3, &ea4, &ea5, &ea6 ) ;
    // printf( "GOT:   %x %x %x %x %x %x\n", ea1, ea2, ea3, ea4, ea5, ea6 ) ;

    char cmd[255] ;

    snprintf( cmd, sizeof(cmd), "/sbin/iptables -t nat -D PREROUTING
-i eth0.11 -m mac --mac-source %02x:%02x:%02x:%02x:%02x:%02x -j
ACCEPT", ea1, ea2, ea3, ea4, ea5, ea6 ) ;
    // printf( "cmd: %s\n", cmd ) ;
    system( cmd ) ;

    snprintf( cmd, sizeof(cmd), "/sbin/iptables -t nat -I PREROUTING
-i eth0.11 -m mac --mac-source %02x:%02x:%02x:%02x:%02x:%02x -j
ACCEPT", ea1, ea2, ea3, ea4, ea5, ea6 ) ;
    // printf( "cmd: %s\n", cmd ) ;
    system( cmd ) ;
  } else {
    printf( "usage: %s xx:xx:xx:xx:xx:xx     (insert in iptable -t nat
allowed mac address)\n\n", argv[0] ) ;
  }

   return(0);
}

Il 09 dicembre 2013 19:45, Diego Roversi <diegor@tiscali.it> ha scritto:
> On Mon, 9 Dec 2013 17:40:29 +0100
> Giovanni Orlandi <orlangio@gmail.com> wrote:
>
>> Ciao a tutti,
>>
>> devo lanciare un semplice script da apache con sudo.
>> Pero' non vorrei che passando i parametri in maniera malevola mi
>> fragassero il server.
>> Volevo sapere se lo script e' sicuro o se si deve/puo' fare un taint check.
>>
>> Questo e' lo script, ovviamente apache avra' il diritto di eseguirlo con sudo:
>>
>> #!/bin/bash
>>
>> iptables -I FORWARD -d "$1" -j ACCEPT
>>
>> Quello che mi aspetto e' che la macchina indicata nel parametro $1
>> venga abilitata al forward. Quello che non vorrei è che attraverso
>> apici dritti/rovesciati mi eseguano comandi arbitrari.
>>
>
> Per non saper ne leggere ne scrivere, farei un programmino in C, che equivale a questo script, che prima verifica il nome dell'host per verificare che sia sintatticamente corretto e poi lancia iptables con i suoi parametri.
>
> Altrimenti se vuoi "ripulire" l'input da dentro lo script puoi fare cosi':
>
> host=$( echo "$1" | tr -c '0-9A-Za-z.' ' '  )
>
> se non ho scritto cavolate, il comando tr dovrebbe sostituire tutti i caratteri che non sono lettere, numeri o punti in uno spazio.
>
> Non e' detto che sia sicuro al 100%. Dipende molto anche da come viene invocato lo script.
>
> --
> Diego Roversi <diegor@tiscali.it>
> _______________________________________________
> Talking mailing list
> Talking@ml.linuxvar.it
> http://ml.linuxvar.it/cgi-bin/mailman/listinfo/talking



-- 
-----------------------------------------------------------------------------------------
Luca 18,5 : "Poiché questa vedova è così molesta le farò giustizia,
perché non venga continuamente a importunarmi".
Neemia 8,10 : "...questo giorno è consacrato al nostro Signore; non
siate tristi; perché la gioia del Signore è la vostra forza".
GSM 345.6050488 / 327.0547392 / 392.0698126 - Fax 06.62204735
_______________________________________________
Talking mailing list
Talking@ml.linuxvar.it
http://ml.linuxvar.it/cgi-bin/mailman/listinfo/talking