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



Documenti analoghi
--- PREMESSE INTRODUZIONE. .:luxx:.

DBMS (Data Base Management System)

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

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

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

19. LA PROGRAMMAZIONE LATO SERVER

MySQL Database Management System

Indice generale. Capitolo 3 Introduzione a PHP...43 Sintassi e istruzioni di base Variabili, operatori e commenti Array...

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

Al giorno d oggi, i sistemi per la gestione di database

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

Lezione V. Aula Multimediale - sabato 29/03/2008

Sistemi per la gestione di database: MySQL ( )

I comandi del linguaggio DDL (Data Definition Language): CREATE E ALTER

Structured Query Language parte 1

Sicurezza Informatica: Tecniche di SQL INJECTION

Costruzione di Sit Web con PHP e MySQL. Lezione 7 - Esercitazione - Introduzione a MySQL: le tabelle, i tpi di dato, le query

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

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

Abilità Informatiche A.A. 2010/2011 Lezione 9: Query Maschere Report. Facoltà di Lingue e Letterature Straniere

DATABASE.

Corso sul linguaggio SQL

Informatica per le discipline umanistiche 2 lezione 10

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

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

Una metodologia di progettazione di applicazioni web centrate sui dati

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

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

Database e reti. Piero Gallo Pasquale Sirsi

Lezione 9. Applicazioni tradizionali

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

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

Insegnamento di Informatica CdS Scienze Giuridiche A.A. 2006/7. Il trattamento dei dati

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

Corso di Informatica RDBMS RDBMS. Corso di Laurea in Conservazione e Restauro dei Beni Culturali

Introduzione ai database relazionali

GERARCHIE RICORSIVE - SQL SERVER 2008

INFORMATICA. Applicazioni WEB a tre livelli con approfondimento della loro manutenzione e memorizzazione dati e del DATABASE.

CONCETTO DI ANNIDAMENTO

Introduzione JDBC interfaccia java.sql driver caricare i driver

Lavorare con MySQL Parte Seconda.

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

User Tools: DataBase Manager

Dispensa di database Access

PHP e Structured Query Language

Utilizzando Microsoft Access. Si crea la tabella Anagrafica degli alunni,le Materie e i voti si mettono alcuni campi

Bibliografia: Utenti e sessioni

SQL: concetti base SQL. Definizione dei dati in SQL. SQL: "storia"

DDL, VINCOLI D INTEGRITÁ, AGGIORNAMENTI E VISTE. SQL è più di un semplice linguaggio di interrogazione

Unità 2.1 Comandi sui database

Presentazione Data Base

Informatica I per la. Fisica

Basi di dati e Sistemi informativi aziendali

Il linguaggio SQL: query innestate

Il sistema IBM DB2. Sistemi Informativi T. Versione elettronica: L01.1.IntroduzioneDB2.pdf

Base Dati Introduzione

DATABASE IN RETE E PROGRAMMAZIONE LATO SERVER

Microsoft Access. Microsoft Access

Sistemi Mobili e Wireless Android - Dati persistenti: SQLite

Corso di Informatica Generale 1 IN1. Linguaggio SQL

Attacchi alle applicazioni web: SQL injection e Cross-site scripting (XSS)

SQL SQL. Definizione dei dati. Domini. Esistono 6 domini elementari:

Introduzione a MySQL

Introduzione a phpmyadmin

Le query. Lezione 6 a cura di Maria Novella Mosciatti

Informatica Generale Andrea Corradini Sistemi di Gestione delle Basi di Dati

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

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

Basi di Dati. S Q L Lezione 5

Il linguaggio SQL: trigger. Versione elettronica: 04.7.SQL.trigger.pdf

Basi di Dati: Corso di laboratorio

PHP 5. Accesso a database

Lezione 1 Introduzione

Corso di Web Programming

Procedure memorizzate SQL-2003/PSM. Forma base di PSM. Parametri in PSM

Database. Si ringrazia Marco Bertini per le slides

SITI-Reports. Progetto SITI. Manuale Utente. SITI-Reports. ABACO S.r.l.


Esercitazione 4 JDBC

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

Obiettivo dell esercitazione

MySQL Database Management System

Istruzioni DML di SQL

Definizione di domini

Volumi di riferimento

Basi di dati. L Algebra Relazionale. K. Donno - L Algebra Relazionale

Passo 2: avviare Access e creare una tabella per ogni tipo di entità Costruire la tabella per l entità cliente.

RELAZIONE TECNICA GESTIONE CARTE DI CREDITO. a cura di EMANUELE CESARI

ITI M. FARADAY Programmazione modulare a.s

CONTENUTI 1. INTRODUZIONE CONCETTI BASICI SU EQUINOX CMS XPRESS ACCESSO A EQUINOX CMS XPRESS PAGINA D INIZIO...

Organizzazione degli archivi

Capitolo 13. Interrogare una base di dati

Sviluppo Applicativi personalizzati per automatizzare le Analisi SPC

Progetto ittorario Anno scol

Linguaggio SQL: fondamenti. Basi di dati. Elena Baralis Pag. 1. Linguaggio SQL: fondamenti. Sistemi informativi. Introduzione

Caratteristiche principali. Contesti di utilizzo

Legenda: Vengono riportate qui brevi descrizioni di alcuni dei più noti e comuni tipi di vulnerabilità,in base al loro grado di pericolosità.

Personalizzazione Stampe

Regione Toscana - Giunta Regionale

ASP: DOMANDE E RISPOSTE (Q&A)

Transcript:

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

Che cos'e' SQL? Acronimo di 'Structured Query Language E' un linguaggio per l'interazione con databases relazionali Sviluppato in principio da IBM nel 1974 Standard ANSI ed ISO (attuale versione SQL:2008) Molti RDBMS hanno estensioni proprietarie oltre al linguaggio SQL standard.

Struttura del database, le tabelle Un RDBMS e' composto da una o piu' tabelle identificate da un nome Ogni tabella contiene dei records che costituiscono i dati La nostra tabella di esempio si chiama 'users' e contiene dati distribuiti su righe e colonne: ID username firstname lastname password 0 mynx Alice Smith qwerty 1 ranger Bob Parker passw0rd 2 orb John Doe t00133t4u

Data Manipulation Language (DML) SQL prevede una sintassi (statements) per inserire, eliminare e modificare i records: SELECT INSERT INTO UPDATE DELETE

Data Description Language (DDL) Analogamente esistono statements per operare sulla struttura del database, quelli piu' comunemente usati sono: CREATE TABLE ALTER TABLE DROP TABLE

Interrogare il database: Interagire col DB SELECT lastname FROM users WHERE id='0'; Risultato: Lastname ------------------- Smith

SQL Injection La SQL Injection e' una tecnica che permette l'exploiting di applicazioni web che non filtrano opportunamente l'input rendendo cosi' possibile l'immissione di codice SQL arbitrario lato client.

Quanto e' comune? Ad oggi e' la vulnerabilita' piu' comune riscontrabile su applicazioni e siti web Non e' un problema relativo al DB, al webserver o all'application server E' una vulnerabilita' meramente applicativa dovuta a: Errori nel design dell'applicazione o del sito Molti sviluppatori non conoscono il problema Le soluzioni reperibili su internet spesso non sono efficaci, fornendo un falso senso di sicurezza

Cosa e' vulnerabile? Se l'applicazione e' vulnerabile e' possibile accedere a qualsiasi db che ne gestisca i dati (MySQL, ORACLE, Postgres, MS Sql, Sybase, DB2, Informix...etc) Sono potenzialmente vulnerabili: Pagine scritte in php, asp, jsp JavaScript XML, XLS Applicazioni web per la gestione dei databases Altro...molto altro

