|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
**ATTENZIONE**ASSOLUTA NON SICUREZZA DI ASP E DATABASE!!!!!
C'è un modo x iniettare sql dalla url... e può farlo chiunque conoscendo un minimo del db!!! (nel mio caso SQL server 2000)
Mettendo una stringa tipo : https://www.sito.net/news/news2.asp?ID=297;%20UPDATE%20[News]%20SET%20[description]%20=%20'1'%20WHERE%20[ID]%20=%201 ESEGUE L'SQL!!!! C'è un modo x risolverlo??? Praticamente se io nella pagina faccio "SELECT * WHERE ID=297" quando acquisisco L'ID dall'URL la select diventa::: "SELECT * FROM ID=297; UPDATE ....ETC" IL ";" dice di eseguire la prox istruzione....!!!! ![]() |
![]() |
![]() |
![]() |
#2 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Interessante questa cosa... Non ci avevo mai pensato... Credo che la cosa più semplice sia fare un cast a intero (CInt()) della variabile presa dalla querystring...
Se il parametro è una stringa l'unica cosa che si può fare è controllare che non contenga un apice... |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
e se la variabile è un LOGIN???? es."PIPPO"
cioè... vuole dire cambiare ogni pagina del sito ![]() ![]() ![]() |
![]() |
![]() |
![]() |
#4 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
anzi, se metto CINT può essere che canna l'ID
se ID=29 ; SELECT.... se il CINT fosse sul 29, ok ma se il CIN PRende tutta la stringa... che casino!!! |
![]() |
![]() |
![]() |
#5 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
non prende solo il 29:
se passo PAG.asp?ID=29;select... il separatore delle variabili passate è il "&" non essendoci prende tutto.. inquesto caso eseguirebbe SELECT * FROM TABELLA WHERE ID=29;UPDATE ..... il ";" funge da separatore dell'sql... e esegue la II parte come nuova istruzione... ![]() |
![]() |
![]() |
![]() |
#7 |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Sì, ma se converti con CInt ti rende solo il 29...
|
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
secondo me se passo
xx.asp?ID=29;update prende "29;UPDATE..." come stringa... |
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
|
|
![]() |
![]() |
![]() |
#10 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
ok ,mi fido
![]() e nel caso in cui passo ..LOG="PIPPO" ... ![]() |
![]() |
![]() |
![]() |
#11 | |
Senior Member
Iscritto dal: Apr 2000
Città: Vicino a Montecatini(Pistoia) Moto:Kawasaki Ninja ZX-9R Scudetti: 29
Messaggi: 53971
|
Quote:
![]() Nel caso tu passi una stringa puoi verificare che all'interno della stringa non ci sia un apice o un doppio apice (dipende da cosa usi nella query)... |
|
![]() |
![]() |
![]() |
#12 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 279
|
!
Mah... io controllo sempre che in qualunque stringa non siano presenti
Per i campi testuali.... ' in questo caso li raddoppio Per i campi numerici ; (solo per valori numerici nei database) in questo caso li tolgo --- (il commento) anche questo... via OR, AND....e compagnia.... e anche eventuali = ( non si sa mai... magari a certe cose non ci ho pensato) ...per il resto dovrei essere appostoo
__________________
In un arco di tempo abbastanza lungo l'indice di sopravvivenza di ognuno scende a zero |
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
Ragazzi mi fate capire bene questa storia ?
|
![]() |
![]() |
![]() |
#14 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
Allora... hai un indirizzo che butta fuori un GET.
esempio arrivi su www.sito.it/pagina2.asp?ID=29 passi ID=29 (ti servirà x fare una select in un DB) FAI CONTO CHE UN "mailintenzionato" cambia l'URL in www.sito.it/pagina2.asp?ID=29;UPDATE ANAG SET NOME="CARLO" Nella pagina avrai qualcosa del tipo conn.execute("SELECT * FROM TABELLA WHERE ID=" & request("ID") IN QUESTO CASO LA STRINGA CHE VIENE ESEGUITA E' : SELECT * FROM TABELLA WHERE ID=29 ; UPDATE ..... IL ";" FA PASSARE l'SQL all'istruzione successiva che è l'UPDATE fatto dal lamer... IN pratica, può iniettare SQL quando vuole... basta che azzecca i nomi delle tabelle.... (che in genere sono gli stessi...) capito? |
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
è come se fai:
conn.execute("SELECT...") conn.execute("UPDATE..") |
![]() |
![]() |
![]() |
#16 |
Senior Member
Iscritto dal: Jul 2002
Città: Napoli
Messaggi: 1964
|
P
![]() |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Nov 2000
Messaggi: 279
|
!!
Oppure per i campi di testo per esempio...bisogna controllare gli apici perchè per esempio....
io eseguo la seguente stringa sql e guardo se restituisce un utente...se sì allora gli assegno le autorizzazioni "SELECT * FROM UTENTI WHERE USER = '"+user+"' AND PASS = '"+pass+"' " se user e pass non venissero controllate ed avessero il valore ' OR '' = ' la stringa diventerebbe "SELECT * FROM UTENTI WHERE USER = '' OR '' = '' AND PASS = '' OR '' = '' " siccome '' = '' è sempre vera la query mi restituirebbe TUTTI i cami del database.... e visto che di solito quello dell'amministratore è il primo ad essere inserito... non si può escludere di avere privilegi di amministratore... almeno... nelle mie appl è così.... (non ci contate.... è tutto controllato ![]()
__________________
In un arco di tempo abbastanza lungo l'indice di sopravvivenza di ognuno scende a zero |
![]() |
![]() |
![]() |
#18 |
Senior Member
Iscritto dal: Apr 2003
Città: Monza
Messaggi: 2639
|
nel mio caso purtroppo no,,, ma se la query è su un altra tabella (es. quella che gestiscele nwes)... punto a capo...
|
![]() |
![]() |
![]() |
#19 |
Senior Member
Iscritto dal: Nov 2001
Città: Gavirate (Varese)
Messaggi: 7168
|
solitamente per variabili non filtrate per le query e parametri semi-importanti si usano le sessioni/variabili applicazione oppure si salvano le sessioni in database come se si stesse lavorando su server web in cluster...lasciare i parametri scoperti in questo modo non è mai conveniente...il controllo dei dati da mettere in query è la prima cosa da fare
![]() ma soprattutto evitare il passaggio di stringhe ma solo di indici e interi in modo da poter essere controllati con più facilità
__________________
·.·´¯`·)»Davide«(·´¯`·.· edivad82:~#/etc/init.d/brain restart - edivad82:~# cd /pub && more beer |
![]() |
![]() |
![]() |
#20 |
Senior Member
Iscritto dal: Mar 2002
Città: Italy/Usa
Messaggi: 2817
|
se volete
ho un po di spazio web disponibile per fare qualche testing.
anche a me interessa molto questa cosa. Siete grandi! |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 14:51.