<?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>Segmentation fault &#187; réseau</title>
	<atom:link href="http://www.segmentationfault.fr/tag/reseau/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.segmentationfault.fr</link>
	<description>Projets d’un consultant en sécurité informatique</description>
	<lastBuildDate>Fri, 15 Feb 2019 08:02:10 +0000</lastBuildDate>
	<language>fr-FR</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.4.2</generator>
		<item>
		<title>Netcat, Cryptcat et Socat : 3 outils incontournables de réseau</title>
		<link>http://www.segmentationfault.fr/securite-informatique/netcat-cryptcat-socat/</link>
		<comments>http://www.segmentationfault.fr/securite-informatique/netcat-cryptcat-socat/#comments</comments>
		<pubDate>Fri, 31 Oct 2008 16:44:03 +0000</pubDate>
		<dc:creator>Emilien Girault</dc:creator>
				<category><![CDATA[Sécurité informatique]]></category>
		<category><![CDATA[hacking]]></category>
		<category><![CDATA[réseau]]></category>

		<guid isPermaLink="false">http://www.segmentationfault.fr/?p=281</guid>
		<description><![CDATA[En cours de Computer Systems Security, j&#8217;ai eu un TP de réseau sur la manipulation des outils Netcat, Cryptcat et Socat. Si vous faites du réseau mais ne connaissez pas ces outils (au moins Netcat), vous manquez vraiment quelque chose ! Il s&#8217;agit de trois petits outils à utilisation très simple mais aux possibilités innombrables. [...]]]></description>
			<content:encoded><![CDATA[<p>En cours de Computer Systems Security, j&rsquo;ai eu un TP de réseau sur la manipulation des outils Netcat, Cryptcat et Socat. Si vous faites du réseau mais ne connaissez pas ces outils (au moins Netcat), vous manquez vraiment quelque chose ! Il s&rsquo;agit de trois petits outils à utilisation très simple mais aux possibilités innombrables. Les trois ont un point commun : ils vous permettent de créer des connexions TCP ou UDP entre machine, mais chacun a ses particularités, dont je vais essayer de donner un bref aperçu.<span id="more-281"></span></p>
<h3>Netcat : Le couteau-suisse TCP/UDP</h3>
<p><a href="http://netcat.sourceforge.net/" target="_blank">Netcat</a> est disponible pour Linux et Windows et permet basiquement d&rsquo;ouvrir un flux TCP ou UDP entre deux machines. On pourrait considérer Netcat comme un <em>wrapper</em> pour les primitives d&rsquo;ouverture de sockets du système d&rsquo;exploitation. En une ligne de commande, il est possible de créer un serveur écoutant sur un port, ou bien se connecter à un port d&rsquo;une machine distante. Quelques exemples&#8230; Sur une première machine d&rsquo;adresse IP 192.168.0.1, tapez :</p>
<pre>nc -l -p 12345</pre>
<p>Et dans une autre d&rsquo;ip 192.168.0.2, tapez :</p>
<pre>nc 192.168.0.2 12345</pre>
<p>Tapez quelque chose dans une des consoles, suivi d&rsquo;un retour à la ligne ; ce que vous tapez apparaîtra dans l&rsquo;autre console. La 1ère ligne ouvrir un serveur en écoute sur le port 12345 de votre machine, et la 2ème vous permet de vous y connecter. Une fois la connexion établie, tout ce qui entre dans un des processus ressort par l&rsquo;autre : vous venez d&rsquo;établir un flux bi-directionnel entre les deux.</p>
<p>La puissance de Netcat vient du fait qu&rsquo;à la manière de l&rsquo;outil <em>cat</em> d&rsquo;Unix/Linux, il écoute sur l&rsquo;entrée standard et écrit sur la sortie standard. Il est donc possible de combiner les fonctionnalités réseau de Netcat avec la puissance du shell et des outils de communications interprocessus des environnements Unix/Linux. Par exemple, vous pouvez <em>piper</em> l&rsquo;entrée ou la sortie de Netcat, la rediriger dans un fichier&#8230; Quelques exemples simples :</p>
<ul>
<li><em>nc -l -p 12345 &lt; fichier.txt</em> vous permet de créer un serveur en écoute sur le port 12345 de votre machine. Tout client qui s&rsquo;y connectera recevra le fichier fichier.txt. Cela vous permet d&rsquo;envoyer des fichiers en réseau.</li>
<li><em>commande | nc -l -p 12345</em> vous permet d&rsquo;exécuter une commande shell et d&rsquo;envoyer le résultat au client qui se connectera au serveur.</li>
<li>De façon similaire, <em>nc -l -p 12345 | commande</em> permettra au client d&rsquo;envyoer des données à une commande lancée sur le serveur. <em>commande</em> peut être /bin/bash, ce qui vous permettra d&rsquo;exécuter des commandes à distance sur le serveur ! Petit bémol cependant : le client ne verra pas le résultat de la commande, puisque les pipes sont des tubes directionnels.</li>
<li>Pour remédier à cela, il existe une technique utilisant les tubes nommés (<em>named pipes</em>) d&rsquo;Unix: créez un tube nommé avec la commande <em>mkfifo /tmp/tube_test</em> puis lancez la commande <em>nc -l -p 12345 &lt; /tmp/tube_test | /bin/bash &gt; /tmp/tube_test</em>. Le client peut désormais s&rsquo;y connecter avec <em>nc &lt;IP&gt; 12345</em>, taper des commandes et observer le résultat ! Voila comment obtenir une backdoor à moindre coût sur un système <img src='http://www.segmentationfault.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </li>
</ul>
<p>Netcat n&rsquo;est bien entendu pas limité à se connecter à un autre Netcat ! Vous pouvez tout à fait vous en servir pour vous connecter à un service existant et dialoguer avec lui. Par exemple, en se connectant sur le port 25 d&rsquo;un serveur SMTP il est facile d&rsquo;envoyer un mail.</p>
<p>Netcat peut aussi être utilisé pour faire de la récupération de bannières applicatives (<em>banner grabbing</em>). Connectez-vous sur le port 22 d&rsquo;un serveur SSH : vous obtenez le nom du serveur avec sa version exacte. Idem pour tous les autres services&#8230; C&rsquo;est en utilisant cet outil qu&rsquo;on réalise à quel point certains services sont bavards. Pour vous en persuader, connectez-vous à un serveur Apache avec PHP configuré par défaut, envoyez une simple requête HTTP et observez la réponse ; il y a des fortes chances qu&rsquo;Apache vous révèle son numéro de version, celles de PHP, ainsi que les modules lancés.</p>
<p>Maintenant, rajoutez à cela toute une foule d&rsquo;options, et vous obtenez la réelle puissance de Netcat !</p>
<ul>
<li>L&rsquo;option <em>-c</em> permet de spécifier une commande à lancer et à laquelle se connecter ensuite. En d&rsquo;autre termes, Netcat va relier sa sortie à l&rsquo;entrée de cette commande, et relier la sortie de la commande à sa propre entrée. Exemple : <em>nc -l -p 12345 -c /bin/bash</em> est la version courte de notre dernier exemple, car cela crée automatiquement un serveur qui enverra toutes les entrées à /bin/bash et renverra tous les résultats au client. Mais il y a encore plus fort : vous pouvez utiliser une autre instance de Netcat comme ceci :</li>
</ul>
<blockquote>
<ul>
<li>Lancez sur une première machine IP_A un serveur sur le port 12346 : <em>nc -l -p 12346</em></li>
<li>Sur une deuxième machine IP_B, lancez <em>nc -l -p 12345 -c &lsquo;nc &lt;IP_A&gt; 12346&prime;</em> afin d&rsquo;ouvrir un serveur sur le port 12345 de la machine et de le relier au serveur de la 1ère</li>
<li>Sur une troisième machine, connectez-vous au 2ème serveur avec <em>nc &lt;IP_B&gt; 12345</em>. Tout ce que vous tapez est transmis à la 2ème machine qui retransmet le tout à la 1ère, et vice-cersa pour le retour. En gros, la 2ème machine fait office de proxy, ou <em>bouncer</em>. Le serveur final (1ère machine) ne verra jamais l&rsquo;adresse IP du client.</li>
</ul>
</blockquote>
<ul>
<li>Par défaut, Netcat utilise TCP. L&rsquo;option <em>-u</em> permet dele fiare basculer en mode UDP.</li>
<li>Par défaut, Netcat essaie de résoudre les DNS. Pour éviter cela en réseau local si vous n&rsquo;utilisez que des adresses IP, utilisez l&rsquo;option <em>-n</em>.</li>
<li>L&rsquo;option -z permet de fermer la connexion juste après qu&rsquo;elle ait été ouverte. En fait, cela permet de juste tester si un port est ouvert sans envoyer de données. En scriptantun minimum, il deviant facile de concevoir son propre scanner de port !</li>
</ul>
<p>Il existe bien d&rsquo;autres flags, à vous de les découvrir via l&rsquo;aide (<em>-h</em>) ou le manuel (<em>man nc</em>).</p>
<h3>Cryptcat : Netcat en crypté</h3>
<p>Si vous lancez Wireshark sur vos machines, vous vous apercevrez que vous pouvez tout à fait lire les données envoyées par Netcat. Pour remédier à cela, utilisez <a href="http://sourceforge.net/projects/cryptcat/" target="_blank">Cryptcat</a> à la place de Netcat ! Cet outil s&rsquo;utilise exactement comme Netcat mais encrypte le traffic grâce à un algorithme de chiffrement symétrique. La clé de chiffrement est par défaut <em>metallica</em> mais peut être changée avec l&rsquo;option <em>-k</em>. Attention, lisez bien l&rsquo;aide ou le manuel avant d&rsquo;utiliser Cryptcat car certaines versions ne supportent pas certains flags de Netcat.</p>
<h3>Socat : Relai bidirectionel</h3>
<p><a href="http://www.dest-unreach.org/socat/" target="_blank">Socat</a> (uniquement pour Linux/Unix) vous permet d&rsquo;établir non pas une mais deux connexions à la fois et de les relier. Cet outil possède une quantité phénoménales d&rsquo;options qui lui permettent de réaliser des opérations complexes de façon triviale. Socat est capable de lire/écrire dans tous types de flux, aussi bien réseau (TCP, UDP avec IPv4 et IPv6, SSL&#8230;) que systèmes (fichiers, file descriptors, pipes, terminaux virtuels, processus&#8230;). Comme exemple, recréons un bouncer mais cette fois-ci avec Socat :</p>
<pre>socat TCP4-LISTEN:&lt;port_source&gt; TCP4:&lt;IP_cible&gt;:&lt;port_cible&gt;</pre>
<p>N&rsquo;est-ce pas déconcertant de simplicité ? Et gardez à l&rsquo;esprit que ce n&rsquo;est qu&rsquo;une des possibilités&#8230; Tapez dans l&rsquo;aide pour la liste exhaustives des options supportées.</p>
<h3>Netcat, Cryptcat et Socat : l&rsquo;attirail obligatoire pour le réseau</h3>
<p>En résumé, Netcat permet d&rsquo;exécuter les opérations réseau de base, Cryptcat rajoute une couche de chiffrement à ces flux, et Socat permet de les relier de façon bidirectionnelle. Munis de ces outils, il devient très facile de manier les couches réseau. Outre l&rsquo;aspect &laquo;&nbsp;bidouillage&nbsp;&raquo;, ils permettent de tester rapidement le fonctionnement de certains services. En les combinant à des outils comme Nmap et TCPDump, et en développant un minimum de petits scripts, il est possible de coder des outils vraiment puissants. Bref, j&rsquo;espère vous avoir convaincu d&rsquo;adopter ces outils <img src='http://www.segmentationfault.fr/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.segmentationfault.fr/securite-informatique/netcat-cryptcat-socat/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>
