Visualizzazione risultati 1 fino 13 di 13

Discussione: Upload che non para le shell

  1. #1
    Guest

    Predefinito Upload che non para le shell

    Salve a tutti,
    mi hanno defacciato il sito perchè, attarverso l'uploiad di immagini, è stata caricata una shell. Per fortuna solo la index è andata perduta. Una cosa è strana: io ho fatto il controllo delle estensioni dei file che caricano, ma la c99 se si chiama .jpg può essere attivata comunque.
    Quindi più che controllare l'estensione cosa devo fare? Potrei aprire il file e verificare se ci sono i caratteri <?php e ?> e se ci sono blocco l'upload, ma mi è sembrata una soluzione un po' "sporca".
    Ecco il codice dell'upload:
    Codice PHP:
    $sorgente = $_FILES['file']['tmp_name'];
    $directory = "hfiles/";
    $nome = basename($_FILES['file']['name']);
    if(
    file_exists($directory.$nome)) {
    echo
    "Esiste gi&agrave; un file con ".$nome." come nome.<br>";
    echo
    "Rinomina il file e riprova.";
    } else {
    $path = pathinfo($nome);
    if(
    in_array($path['extension'], $ext)) {
    move_uploaded_file($sorgente, $directory.$nome);
    chmod("hfiles/".$nome, 0644); //necessario perchè i permessi non si settano da soli sul mio hosting
    echo "File caricato con successo.<br>";
    echo
    "Il link del tuo file &egrave;:<br>";
    echo
    "<textarea style=\"background-color: transparent\" cols=\"50\" rows=\"1\">http://".$_SERVER['SERVER_NAME']."/hfiles/".$nome."</textarea>";
    } else {
    echo
    "L'estensione del file che cerchi di caricare non &egrave; consentita.";
    }
    }
    Ecco il mio quesito: come posso bloccare l'upload di shell?

  2. #2
    Guest

    Predefinito

    fai un controllo sul tipo di file ;)

    Codice PHP:
    if($_FILES['file']['type'] == // e tutte le possibilità:
    image/png
    image
    /bmp
    image
    /jpeg
    image
    /jpg
    image
    /gif
    ) { //codice }
    ;)

  3. #3
    Guest

    Predefinito

    Ciao a tutti , io ho lo stesso problema, c'è una persona che mi carica le shell tramite uploa, ho seguito il vostro consiglio, e il codice lo messo quà
    Codice PHP:
    <?php if ($upload="upload"&&$superdat_name){

    if (!
    eregi("\.(mid|gif|bmp|mid|midi|3gp|mp3|wav|jar|jad|jpeg|jpg|sis|mmf|amr|png|wbmp)$",$superdat_name)){
    print
    "<b>Unsupported File Extention!</b>";
    }else{
    $superdat_name = preg_replace(
    '/[^a-zA-Z0-9\.\$\%\'\`\-\@\{\}\~\!\#\(\)\&\_\^]/'
    ,'',str_replace(array(' ','%20',"'"),array('_','_', ""),$superdat_name));
    if(
    strlen($superdat_name)>53){ print "<b>Nome del file è troppo lungo!</b>";
    }else{
    if (empty(
    $superdat)) {
    print
    "<b>Nessun file specificato!!!</b>";
    }else{
    copy("$superdat", "files/$superdat_name") or
    die(
    "Couldn't copy file.");

    if(
    $_FILES['file']['type'] == // e tutte le possibilità:
    image/png
    image
    /bmp
    image
    /jpeg
    image
    /jpg
    image
    /gif
    )


    $date=(date("D, j F Y"));
    $fsize=round($superdat_size/1024,1);
    $text = "&&$superdat_name&&$fsize KB&&$date&&$REMOTE_ADDR&&";
    $fz = "$fsize KB";
    if(
    "$text"!="$check[1]"){
    $mysql=mysql_query("INSERT INTO ibwf_uploads SET id='', uid='".$uid."', filename='".$superdat_name."', filesize='".$fsize." KB', date='".$date."', uip='".$REMOTE_ADDR."'");
    echo
    mysql_error();
    }
    echo
    "<b>$superdat_name</b> il tuo file è stato caricato con successo";
    }
    }
    }
    }
    ?>
    <?php
    echo "<FORM align=\"center\" ACTION=\"uploadd.php?sid=$sid&amp;site=$site\" METHOD=\"POST\" ENCTYPE=\"multipart/form-data\">";
    ?>
    <b>Seleziona file da caricare :</b><br/>
    <input align="center" type="file" name="superdat"><br/>
    <input align="center" type="hidden" name="upload" value="upload"/>
    <INPUT align="center" TYPE=SUBMIT NAME="submit" VALUE="Upload File!"><br/><br/></small><br/> <b><u>I file da caricare devono avere questi formati:</u></b><br/>
    .jpg, .jpeg, .gif, .png, .bmp, wbmp, .mid, .midi, .mpg, .mmf, .amr, .mp3, .wav, .wmv , .avi, .3gp, .sis, .jar, .jad, .zip, .rar, .txt<br/><br/>
    Nota es.: L'Indirizzo della tua Foto/Immagine sarà http://universal3000.altervista.org/chat_universal2/uploaded/files/Animation6.gif<br/>
    ----------
    <?php echo "<br/><small><a href=\"index.php?sid=$sid&amp;site=$site\">Files Caricati</a></small>"; ?>
    </FORM>
    ..ma mi spunta questo nella pagina
    Parse error: syntax error, unexpected T_STRING in /membri/universal3000/chat_universal2/uploaded/upload.php on line 49
    Dove potrei metterlo esattamente? Grazie per la risposta
    Ultima modifica di dreadnaut : 07-10-2009 alle ore 22.34.32

  4. #4
    Guest

    Predefinito

    prova a modificare così
    Codice PHP:
    if($_FILES['file']['type'] == // e tutte le possibilità:
    image/png
    image
    /bmp
    image
    /jpeg
    image
    /jpg
    image
    /gif
    ) {
    //resto del codice
    }

  5. #5
    Guest

    Predefinito

    No. Bisogna fare una cosa del tipo:
    Codice PHP:
    if($_FILES['file']['type'] == // e tutte le possibilità:
    "image/png" || $_FILES['file']['type'] ==
    "image/bmp" ||
    ....

  6. #6
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Se è rinominata in jpg non può chiamarla direttamente.
    Ma se hai uno script che richiama file e li esegui (tipo include dinamici) si può forzare il caricamento della shell
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  7. #7
    Guest

    Predefinito

    chiaravalle ho modificato così
    Codice PHP:
    copy("$superdat", "files/$superdat_name") or
    die(
    "Couldn't copy file.");

    if(
    $_FILES['file']['type'] == // e tutte le possibilità:
    image/png
    image
    /bmp
    image
    /jpeg
    image
    /jpg
    image
    /gif
    ) {

    $date=(date("D, j F Y"));
    e mi spunta questo
    Parse error: syntax error, unexpected T_STRING in /membri/universal3000/chat_universal2/uploaded/upload.php on line 49


    gabry modificato il tuo, messo così
    Codice PHP:
    die("Couldn't copy file.");

    if(
    $_FILES['file']['type'] == // e tutte le possibilità:
    "image/png" || $_FILES['file']['type'] ==
    "image/bmp" ||

    $date=(date("D, j F Y"));
    e mi spunta questo
    Parse error: syntax error, unexpected ';' in /membri/universal3000/chat_universal2/uploaded/upload.php on line 51
    Ultima modifica di universal3000 : 02-09-2009 alle ore 10.54.46

  8. #8
    Guest

    Predefinito

    Bhè... non chiudi l' If (e neanche lo apri sembra...) :)

    Codice PHP:
    if (condizione) { 'codice'; }

  9. #9
    Guest

    Predefinito

    a ok, allora quale delle 2 funzioni va bene, quello di chiaravalle o quello di gabri?

  10. #10
    Guest

    Predefinito

    Io avrei fatto qualcosa di simile:
    Codice PHP:
    $ok = array("image/png","image/bmp","image/jpeg", "image/jpg", "image/gif");

    if(!
    in_array($_FILES["file"]["type"], $ok))
    exit(
    "Estensione file non consentita!");

  11. #11
    Guest

    Predefinito

    Grazie nokiagame messo tua funzione , non fa nessun errore.

  12. #12
    Guest

    Predefinito

    Scusate, dovrei abbassare il limite di KB nel mio upload, e portarlo a 50KB, oppure 80kb , sapete come si fa? il codice è nel post precedente

  13. #13
    L'avatar di mycarlo
    mycarlo non è connesso Utente attivo
    Data registrazione
    06-10-2009
    Residenza
    $this->s50
    Messaggi
    467

    Predefinito

    Codice PHP:
    $size = ceil(filesize($_FILES["file"]["tmp_name"]) / 1024);

    if(
    $size > 80) {
    exit(
    "Dimensioni massime file superate...");
    }
    Saluti!

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •