>> Torna all'Homepage <<
Contattaci Entra nei forum Cerca nel sito
News della settimana ASP: esempi di pagine dinamiche Trucchi e suggerimenti per il PC Manuali e guide I dossier e gli approfondimenti di AmicoPc Il sito della settimana I racconti di Armando Staffa Chi siamo
     
 

 


Guarda il sistema
in funzione

 


GESTIONE UTENTI: PROBLEMI DI SICUREZZA

Per ora siamo riusciti ad entrare come se fossimo il primo utente registrato: vediamo ora come entrare al posto dell'utente numero due.
La prima cosa che ci serve è sapere come si chiamano i campi del database in cui sono memorizzati il nome utente e la password: infatti senza queste informazioni non possiamo far nulla.
Teoricamente queste informazioni non sono disponibili, in quanto non abbiamo possibilità di metter mano al database (se così fosse non avremmo bisogno di tanto lavoro....). Di fatto invece possiamo venirne a conoscenza e in un modo decisamente semplice: basta inserire nel campo dello username la seguente riga

' select *

Così facendo la query di selezione della pagina check.asp diventa

" select * form pwd where user like '' select * and pwd like ' ' ''

che genera necessariamente un codice di errore.
Il messaggio di errore mostrato a video è il seguente:

Microsoft OLE DB Provider for ODBC Drivers errore "80040e14'
[Microsoft][Driver ODBC Microsoft Access] Errore di sintassi. nell'espressione della query 'user like '' select *' and pwd like '''.
http://www.amicopc.com/test/pwd/sbagliato/check.asp, riga 10

La parte che a noi interessa è ...user like '' select *' and pwd like... La pagina di errore ci mostra a video la parte della query che ha generato l'errore, ovvero quella che deve confrontare i dati inseriti con quelli presenti nel database. In questa frase sono contenuti i nomi dei campi in cui sono memorizzati il nome utente e la password, che appunto sono user e pwd.

A questo punto torniamo al nostro modulo e inseriamo alcuni caratteri nel campo per il nome utente; nel campo per la password scriviamo:

' or '1'='1' and user<>'primo

dove user è il nome del campo in cui sono memorizzati tutti i nomi degli utenti mentre primo è lo username dell'utente conosciuto con il metodo spiegato nella pagina precedente.

Premendo il tasto ENTRA questi dati vengono inviati alla pagina di controllo check.asp, la quale li confronta con quelli del database.
In questo caso la query di selezione diventa:

"select * from pwd where user like 'xxx' and pwd like ' ' or '1'='1' and user <> 'primo' "

Mediante questa riga chiediamo di selezionare dal database i record con i campi user = XXX e il campo password vuoto (pwd=''); oltre a questi chiediamo di selezionare i record che soddisfano la condizione 1=1 il cui campo user sia diverso da primo.
La prima parte della selezione non produce alcun risultato. La seconda condizione (1=1...) invece è sempre verificata, quindi va bene qualsiasi record. Dato però che il primo record già lo conosciamo (quello del primo utente), ecco che inserisco un'ulteriore condizione: il campo user del record non deve contenere la parola primo (...<> 'primo').
In questo modo il record relativo al primo utente non soddisfa questa condizione; quindi ci spostiamo in avanti finche' non torviamo un altro record che la soddisfi (ovvero il secondo).

In questo modo possiamo autenticarci già come due utenti: quello che si è registrao per primo e quello che si è registrato come secondo.

Utilizzando sempre questo metodo possiamo autenticarci come se fossimo il terzo utente semplicemente scrivendo

' or '1'='1' and user<>'primo' and user <> 'secondo

dove primo e secondo sono gli username degli utenti appena trovati (ricordarsi di non scrivere l'ultimo apice!).
Continuando con questo metodo possiamo entrare di volta in volta come utenti diversi, semplicemente aggiungendo and user <> xxx...

Se però io volessi entrare al posto di un utente specifico?
Nel caso di database con migliaia di utenti questo sistema non sarebbe utilizzabile, sia perché richiede tempi particolarmente lunghi, sia perché i campi di testo utilizzati hanno una lunghezza massima di 255 caratteri, oltre ai quali non è possibile scrivere nient'altro.
Dobbiamo quindi arrenderci?

<< indietro

Utenti connessi: 50

Invia questa pagina ad un amico

 

 

 

Chi siamo | Pubblicità | Note sulla privacy | Dicono di noi
Grafica cura di Paolo Omero
- Stefania Migliorucci