Making network protocols go crazy - Mot-clé - reverse 2017-01-17T17:46:17+01:00 gr urn:md5:823289cecb88b10a72ab37a35928e25d Dotclear hubiC, maintenant vraiment ubiquitous urn:md5:d6ecd1c0b84490c2c50573ddb58901ec 2012-01-29T18:02:00+01:00 2013-06-12T07:28:33+02:00 gr Reverse hubicnewsPerlprotocolereverse <p>Votre serviteur s'est intéressé au <em>cloud storage</em> tel qu'implémenté par <a href="http://www.ovh.fr/hubiC/" hreflang="fr" title="hubiC">hubiC</a>. Malheureusement, <a href="http://ovh.com/" hreflang="fr" title="OVH">OVH</a> ne fournit pas encore de binaire pour <em>Linux</em>. Eh oui, <em>OVH</em> a choisi de rendre disponible son espace de stockage uniquement via un client lourd. J'ai décidé d'analyser ce programme afin rendre ce <em>cloud storage</em> interopérable avec mon système (c'est légal).</p> <p>Tout d'abord, certaines personnes arrivent à se connecter depuis Linux. Ces personnes possédaient un compte <em>CloudNAS</em>, le prédécesseur d<em>'hubiC</em>. Pour ces personnes, pas de problèmes. Pour les nouveaux arrivants (comme moi), le sytème de gestion des comptes d<em>'OVH</em> a changé. Un <em>WAS</em> (<em>Web Application Service</em>) est utilisé pour gérer les crédences d<em>'hubiC</em>. En analysant le programme <em>Windows</em>, je me suis aperçu que le client <em>hubiC</em> effectue 3 requêtes avant d'obtenir les informations qui serviront ensuite à la connexion <em>WebDAV</em>. Pour pouvoir se connecter, il est nécessaire d'avoir&nbsp;:</p> <ul> <li>l'URL du <em>WebDAV</em></li> <li>le login du <em>WebDAV</em></li> <li>le mot de passe du <em>WebDAV</em></li> </ul> <p>Les 3 requêtes sus-mentionnées sont destinées au serveur <em>ws.ovh.com</em> et permettent d'obtenir ces trois informations indispensables à la connexion <em>WebDAV</em>. Sans plus tarder, voici ces requêtes (en mode <em>raw</em>), toutes à destination de <em>ws.ovh.com</em> en <em>HTTPS</em>&nbsp;:</p> <p>Requête POST nasLogin&nbsp;:</p> <pre> 'POST /cloudnas/r0/ws.dispatcher/nasLogin HTTP/1.1'.&quot;\r\n&quot;. 'Content-Type: application/x-www-form-urlencoded'.&quot;\r\n&quot;. 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'.&quot;\r\n&quot;. 'Content-Length: 126'.&quot;\r\n&quot;. 'Connection: Keep-Alive'.&quot;\r\n&quot;. 'Accept-Encoding: gzip'.&quot;\r\n&quot;. 'Accept-Language: fr-FR,en,*'.&quot;\r\n&quot;. 'Host: ws.ovh.com'.&quot;\r\n&quot;. ''.&quot;\r\n&quot;. 'session=&amp;params=%7B%20%22email%22%20%3A%20%22&lt;login&gt;%22%2C%20%22password%2 2%20%3A%20%22&lt;password&gt;%22%20%7D'.&quot;\r\n&quot;. &quot;\r\n&quot;; </pre> <p>Requête POST getNas&nbsp;:</p> <pre> 'POST /cloudnas/r0/ws.dispatcher/getNas HTTP/1.1'.&quot;\r\n&quot;. 'Content-Type: application/x-www-form-urlencoded'.&quot;\r\n&quot;. 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'.&quot;\r\n&quot;. 'Content-Length: 54'.&quot;\r\n&quot;. 'Connection: Keep-Alive'.&quot;\r\n&quot;. 'Accept-Encoding:gzip'.&quot;\r\n&quot;. 'Accept-Language: fr-FR,en,*'.&quot;\r\n&quot;. 'Host: ws.ovh.com'.&quot;\r\n&quot;. ''.&quot;\r\n&quot;. 'session=&lt;id&gt;'.&quot;\r\n&quot;. &quot;\r\n&quot;; </pre> <p>Requête POST getCredentials&nbsp;:</p> <pre> 'POST /cloudnas/r0/ws.dispatcher/getCredentials HTTP/1.1'.&quot;\r\n&quot;. 'Content-Type: application/x-www-form-urlencoded'.&quot;\r\n&quot;. 'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'.&quot;\r\n&quot;. 'Content-Length: 54'.&quot;\r\n&quot;. 'Connection: Keep-Alive'.&quot;\r\n&quot;. 'Accept-Encoding: gzip'.&quot;\r\n&quot;. 'Accept-Language: fr-FR,en,*'.&quot;\r\n&quot;. 'Host: ws.ovh.com'.&quot;\r\n&quot;. ''.&quot;\r\n&quot;. 'session=&lt;id&gt;'.&quot;\r\n&quot;. &quot;\r\n&quot;; </pre> <p>Et voilà. Ca va renvoyer les trois précieuses informations.</p> <p>Certains pourraient me demander&nbsp;: mais comment avez-vous fait pour avoir ces informations&nbsp;? Le serveur d<em>'hubiC</em> est en <em>HTTPS</em>&nbsp;; on ne peut pas écouter la conversation entre le client et le serveur. Effectivement, sauf que le client tourne sur mon système. Rien ne m'empêche de brancher un débuggeur sur mon programme sur ma machine. En deux mots&nbsp;: <a href="http://www.ollydbg.de/version2.html" hreflang="en" title="OllyDbg">OllyDbg</a>, <em>SSL_write</em>.</p> <p>Bon, comme j'aime aussi le <em>Perl</em>, je fournis le programme qui permet de récupérer les précieux sésames&nbsp;: <a href="http://www.protocol-hacking.org/public/hubic.pl" hreflang="en" title="hubic.pl">http://www.protocol-hacking.org/public/hubic.pl</a></p> <pre> % ./hubic.pl Usage: ./hubic.pl -l login [-d] [-h] % ./hubic.pl -l &lt;mon_login_genre_une_adresse_email&gt; Password: URL: https://cloudnas1.ovh.com/XXXXXXXXXX/ Login: cloudnas Password: YYYYYYYYYY mount -t davfs https://cloudnas1.ovh.com/XXXXXXXXXX/ /mnt </pre> <p>Maintenant, <em>hubiC</em> fonctionne sur tous les systèmes supportant un client <em>WebDAV</em>.</p> <p><strong>UPDATE</strong>&nbsp;: la presse en parle&nbsp;:</p> <ul> <li><a href="http://www.pcinpact.com/news/68701-ovh-hubic-webdav-perl-script.htm" hreflang="fr" title="PCinpact">PCinpact</a></li> <li><a href="http://www.journaldulapin.com/2012/02/02/utiliser-lhubic-dovh-avec-un-mac/" hreflang="fr" title="Journal du lapin">Journal du lapin</a></li> <li><a href="http://www.presence-pc.com/actualite/hubic-mac-linux-46566/" hreflang="fr" title="Presence-PC">Presence-PC</a></li> <li><a href="http://www.macworld.fr/2012/02/03/mac/hubic-accessible-directement-depuis-finder/524459/" hreflang="fr" title="Mac world">Mac world</a></li> </ul> <p><strong>UPDATE</strong>&nbsp;: autres versions du programme&nbsp;:</p> <ul> <li><a href="http://www.protocol-hacking.org/public/Hubic.py" hreflang="en" title="En Python, par Nicolas P">Hubic.py</a></li> <li><a href="http://www.protocol-hacking.org/public/getHubicWebdavInfos.ps1" hreflang="en" title="En PowerShell, par Stephane OLIVIER">getHubicWebdavInfos.ps1</a></li> </ul> http://www.protocol-hacking.org/post/2012/01/29/Hubic%2C-maintenant-vraiment-ubiquitous#comment-form http://www.protocol-hacking.org/feed/atom/comments/26