Il 0% ha trovato utile questo documento (0 voti)
0 visualizzazioni33 pagine

Web Security 2 - Database

Il documento fornisce una panoramica sui database e le vulnerabilità di sicurezza, in particolare le SQL injection. Viene spiegato il funzionamento dei database, l'importanza dei Database Management System (DBMS) e i metodi per proteggersi dalle injection. Inoltre, il documento illustra vari tipi di SQL injection e le tecniche per sfruttarle.

Caricato da

dosok85111
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd
Il 0% ha trovato utile questo documento (0 voti)
0 visualizzazioni33 pagine

Web Security 2 - Database

Il documento fornisce una panoramica sui database e le vulnerabilità di sicurezza, in particolare le SQL injection. Viene spiegato il funzionamento dei database, l'importanza dei Database Management System (DBMS) e i metodi per proteggersi dalle injection. Inoltre, il documento illustra vari tipi di SQL injection e le tecniche per sfruttarle.

Caricato da

dosok85111
Copyright
© © All Rights Reserved
Per noi i diritti sui contenuti sono una cosa seria. Se sospetti che questo contenuto sia tuo, rivendicalo qui.
Formati disponibili
Scarica in formato PDF, TXT o leggi online su Scribd

Cybersecurity National Lab

Web Security 2
Database

https://cybersecnatlab.it
License & Disclaimer
2

License Information Disclaimer


This presentation is licensed under the ➢ We disclaim any warranties or representations
Creative Commons BY-NC License as to the accuracy or completeness of this
material.
➢ Materials are provided “as is” without
warranty of any kind, either express or
implied, including without limitation,
warranties of merchantability, fitness for a
particular purpose, and non-infringement.
➢ Under no circumstances shall we be liable for
To view a copy of the license, visit: any loss, damage, liability or expense incurred
http://creativecommons.org/licenses/by-nc/3.0/legalcode or suffered which is claimed to have resulted
from use of this material.
© CINI - Rel. 06.02.2025
Obiettivi
3

➢ Comprendere il concetto di database ed il loro


funzionamento
➢ Comprendere il concetto di injection
➢ Comprendere gli attacchi di tipo SQL injection

© CINI - Rel. 06.02.2025


Argomenti
4

➢ I database
➢ Le SQL injection

© CINI - Rel. 06.02.2025


Argomenti
5

➢ I database
➢ Le SQL injection

© CINI - Rel. 06.02.2025


Database
6

➢ Spesso i server hanno bisogno di memorizzare dati:


➢ Informazioni sull’utente
➢ Messaggi scambiati
➢ I post di un blog
➢ I database permettono di gestire efficacemente i dati

© CINI - Rel. 06.02.2025


Database
7

➢ Perché non usare dei semplici file? I database:


➢ Sono ottimizzati per essere più efficienti
➢ Permettono di gestire dati strutturati
➢ Hanno meccanismi di recupero dati in caso di crash
➢ Sono standardizzati

© CINI - Rel. 06.02.2025


Database
8

➢ I DBMS (Database Management System) sono


programmi per gestire e interfacciarsi
efficientemente con database. Tra i più comuni:
➢ MySQL
➢ MariaDB
➢ PostgreSQL
➢ SQLite
➢ Mongodb
© CINI - Rel. 06.02.2025
Database
9

➢ I database relazionali sono una tipologia di database


che memorizzano i dati in tabelle, tra cui è possibile
creare relazioni

© CINI - Rel. 06.02.2025


Database
10

id nome email password

1 Pippo [email protected] topolino

2 Pluto [email protected] gambadilegno

3 Paperino [email protected] amaca

id autore titolo testo

1 3 Come appendere L’amaca è indubbiamente il


un’amaca miglior supporto per riposare…

© CINI - Rel. 06.02.2025


Database
11

➢ Per interagire con i database vengono utilizzati


linguaggi specifici
➢ SQL (Structured Query Language) è il linguaggio più
comune per i database relazionali
➢ Ogni DBMS (SQLite, MySQL, PostgreSQL…) può estendere il
linguaggio con tipi e funzionalità particolari
➢ I comandi inviati al database si chiamano query
© CINI - Rel. 06.02.2025
Database
12

➢ La sintassi completa
delle query SQL è
estremamente
complessa, ma gli usi
più comuni sono
limitati e molto
semplici
© CINI - Rel. 06.02.2025
Database
13

➢ Per leggere dati da una tabella si usa la query SELECT

➢ I risultati possono essere filtrati

© CINI - Rel. 06.02.2025


Database
14

➢ Per inserire dati in una tabella si usa la query INSERT

➢ Per modificare i dati in una tabella si usa la query UPDATE

© CINI - Rel. 06.02.2025


Database
15

➢ I server interagiscono con i database utilizzando


specifiche librerie e funzioni:

© CINI - Rel. 06.02.2025


Argomenti
16

➢ I database
➢ Le SQL injection

© CINI - Rel. 06.02.2025


Injection
17

➢ Le injection sono una macro-categoria di vulnerabilità


➢ Esistono perché i programmi hanno la necessità di
interagire con altri software:
➢ Database → SQL injection
➢ Comandi → command injection
➢ In queste interazioni spesso vengono utilizzati dati
inseriti da utenti
© CINI - Rel. 06.02.2025
SQL injection
18

➢ Prendiamo in analisi il seguente codice utilizzato per


fare il login:

© CINI - Rel. 06.02.2025


SQL injection
19

➢ In una richiesta normale i valori di username e


password vengono inseriti nella query tramite
concatenazione di stringhe:

admin
supersecret

© CINI - Rel. 06.02.2025


SQL injection
20

➢ Cosa succede se aggiungo un apice nell’username?


➢ Errore di sintassi!

admin’
supersecret

© CINI - Rel. 06.02.2025


SQL injection
21

➢ Potendo scappare dagli apici, è possibile iniettare del


codice SQL
➢ Questo tipo di vulnerabilità è chiamato SQL Injection

© CINI - Rel. 06.02.2025


SQL injection
22

➢ Proviamo a bypassare il login!


➢ Continuiamo ad avere un errore di sintassi :(

admin
boh’ OR True

© CINI - Rel. 06.02.2025


SQL injection
23

➢ In SQL il doppio trattino (--) denota l’inizio di un


commento
➢ Accediamo senza conoscere la password!

admin
boh’ OR True -- -

*MySQL richiede uno spazio dopo il doppio trattino, aggiungendo " –" siamo sicuri che l’attacco funzioni in tutti i DBMS

© CINI - Rel. 06.02.2025


SQL injection
24

➢ Come proteggersi dalle injection?


➢ Mai fidarsi dell’input utente!
➢ Utilizzare i prepared statement:

© CINI - Rel. 06.02.2025


SQL injection
25

➢ I prepared statement permettono di creare query


indicando al DBMS che alcuni valori sono input
utente
➢ I DMBS sanno che non possono fidarsi di questi
parametri e non li concatenano come stringhe, ma li
usano direttamente come valori

© CINI - Rel. 06.02.2025


SQL injection
26

➢ Esistono diversi metodi per sfruttare le SQL injection:


➢ Logic SQLi (come quella appena vista)
➢ UNION-based SQLi
➢ Blind SQLi:
➢ Error-based SQLi
➢ Time-based SQLi
➢ …

© CINI - Rel. 06.02.2025


Union based SQL injection
27

➢ SQL permette di unire più tabelle nei risultati di una


query:

posts
secret_posts title content
title content
title content Titolo di un post Contenuto di
Titolo di un post Contenuto di un post
Un post segreto Shhh!
un post
Un post segreto Shhh!

© CINI - Rel. 06.02.2025


Union based SQL injection
28

➢ Immaginiamo una query di questo tipo:

➢ Si potrebbe sfruttare per estrarre username e password dal


database:

© CINI - Rel. 06.02.2025


Blind SQL injection
29

➢ A volte un server non ci mostra i risultati della query,


ma ci fornisce solo messaggi di errore

GET /posts/42 GET /posts/1337

200 Success 404 Not found

© CINI - Rel. 06.02.2025


Blind SQL injection
30
Richiesta Risposta
➢ Si può sfruttare per
/posts/42 AND secret LIKE ‘a%' 404
fare bruteforce di un
/posts/42 AND secret LIKE ‘b%' 200
qualche segreto da
/posts/42 AND secret LIKE ‘ba%' 404
estrarre
/posts/42 AND secret LIKE ‘bb%' 404
➢ L’operatore LIKE
/posts/42 AND secret LIKE ‘bc%' 200
permette di verificare se
/posts/42 AND secret LIKE ‘bca%' 404
una stringa inizia con un
prefisso … …

© CINI - Rel. 06.02.2025


Time based SQL injection
31

➢ E se non abbiamo alcun tipo di output, neanche un


errore?
➢ Possiamo rallentare l’esecuzione con una SLEEP, che
possiamo chiamare nel caso in cui una condizione sia
vera
➢ Si può fare un bruteforce misurando il tempo di
esecuzione della query
➢ L’idea è «if secret starts with ‘a’ then sleep(1)»
© CINI - Rel. 06.02.2025
Time based SQL injection
32

➢ Diversi DBMS hanno comandi diversi per fare una


sleep:
➢ MySQL, MariaDB: SLEEP()
➢ Postgresql: PG_SLEEP()
➢ Sqlite non ha una sleep, ma esistono modi per rallentare
l’esecuzione della query
➢ …
© CINI - Rel. 06.02.2025
Cybersecurity National Lab

Web Security 2
Database

https://cybersecnatlab.it

Potrebbero piacerti anche