Come funziona? Consideriamo la seguente SELECT: SELECT Username FROM users WHERE Username = 'pippo' AND Password = 'qwerty' Supponiamo un codice simile a: SQLQuery = "SELECT Username FROM Users WHERE Username = '" & strusername & "' AND Password = '" & strpassword & "'" strauthcheck = GetQueryResult(SQLQuery) If strauthcheck = "" Then boolauthenticated = False Else boolauthenticated = True End If

Login: 'OR''=' Password: 'OR''=' La query risultera' essere: Cosa succede se... SELECT Username FROM users WHERE Username = '' OR ''='' AND Password = '' OR ''='' Che ritorna sempre TRUE!

Riconoscere le vulnerabilita' Non e' sempre semplice, mai tralasciare i dettagli La fantasia e l'approccio atipico sono una carta vincente Non sempre le webapplication restituiscono errori... Controllare i sorgenti delle pagine Controllare gli headers Controllare i commenti nelle pagine Attenzione ai 302

Cercare le vulnerabilita' Le vulnerabilita' possono celarsi in posti diversi: Campi nei form Parametri passati agli script attraverso l'url Parametri presenti nei cookies o in campi nascosti o bloccati Effettuare il fuzzing di tutto cio' che puo' essere vulnerabile attraverso tool automatici e non

Caratteri utili ' o " Racchiudono una stringa -- o # Commento singolo /*...*/ Commento multilinea Concatenazione % Wildcard

SELECT tricks Spesso l'unico parametro che possiamo 'injectare' e' la clausola WHERE dello statement SQL Ottenere piu' informazioni attraverso UNION: SELECT something FROM sometable UNION SELECT password FROM users WHERE 1=1;

La potenza di UNION UNION combina i risultati di due o piu' query in un solo set contenente tutte le righe risultanti dalle query oggetto di UNION I risultati delle query devono avere lo stesso numero di colonne. La clausola ALL per uscire da eventuali SELECT DISTINCT

ANCORA SU UNION Ottenere solo quello che ci serve: Codice: SQLString = "SELECT nome, cognome, titolo, FROM dipendenti WHERE citta='" & strcity & "'" Injection: ' UNION ALL SELECT something FROM sometable WHERE ''=' Risultato: SELECT nome, cognome, titolo, FROM dipendenti WHERE citta='' UNION ALL SELECT something FROM sometable WHERE ''=''

Vogliamo di piu' Il contenuto del db non ci basta, vogliamo interagire col sistema operativo Molti DB includono funzioni che permettono di interagire con l'os del server: Recuperare password e files di configurazione Cambiare password e configurazioni Eseguire dei comandi alterando file di configurazione o script di init

Accedere all'os con MySQL MySQL usa la funzione load_file() per accedere ai file Supponiamo di injectare qualcosa di simile a: 'union select 1,load_file('/etc/passwd'),1,1,1; Oppure create table temp( line blob ); load data infile '/etc/passwd' into table temp; select * from temp;

Come difendersi? Quasi facile: Validare l'input! Definire tipi di dato per ogni campo Implementare filtri il piu' possibile stringenti Se l'input e' numerico usare una variabile numerica Scartare l'input malevolo invece di tentare di modificarlo Implementare filtri su keyword riconosciute come pericolose (insert, select, update, delete, drop, --, etc)

Hardening di sistema Un sistema il piu' possibile sicuro aiuta a prevenire: Usare utenze non privilegiate per il DB Grant opportuni per le utenze del DB Auditing delle password per tutti gli account Introdurre firewall applicativi e IDS

Tools: SQLmap (http://sqlmap.sourceforge.net/) Paros proxy (http://www.parosproxy.org/) Burp (http://portswigger.net/) Nikto (http://cirt.net/nikto2/)

Links: OWASP (http://www.owasp.org/) WASC (http://www.webappsec.org/)

Quindi...

Contatti: Francesco Mormile E-mail: shiva@slackware.it Web: http://shiva.slackware.it/