PySQLi - Virtualabs.fr

Transcription

PySQLi - Virtualabs.fr
PySQLi
Framework d'injection
de code SQL
Meeting #Hackerzvoice – 3 novembre 2012
Plan (1/2)
●
●
●
Les camés du SQL
☞
TOP 10 OWASP
☞
Rappels sur les injections
☞
Exploitations possibles
Outils (non exhaustif)
☞
Sqlmap
☞
Havij
☞
Limitations
Frameworks
☞
BBQSQL
☞
Limitations
2
Plan (2/2)
●
●
●
PySQLi
☞
Historique
☞
Principe
☞
Exemple
Exemples d'utilisation
☞
Formulaire anti-CSRF
☞
Ligne de commande
☞
Injection via protocole spécifique
Questions
3
Les camés du SQL
●
TOP 10 OWASP
☞
Une des vulnérabilités les plus exploitées


☞
Facile à exploiter


☞
Leaks sur pastebin
Différents dox
Navigateur
Cerveau 2.0
Peut aussi servir à faire plein d'autres choses …



Bypass d'authentification
Elévation de privilèges
Le café (naaah)
4
Injection SQL : rappels
●
●
Différents modes d'exploitation
☞
Timing attack
☞
Inband (UNION SELECT ...)
☞
Blind (dichotomie)
Différents DBMS
☞
Oracle
☞
MSSQL
☞
MySQL
☞
Informix
☞
PostgreSQL
Exploitations possibles
●
Extraction d'information
☞
Injection dans les paramètres (POST/GET)
☞
Injection dans les en-têtes HTTP


☞
Cookie
User-Agent
Injection dans les fichiers (via HTTP)
●
Injection d'information
●
Contournement d'authentification
Outils existant
●
●
Sqlmap
☞
Très fourni
☞
Permet d'exploiter un bon nombre de pages vulnérables
☞
Supporte différentes options d'attaque
☞
Must-have du pentester
Havij
☞
Outil Windows Click&Exploit
☞
Développé par des gens peu fiables
☞
Disponible sous forme d'exécutable, difficile de savoir ce qu'il
fait
☞
N00b !
Outils : limitations
●
●
●
Pratiques
☞
Dump automatique
☞
Test des paramètres vulnérables
MAIS
☞
Inutilisable dans le cas d'exploitations difficiles
☞
Injection autre part que dans des requêtes HTTP
impossible !
Un framework serait plus utile …
Frameworks
●
●
BBQSQL
☞
Framework python
☞
Supporte plusieurs techniques d'injection
☞
PYTHON on vous dit !
Limitations
☞
Déjà plus fourni
☞
Facilite le développement d'exploit
☞
On peut faire mieux ?
PySQLi
●
●
●
Python SQL injection framework
☞
Python c'est bon, mangez-en
☞
Facile à améliorer/étendre
☞
Compréhensible
Historique
☞
En développement depuis 3 ans ...
☞
Eprouvé en pentest
Approche différente des frameworks actuels
PySQLi : origine
●
●
Constat
☞
Identification par l'erreur ou le comportement
☞
Contexte d'injection généralement connu
Besoin
☞
Développer des exploits avancés


☞
Sqlmap suffit dans la plupart des cas
Quand sqlmap ne passe pas, c'est la misèèèère
Développer rapidement


Framework
Python
PySQLi
●
Principe
☞
Forge : moteur de génération de code SQL injecté
☞
Injecteur
☞
Trigger
Exemple
●
Exploitation d'une injection via URL
Framework extensible
●
Injection possible dans théoriquement
n'importe quoi
☞
Ligne de commande
☞
Requêtes HTTP
☞
Protocoles réseau spéciaux
☞
(D)TC
Exemples d'utilisation
●
Demos
☞
Formulaire avec anti-CSRF

☞
Injection dans une ligne de commande

