From bcb21bb279fadf7cbaff404798a51e13304ac827 Mon Sep 17 00:00:00 2001 From: Vincent Mazenod <vmazenod@gmail.com> Date: Mon, 7 Jan 2019 23:30:23 +0100 Subject: [PATCH] js xss csrf --- content/Etudiants/zz2-f5-websec.md | 14 ++-- content/slides/1337/http.html | 24 ++++++ content/slides/1337/md/fi.md | 3 +- content/slides/1337/md/http.md | 128 +++++++++++++++-------------- content/slides/index.html | 1 + 5 files changed, 98 insertions(+), 72 deletions(-) diff --git a/content/Etudiants/zz2-f5-websec.md b/content/Etudiants/zz2-f5-websec.md index 403da54..68086b0 100644 --- a/content/Etudiants/zz2-f5-websec.md +++ b/content/Etudiants/zz2-f5-websec.md @@ -29,16 +29,16 @@ Tags: cours * [Upload](slides/1337/upload.htm) * [LFI_RFI](slides/1337/fi.htm) - * [XSS](https://doc.m4z3.me/_/1337/XSS.htm) - * [CSRF](https://doc.m4z3.me/_/1337/CSRF.htm) - * [SQLi](https://doc.m4z3.me/_/1337/SQLi.htm) - * [Drupalgeddon](https://doc.m4z3.me/_/1337/drupalgeddon.htm) + * [XSS](slides/1337/xss.html) + * [CSRF](slides/1337/csrf.html) + * [SQLi](slides/1337/sqli.htm) + * [Drupalgeddon](slides/1337/drupalgeddon.htm!) * Se protéger - * [Top10](https://doc.m4z3.me/_/1337/top10.htm) - * [anticiper](https://doc.m4z3.me/_/1337/anticiper.htm) - * [réagir](https://doc.m4z3.me/_/gdi/cnrs.htm#/cover) + * [Top10](slides/1337/top10.htm) + * [anticiper](slides/1337/anticiper.htm) + * [réagir](slides/gdi/cnrs.htm#/cover) <div class="panel panel-success"> diff --git a/content/slides/1337/http.html b/content/slides/1337/http.html index 0a38698..b6f5a99 100644 --- a/content/slides/1337/http.html +++ b/content/slides/1337/http.html @@ -66,5 +66,29 @@ ] }); </script> + <script> + document.addEventListener('DOMContentLoaded', function () { + q = "finger guns"; // search query + + request = new XMLHttpRequest; + request.open('GET', 'https://api.giphy.com/v1/gifs/random?api_key=GmPNFEPI5osSNgLf9IcWoq00anejpuQY&tag='+q, true); + + request.onload = function() { + if (request.status >= 200 && request.status < 400){ + data = JSON.parse(request.responseText).data.image_url; + document.getElementById("giphyjson").innerHTML = JSON.stringify(JSON.parse(request.responseText), null, 2); + document.getElementById("giphyme").innerHTML = '<center><img src = "'+data+'" title="GIF via Giphy"></center>'; + } else { + console.log('reached giphy, but API returned an error'); + } + }; + + request.onerror = function() { + console.log('connection error'); + }; + + request.send(); + }); + </script> </body> </html> diff --git a/content/slides/1337/md/fi.md b/content/slides/1337/md/fi.md index 9631666..64802ff 100644 --- a/content/slides/1337/md/fi.md +++ b/content/slides/1337/md/fi.md @@ -244,8 +244,7 @@ allowed to access /etc/passwd owned by uid 0 in /docroot/script.php on line 2 ## PHP [safe mode](http://php.net/manual/fr/ini.sect.safe-mode.php) -* résout le problème du partage de PHP - * environnement mutualisé +* senser résoudre le problème du partage de PHP en environnement mutualisé * déprécié en 5.3 * supprimé depuis 5.4 * approche non réaliste diff --git a/content/slides/1337/md/http.md b/content/slides/1337/md/http.md index 666d426..f1af617 100644 --- a/content/slides/1337/md/http.md +++ b/content/slides/1337/md/http.md @@ -49,7 +49,7 @@ Note: ## requête HTTP de la vraie vie -<pre><code data-trim> +```http GET / HTTP/1.1 Host: perdu.com User-Agent: Mozilla/5.0 (X11; Linux i686; rv:35.0) Gecko/20100101 Firefox/35.0 @@ -62,7 +62,7 @@ If-None-Match: "cc-480d5dd98a340" Cache-Control: max-age=0 useless data -</code></pre> +``` Connaissez vous Burp Suite? @@ -110,8 +110,7 @@ composée ## réponse HTTP de la vraie vie -<pre> -<code data-trim> +```http HTTP/1.1 304 Not Modified Date: Fri, 20 Feb 2015 15:15:01 GMT Server: Apache @@ -120,16 +119,15 @@ Keep-Alive: timeout=2, max=100 Etag: "cc-480d5dd98a340" Vary: Accept-Encoding -<html> - <head><title>Vous Etes Perdu ?</title></head> - <body> - <h1>Perdu sur l'Internet ?</h1> - <h2>Pas de panique, on va vous aider</h2> - <strong>* <----- vous êtes ici </strong> - </body> -</html> -</code> -</pre> +<html> + <head><title>Vous Etes Perdu ?</title></head> + <body> + <h1>Perdu sur l'Internet ?</h1> + <h2>Pas de panique, on va vous aider</h2> + <strong>* <----- vous êtes ici </strong> + </body> +</html> +``` Note: - Notez le header server qui donne déjà de l'information utile @@ -216,6 +214,39 @@ Note: - on est loin du site web au sens CMS, pourautant ces services sont soumis au mêmes vulnérabilités +## Exemple + +[https://gist.github.com/nealrs/28dbfe2c74dfdde26a30](https://gist.github.com/nealrs/28dbfe2c74dfdde26a30) + +```js +document.addEventListener('DOMContentLoaded', function () { + q = "finger guns"; + api_key = "crack me!"; + api_url = "https://api.giphy.com/v1/gifs/random"; + request = new XMLHttpRequest; + request.open('GET', api_url + '?api_key=' + api_key + '&tag='+q, true); + request.onload = function() { + if (request.status >= 200 && request.status < 400){ + data = JSON.parse(request.responseText).data.image_url; + html_data = '<img src = "' + data + '" title="GIF via Giphy">'; + document.getElementById("giphyme").innerHTML = html_data; + } + }; + request.send(); +}); +``` + + +<div id="giphyme"></div> + +<pre> +<div id="giphyjson"> +</code> +</pre> + +* [https://developers.giphy.com/docs/](https://developers.giphy.com/docs/) + + ## HTTP est "__stateless__"  @@ -229,12 +260,18 @@ Note: * introduits par Netscape en 1994 pour fiabiliser l'implémentation du panier d'achat virtuel * envoyés sous forme d'en tête HTTP par le serveur -<pre><code class="http">Set-Cookie: name=value[; Max-Age=age][; expires=date] + +```http +Set-Cookie: name=value[; Max-Age=age][; expires=date] [; domain=domain_name][; path=some_path][; secure] [; HttpOnly] -</code></pre> +``` + * renvoyés inchangés par le client à chaque requête -<pre><code class="http">Cookie: name=value</code></pre> + +```http +Cookie: name=value +``` ## les cookies @@ -254,59 +291,24 @@ Note: ## les sessions - * données gérées côté serveur +* données gérées côté serveur - * transimission de l'ID de session uniquement + * transimission de l'ID de session uniquement -<pre><code data-trim> - Cookie: PHPSESSID=hr0ms75gs6f7vlph0hhct2bjj3 -</code></pre> +```http +Cookie: PHPSESSID=hr0ms75gs6f7vlph0hhct2bjj3 +``` * accessibles via __$_SESSION__ en _PHP_ -## [__SOP__ Same Origin Policy](https://developer.mozilla.org/fr/docs/Web/JavaScript/) - - * concerne [XMLHttpRequest](https://fr.wikipedia.org/wiki/XMLHttpRequest) / [Ajax](https://fr.wikipedia.org/wiki/Ajax_(informatique%29) - * restreint les interactions d'une app web aux ressources ayant la même origine - * origine - * le protocole - * le port (si spécifié) - * l'hôte - - -## [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) - - * Cross Origin Resource Sharing - * contrôler les accès en mode cross-site - * effectuer des transferts de données sécurisés - -### client -<pre><code data-trim> - Origin: http://www.foo.com -</code></pre> +## local storage -### serveur -<pre><code data-trim> - Access-Control-Allow-Origin: http://www.foo.com -</code></pre> - -* <span style="color:red">* </span> dans le cas d'une ressource 100% publique - - -## [CORS](http://en.wikipedia.org/wiki/Cross-origin_resource_sharing) - -* autorise tous les verbes HTTP -* remplace [JSONP](https://en.wikipedia.org/wiki/JSONP) - * qui n'autorisait que la méthode GET - -[MDN|Contrôle d'accès HTTP](https://developer.mozilla.org/fr/docs/HTTP/Access_control_CORS) - -Note: -- l'introduction de cette nouvelle possibilité implique nécessairement que les serveurs doivent gérer de nouvelles entêtes, et doivent renvoyer les ressources avec de nouvelles entêtes également -- doit être supporté par le navigateur -- la valeur * est possible mais risquée -- requêtes simples, pré-vérifiées avec le verbe OPTIONS, avec habilitations en forcant l'envoie du cookie +* un peu comme les cookies MAIS + * données gérées coté client uniquement + * transmise par js via api ou via le cookie + * 5MB / domaine contre 4096bytes pour le cookie + * supprimable uniquement via js ## header, cookie, body, query string, script ... diff --git a/content/slides/index.html b/content/slides/index.html index 7f6c9de..e004a7b 100644 --- a/content/slides/index.html +++ b/content/slides/index.html @@ -26,6 +26,7 @@ Architecture <ul> <li><a href="1337/http.html">http</a> / <a href="privacy/tls.html#/0/52">https</a></li> + <li><a href="1337/js.html">JS</a></li> </ul> </li> <li> -- GitLab