Visualizzazione risultati 1 fino 6 di 6

Discussione: Defacciamento Sito

  1. #1
    Guest

    Predefinito Defacciamento Sito

    Salve come dal titolo mi hanno defacciato il sito..volevo sapere se avevate un beckup perfavore se potete mandatemi un pm. Grazie.

  2. #2
    Guest

    Predefinito

    Unico problema... Se ti hanno defacciato il sito oggi non è che domani se ne stanno fermi (purtroppo per noi)... Devi trovare i bug che hanno sfruttato nel tuo sito (se ci sono) e tapparli. Alle volte non ce se ne rende conto di avere dei buchi e anche i più esperti sbagliano.

    Io di solito uso questa (l'ho fatta io ma non ci vuole un mega genio per farla quindi te la regalo):

    Codice PHP:
    <?php
    class DB {

    private
    $dbHandle;
    private
    $LastResource;

    public function
    __destruct() {
    $this->Close();
    }

    /*
    * Invoca mysql_connect. Implementato solo per rendere più semplice e di facile comprensione
    * l'utilizzo di questa classe.
    */

    public function Connect($Host, $Username, $Password) {
    mysql_connect($Host, $Username, $Password);
    }

    /*
    * $Query è la stringa SQL da inviare. Deve contenere dei caratteri %0, %1, %2... ai quali verrÃ
    * sostituito il parametro con indice corrispondente. Ad esempio %0 verrà sostituito con $Params[0].
    * $Params è un array di stringhe da modificare e inserire in $Query. La modifica subita dipende da
    * $ParamsHandlingType. $ParamsHandlingType è un array di stringhe, le quali possono assumere i
    * seguenti valori: 'md5', 'SQLSafe', 'None'.
    */

    public function SendSafeQuery($Query, array $Params, array $ParamsHandlingType) {
    for (
    $i = 0; $i <= count($Params) - 1; $i++) {
    if (
    is_integer(strpos($Query, '%'.$i))) {
    switch (
    $ParamsHandlingType[$i]) {
    case
    'md5':
    $Query = str_replace('%'.$i, md5($Params[$i]), $Query);
    break;
    case
    'SQLSafe':
    $Query = str_replace('%'.$i, mysql_real_escape_string($Params[$i]), $Query);
    break;
    case
    'HTMLSafe':
    $Query = str_replace('%'.$i, htmlentities($Params[$i]), $Query);
    break;
    case
    'SQL_HTMLSafe':
    $Query = str_replace('%'.$i, htmlentites(mysql_real_escape_string($Params[$i])), $Query);
    break;
    case
    'None':
    $Query = str_replace('%'.$i, $Params[$i], $Query);
    break;
    default:
    die(
    '[FATAL ERROR]: '.$ParamsHandlingType[$i]." is not recognised. Use one of the following values instead: 'md5', 'SQLSafe', 'HTMLSafe', 'SQL_HTMLSafe', 'None'.");
    }
    }
    }
    if (isset(
    $this->LastResource)) {
    mysql_free_result($this->LastResource);
    }
    $Result = mysql_query($Query) or die;
    $this->LastResource = $Result;
    return
    $Result;
    }

    /*
    * Invoca mysql_query. Implementato solo per rendere più semplice e di facile comprensione
    * l'utilizzo di questa classe.
    * ATTENZIONE! Questo metodo non è in grado di difendersi da SQL Injections. Per difendersi da questo
    * tipo di attacchi bisogna utilizzare il metodo SendSafeQuery(...).
    */

    public function SendQuery($Query) {
    $Result = mysql_query($Query) or die;
    return
    $Result;
    }

    /*
    * Chiude il database e libera la memoria. è consigliato l'utilizzo di unset nel caso ci si debba collegare
    * a un altro database. Successivamente deve essere creata una nuova istanza.
    */

    public function Close() {
    if (isset(
    $this->LastResource)) {
    mysql_free_result($this->LastResource);
    }
    if (isset(
    $this->dbHandle)) {
    mysql_close($this->dbHandle);
    }
    }

    }

    ?>
    Ecco come usarla:

    Codice PHP:
    $db = new db;
    $db->Connect(...);
    $db->SendSafeQuery("SELECT * FROM users WHERE username='%0' AND password='%1'", array($uname, $passwd), array('SQL_HTMLSafe', 'md5'));
    Usa:
    'HTMLSafe' per evitare Code Injection di JavaScript o HTML;
    'SQLSafe' per evitare SQL Injections;
    'SQL_HTMLSafe' usa le due precedenti insieme;
    'md5' cripti la password (io direi che è indispensabile);
    'None' non fai niente.

    Inoltre potrebbe esserti utile questo:

    http://blacklight.gotdns.org/wiki/in...curezza_in_PHP

    Parla di come difenderti da ciò che ti è successo.
    Ultima modifica di andreafallico : 06-08-2010 alle ore 22.08.17

  3. #3
    Guest

    Predefinito

    @provaphpprova: a cosa serve lo script che hai postato?

  4. #4
    Guest

    Predefinito

    SE TI SERVE PRENDILO PURE =) MI FA PIACERE MA RICORDATI DI DIRE CHE E' DI MIA CREAZIONE SE LO DAI AD ALTRI

    Allora. il mio sito vero e proprio è blackgecko quindi puoi chiamarmi black =). provaphpprova lo uso come testing ground insieme a degli amici.

    Lo script è praticamente autodocumentante quindi puoi tranquillamente dare una letta e vedrai che in 5 minuti avrai visto tutto quello che ci può essere da vedere. Ti spiego le uniche cose che potrebbero metterti un po' in crisi.

    è una classe PHP che ti permette di connetterti a un database e di inviare delle query senza il rischio di beccarti una SQL Injection e in più puoi criptare le password usando l'algoritmo md5. Questo è un argomento che spesso e volentieri non si conosce. Per sicurezza te lo spiego a grandi linee in modo da evitare di farti fare il giro in internet per trovare una spiegazione terra terra.

    Immagina di fare questa query:
    Codice PHP:
    "SELECT * FROM users WHERE username='$uname' AND password='$passwd'"
    In php uname e passwd verranno inseriti così come sono nella query.

    Se io do il mio username e password reali tutto va bene e io posso fare i normali controlli che faccio successivamente per assicurarmi che l'utente sia corretto:
    Codice PHP:
    "SELECT * FROM users WHERE username='username_reale' AND password='ahahahahaha'"
    Se faccio in modo che arrivino delle stringhe "maligne" al posto di username_reale e ahahahahah posso arrivare al punto di svuotare il database.

    $uname = "admin" (ma poteva essere di tutto e di più)
    $passwd = "' OR 1=1--"

    ecco cosa succede:

    "SELECT * FROM users WHERE username='admin' AND password='' OR 1=1--'"

    Ecco servito l'accesso completo all'amministrazione di un sito! Questo è il meno che può succedere.

    Essienzalmente devi fare questo:
    Codice PHP:
    $db = new db;
    $db->Connect(...);
    $db->SendSafeQuery("SELECT * FROM users WHERE username='%0' AND password='%1'", array($uname, $passwd), array('SQLSafe', 'md5'));
    Buon divertimento
    Ultima modifica di dreadnaut : 08-08-2010 alle ore 11.35.26 Motivo: rimosso link spammino

  5. #5
    Guest

    Predefinito

    ciao ma almeno ai pensato a chi potrebbe essere il colpevole di attacco al tuo sito cmq mi dispiace

  6. #6
    Guest

    Predefinito

    A meno che non lo conosca direttamente la vedo dura che lo becchi. Anzi... Impossibile.

Regole di scrittura

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