☞
Pas supporté par sqlmap
… idem !
Injection dans un protocole d'authentification
maison
Téléchargement
●
Disponible sous github
☞
https://github.com/sysdream/pysqli/
Questions
?id=' OR '1'='1
PySQLi
Framework d'injection
de code SQL
Meeting #Hackerzvoice – 3 novembre 2012
Plan (1/2)
●
●
●
Les camés du SQL
☞
TOP 10 OWASP
☞
Rappels sur les injections
☞
Exploitations possibles
Outils (non exhaustif)
☞
Sqlmap
☞
Havij
☞
Limitations
Frameworks
☞
BBQSQL
☞
Limitations
2
Plan (2/2)
●
●
●
PySQLi
☞
Historique
☞
Principe
☞
Exemple
Exemples d'utilisation
☞
Formulaire anti-CSRF
☞
Ligne de commande
☞
Injection via protocole spécifique
Questions
3
Les camés du SQL
●
TOP 10 OWASP
☞
Une des vulnérabilités les plus exploitées


☞
Facile à exploiter


☞
Leaks sur pastebin
Différents dox
Navigateur
Cerveau 2.0
Peut aussi servir à faire plein d'autres choses …



Bypass d'authentification
Elévation de privilèges
Le café (naaah)
4
Injection SQL : rappels
●
●
Différents modes d'exploitation
☞
Timing attack
☞
Inband (UNION SELECT ...)
☞
Blind (dichotomie)
Différents DBMS
☞
Oracle
☞
MSSQL
☞
MySQL
☞
Informix
☞
PostgreSQL
Exploitations possibles
●
Extraction d'information
☞
Injection dans les paramètres (POST/GET)
☞
Injection dans les en-têtes HTTP


☞
Cookie
User-Agent
Injection dans les fichiers (via HTTP)
●
Injection d'information
●
Contournement d'authentification
Outils existant
●
●
Sqlmap
☞
Très fourni
☞
Permet d'exploiter un bon nombre de pages vulnérables
☞
Supporte différentes options d'attaque
☞
Must-have du pentester
Havij
☞
Outil Windows Click&Exploit
☞
Développé par des gens peu fiables
☞
Disponible sous forme d'exécutable, difficile de savoir ce qu'il
fait
☞
N00b !
Outils : limitations
●
●
●
Pratiques
☞
Dump automatique
☞
Test des paramètres vulnérables
MAIS
☞
Inutilisable dans le cas d'exploitations difficiles
☞
Injection autre part que dans des requêtes HTTP
impossible !
Un framework serait plus utile …
Frameworks
●
●
BBQSQL
☞
Framework python
☞
Supporte plusieurs techniques d'injection
☞
PYTHON on vous dit !
Limitations
☞
Déjà plus fourni
☞
Facilite le développement d'exploit
☞
On peut faire mieux ?
PySQLi
●
●
●
Python SQL injection framework
☞
Python c'est bon, mangez-en
☞
Facile à améliorer/étendre
☞
Compréhensible
Historique
☞
En développement depuis 3 ans ...
☞
Eprouvé en pentest
Approche différente des frameworks actuels
PySQLi : origine
●
●
Constat
☞
Identification par l'erreur ou le comportement
☞
Contexte d'injection généralement connu
Besoin
☞
Développer des exploits avancés


☞
Sqlmap suffit dans la plupart des cas
Quand sqlmap ne passe pas, c'est la misèèèère
Développer rapidement


Framework
Python
PySQLi
●
Principe
☞
Forge : moteur de génération de code SQL injecté
☞
Injecteur
☞
Trigger
Exemple
●
Exploitation d'une injection via URL
Framework extensible
●
Injection possible dans théoriquement
n'importe quoi
☞
Ligne de commande
☞
Requêtes HTTP
☞
Protocoles réseau spéciaux
☞
(D)TC
Exemples d'utilisation
●
Demos
☞
Formulaire avec anti-CSRF

☞
Injection dans une ligne de commande

☞
Pas supporté par sqlmap
… idem !
Injection dans un protocole d'authentification
maison
Téléchargement
●
Disponible sous github
☞
https://github.com/sysdream/pysqli/
Questions
?id=' OR '1'='1