Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Problema Di Sicurezza Sito - Accesso Violato

    Salve ragazzi , ho scoperto da poco che delle persone sono entrate nel mio pannello di controllo di un sito , la mia pagina fi login è cosi' formata

    admin.php
    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT">

    <
    html>
    <
    head>

    <
    style>
     
    a
    {
    text-decorationnone;
    }

    </
    style><div id="adminaccesso"><center><td  class="riga" bgcolor="#FFFFFF">[url="#"]Torna indietro</td>[/url]<font class="fontprofilo">[b]Per accedere a questa area devi essere abilitato dal webmaster del sito[/b]</font>

    <
    form action="loginadmin.php" method="post">
    <
    font class="fontprofilo">
    Nickname

    <input type="text"  name="nickname">

    Password

    <input type="password"  name="password">

    <
    center><input type="submit" style="font-family:tahoma; font-size:11px;" size="1" value="Accedi" /></center>

    </
    a>

    [
    b]Ricordo che puoi contattare il Webmaster all indirizzo [email="inuaenail"]infomiosito[/email][/b]</font>

    </
    form
    e poi c'è loginadmin.php cosi' composta

    Codice PHP:
    <? 
     session_start
    (); //avvio l'utilizzo delle sessioni 
     
       
    include "config.php";
     
    setlocale(LC_TIME'it_IT');



        
    // Sessione impostata a 10 min
    ini_set('session.gc_maxlifetime''1800');

    //protezione sql injection
     
    if($_POST['nickname'])
    $nickname mysql_real_escape_string($_POST['nickname']);
    else
    $nickname "";

      
    //seleziono il database  
    mysql_select_db('Sql513457_2') or die("Errore apertura database: " mysql_error());   

    $selezione="SELECT utente,pass FROM accessoadmin WHERE utente='".mysql_real_escape_string($_POST['nickname'])."' AND pass='".mysql_real_escape_string($_POST['password'])."'"


    $eseguisel=mysql_query($selezione); 
    if (
    mysql_num_rows($eseguisel) ==1) { 
    echo 
    "Login effetuato con successo..Attendi"

    //ciclo while che mi richiama l'array dei dati selezionati dal database 

    while($ROW mysql_fetch_array($eseguisel)) 

    //qui vanno settati un po' di SESSIONI 
    $_SESSION['logged']=1;//setto che l'utente è loggato 


    }
     
    echo 
    "<script>
        alert(\"Ok!!!\");
        location = \"miosito/pannello.php\"
    </script>"
    ;

    exit;  
    } else { 
    echo 
    "<script>
        alert(\"Dati inseriti non corretti!!!\");
        location = \"miosito/index.php\"
    </script>"
    ;
    //annullo tutte le chiavi di sessioni se esistono 
    session_unset(); 
    session_destroy(); 
     
    exit; 

    ?>
    poi c'è pannello.php
    Codice PHP:
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//IT">

    <html>
    <head>


    <title>Pannello di controllo</title>



       
    <style>
     
    a
    {
    text-decoration: none;
    }
    <? 

    //Apro la sessione e... 
    session_start(); 
    //verifico che dopo il login io abbia la chiave di sessione ad 1 
    if($_SESSION['logged']==1){ 

    //recupero i valori dal form precedente
    $id $_SESSION['id'];



    }
    else {
    //altrimenti...
    echo "Non sei loggato..."
    //annullo tutte le chiavi di sessioni se esistono 
    session_unset(); 
    session_destroy(); 
    echo 
    "<script>
        alert(\"Ok!!!\");
        location = \"miosito/index.php\"
    </script>"
    ;
    exit; 
    }  
    ?>
    </style>
    <center>[url="miosito/nseriscinews.php"] Inserisci news divertente[/url]

    [url="miosito/inseriscinews2.php"] Inserisci news[/url]

    [url="miosito/inseriscirecensione.php"] Inserisci recensione[/url]


    [url="miosito/inseriscivideo.php"] Inserisci video[/url]



    </center>
    </body>
    </html>
    Cortesemente mi aiutate a capire dove sta il bug ?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    1,453
    Non ho notato particolari bug tranne un codice pessimo con molti pezzi inutili
    come hai verificato che ti hanno violato il sito? Hai dato le credenziali a qualcun'altro?

    Il bug potrebbe benissimo non riguardare il pannello ma il resto della struttura
    ad esempio anche una semplice variabile get che interagisce col db non coperta
    da sql injection può far esportare l'intero database e in tal modo sapere i dati di
    accesso immediatamente dato che non usi nemmeno un algoritmo per criptare la password
    come l'md5,sha1...etc..

  3. #3
    Codice PHP:
    //protezione sql injection  
    if($_POST['nickname']) 
    $nickname mysql_real_escape_string($_POST['nickname']); 
    else 
    $nickname "";    
     
    //seleziono il database   mysql_select_db('Sql513457_2') or die("Errore apertura database: " .mysql_error());     
    $selezione="SELECT utente,pass FROM accessoadmin WHERE utente='".mysql_real_escape_string($_POST['nickname'])."' AND pass='".mysql_real_escape_string($_POST['password'])."'"
    Forse dico una vaccata ma stà condizione mi sembra totalmente sbagliata.
    A parte che mancano tutte le graffe per delimitare if/else e già può crear problemi ma....cioè se uno esegue un post tu recuperi lo user e lo pulisci e fin qui ok.....ma poi nel ramo else valorizzi user come stringa vuota per poi eseguirci sopra una query? Ovvio che è facile bucare, gli dai via libera per injectarti con delle stringhe vuote.
    Fare o non fare....non c'è provare!

  4. #4
    Utente di HTML.it L'avatar di Grino
    Registrato dal
    Oct 2004
    Messaggi
    739
    A tutti, me compreso, consiglio un bel ripasso sul manuale
    http://php.net/manual/en/security.da...-injection.php
    perchè certe cose con il tempo sfuggono di mente.

    Originariamente inviato da Sbidiguda
    ...
    Forse dico una vaccata ma stà condizione mi sembra totalmente sbagliata.
    ...
    La sintassi è assolutamente legittima. Il mancato utilizzo delle parentesi graffe può essere causa di problemi se si cerca di aggiungere altre righe di codice in uno dei due rami e ci si dimentica di racchiudere le istruzioni del ramo tra parentesi graffe (abbastanza frequente). Al più è opinabile l'utilizzo di $_POST nudo e crudo all'interno della condizione dato che potrebbe non esistere affatto. Ma diciamo che funziona lo stesso.

    Al termine dell'IF ha la certezza che la variabile $nickname esiste e contiene:
    1)una stringa vuota
    2)un valore passato tramite post e reso innocuo per una query sql con mysql_real_escape_string

    Al limite, avendo due assegnazione alla stessa variabile in entrambi i rami si poteva scrivere

    Codice PHP:
    $nickname = isset($_POST['nickname'])?mysql_real_escape_string($_POST['nickname']):''
    Infine resta da chiedersi perché fare tutto questo se poi non si utilizza quel $nickname da nessuna parte.

    Originariamente inviato da carlitosteam
    ...
    Cortesemente mi aiutate a capire dove sta il bug ?
    Ho notato che memorizzi le password in chiaro nel DB. Il tuo problema potrebbe essere in un'altra pagina in cui sono riusciti a fare una sql injection, e scaricare tutto il contenuto della tabella accessoadmin. A quel punto hanno avuto libero accesso in modo tradizionale avendo a disposizione ogni username e password.

    Edit: OOOPPS! RoTeam dice le stesse cose. Sono d'accordo con lui!

    Siamo sempre troppo gelosi delle nostre grandi piccole opere! - Grino inedito.
    Lavori e Lavoretti

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.