ßµØ
ßµØ - Bannato - 0 Punti
Rispondi Cita Salva
Sono costretto ad eliminarla: non è la guida, ma l' uso che se ne fa che può essere grave. Qua non ci sono solo santi, quindi meglio evitare un aumento inutile di lamerate.

Questa risposta è stata cambiata da Qualer (01-01-09 11:39, 7 anni 11 mesi 13 giorni )
Qualer
Qualer - Mito - 65039 Punti
Rispondi Cita Salva
Mi dispiace, ma è l' uso che ne puoi fare che potrebbe essere MOLTO dannoso. E poichè in questo forum non girano tutti santerelli, ti chiedo di eliminarla. Va a finire che esce il primo lamer che si diverte a far danni per sfizio.
Progettista HW
Progettista HW - Genius - 2540 Punti
Rispondi Cita Salva
Ma che vi serve entrare nei siti altrui? Solo per rovinare qualche poveraccio, che può addirittura perdere il lavoro per questo, e poter dire "ci sono riuscito!"? Ci siete riusciti a fare che? A copiare da qualcun altro una banale tecnica di SQL Injection? Ma se non sapete nemmeno perché funziona così...

Invece di proporre altre tecniche SQL Injection, propongo degli script Anti-SQL Injection (se qualcuno di voi conosce il PHP e utilizza anche un database SQL).

Per PHP (PHP Hypertext Preprocessor), potete aggiungere al resto della libreria "mysql.php", il seguente script:

function mysqlCreateQuery() {
    return mysqlCreateQueryVector(func_get_args());
}

function mysqlCreateQueryVector($argv)
{
    # Build the query escaping where needed
    $argc = count($argv);
    $q = $query;
    for ($i = 0; $i < $argc; $i++) {
        if ($i&1) {
            if (is_array($argv[$i])) {
                $aux = "";
                foreach($argv[$i] as $x)
                    $aux .= "'".mysql_escape_string($x)."',";
                $q .= trim($aux,",";);
            } else {
                $q .= "'".mysql_escape_string($argv[$i])."' ";
            }
        } else {
            $q .= $argv[$i];
        }
    }
    return $q;
}

In pratica MySQLCreate e MySQLCreateVector sono identiche. L'unica differenza è che la seconda inserisce tutti gli argomenti in un vettore e quindi si evitano possibili SQL Injection di malintensionati. La stessa modifica può essere apportata (con gli adeguati cambiamenti) agli script Asp.

Perché quella SQL Injection funziona? Perché 'OR' modifica la QUERY creata dal database, imponendogli "o rendi valida la password originale o rendi valida la password che metterò tra apici"... se azzeccate il nickname (che di solito è "admin"... ecco perché quel metodo non funziona su tutti i siti ) allora con quel sistema potete accedere ad un sito il cui database non fa gli adeguati controlli. Quindi sarebbe valida qualsiasi password che contenga: 'or''parola che vuoi tu'.
Qualer
Qualer - Mito - 65039 Punti
Rispondi Cita Salva
Hum... non sono un genio in programmazione PHP. Puoi spiegarmi cosa è? (se è un anti-intruder, quello sì che è una cosa ottima!)
Progettista HW
Progettista HW - Genius - 2540 Punti
Rispondi Cita Salva
Non è un anti-intruders. E' una possibile soluzione al danno arrecato da un login non consentito a causa di un SQL Injection. In pratica, l'SQL Injection rappresenta una serie di tecniche che consistono nell'"iniettare codice" esternamente, ad un codice preesistente.

Ad esempio, uno script PHP, fatto con i piedi (da completare), per il login, potrebbe essere:

<?php
$query = "SELECT * FROM users WHERE user='".$_POST['user']."' AND pwd='".$_POST['pwd']."'";$sql = mysql_query($query,$db);
...
?>

Questo codice, quando viene interpretato, crea una "query", ossia una domanda al database (che in genere è SQL). La query in questo caso potrebbe avere la forma:

SELECT * FROM users WHERE user='admin' AND pwd='ciao'

Quindi l'username dell'amministratore è "admin" e la password è "ciao".

Se il codice PHP è scritto da cani e non viene eseguito un controllo sulla query, quest'ultima può essere modificata dall'esterno.

Se scrivi, nella casella di input, il nickname dell'amministratore e nella casella per la password scrivi 'OR''parola', la query viene trasformata in questo modo:

SELECT * FROM users WHERE user='admin' AND pwd='ciao' OR pwd="parola".

OR è un'operazione logica che ritorna un valore VERO se almeno una delle due condizioni è vera. Quindi, se tu inserisci 'or''parola', significa che la password valida può essere "o l'originale o quella che hai scritto dopo (in questo caso "parola" ).

Ora, questo può avvenire se lo script php memorizza i dati linearmente. Se invece si memorizzassero i dati all'interno di un array (un vettore), allora tale SQL Injection non verrà presa in considerazione, perché non è più possibile modificare la query.

Nel caso dei file "adminlogin.asp", tali file sono quelli di default per il login e normalmente vengono posseduti da siti di amministratori poco esperti. La memorizzazione avviene in modo lineare e ciò comporta la vulnerabilità alle SQL-Injection.
Questo topic è bloccato, non sono ammesse altre risposte.
Come guadagno Punti nel Forum? Leggi la guida completa
In evidenza
Classifica Mensile
Vincitori di novembre
Vincitori di novembre

Come partecipare? | Classifica Community

Community Live

Partecipa alla Community e scala la classifica

Vai al Forum | Invia appunti | Vai alla classifica

mc2

mc2 Genius 248 Punti

Comm. Leader
Registrati via email