Skip to content
Snippets Groups Projects
Commit bcb21bb2 authored by Vincent Mazenod's avatar Vincent Mazenod
Browse files

js xss csrf

parent 6bc57aab
No related branches found
No related tags found
No related merge requests found
......@@ -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">
......
......@@ -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>
......@@ -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
......
......@@ -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
&#x3C;html&#x3E;
&#x3C;head&#x3E;&#x3C;title&#x3E;Vous Etes Perdu ?&#x3C;/title&#x3E;&#x3C;/head&#x3E;
&#x3C;body&#x3E;
&#x3C;h1&#x3E;Perdu sur l&#x27;Internet ?&#x3C;/h1&#x3E;
&#x3C;h2&#x3E;Pas de panique, on va vous aider&#x3C;/h2&#x3E;
&#x3C;strong&#x3E;* &#x3C;----- vous êtes ici &#x3C;/strong&#x3E;
&#x3C;/body&#x3E;
&#x3C;/html&#x3E;
</code>
</pre>
<html>
<head><title>Vous Etes Perdu ?</title></head>
<body>
<h1>Perdu sur l&#x27;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__"
![alt text](images/http/stateless.jpg "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 ...
......
......@@ -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>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment