Making network protocols go crazy

Aller au contenu | Aller au menu | Aller à la recherche

hubiC, maintenant vraiment ubiquitous

Votre serviteur s'est intéressé au cloud storage tel qu'implémenté par hubiC. Malheureusement, OVH ne fournit pas encore de binaire pour Linux. Eh oui, OVH 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 cloud storage interopérable avec mon système (c'est légal).

Tout d'abord, certaines personnes arrivent à se connecter depuis Linux. Ces personnes possédaient un compte CloudNAS, le prédécesseur d'hubiC. Pour ces personnes, pas de problèmes. Pour les nouveaux arrivants (comme moi), le sytème de gestion des comptes d'OVH a changé. Un WAS (Web Application Service) est utilisé pour gérer les crédences d'hubiC. En analysant le programme Windows, je me suis aperçu que le client hubiC effectue 3 requêtes avant d'obtenir les informations qui serviront ensuite à la connexion WebDAV. Pour pouvoir se connecter, il est nécessaire d'avoir :

  • l'URL du WebDAV
  • le login du WebDAV
  • le mot de passe du WebDAV

Les 3 requêtes sus-mentionnées sont destinées au serveur ws.ovh.com et permettent d'obtenir ces trois informations indispensables à la connexion WebDAV. Sans plus tarder, voici ces requêtes (en mode raw), toutes à destination de ws.ovh.com en HTTPS :

Requête POST nasLogin :

'POST /cloudnas/r0/ws.dispatcher/nasLogin HTTP/1.1'."\r\n".
'Content-Type: application/x-www-form-urlencoded'."\r\n".
'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
'Content-Length: 126'."\r\n".
'Connection: Keep-Alive'."\r\n".
'Accept-Encoding: gzip'."\r\n".
'Accept-Language: fr-FR,en,*'."\r\n".
'Host: ws.ovh.com'."\r\n".
''."\r\n".
'session=&params=%7B%20%22email%22%20%3A%20%22<login>%22%2C%20%22password%2
2%20%3A%20%22<password>%22%20%7D'."\r\n".
"\r\n";

Requête POST getNas :

'POST /cloudnas/r0/ws.dispatcher/getNas HTTP/1.1'."\r\n".
'Content-Type: application/x-www-form-urlencoded'."\r\n".
'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
'Content-Length: 54'."\r\n".
'Connection: Keep-Alive'."\r\n".
'Accept-Encoding:gzip'."\r\n".
'Accept-Language: fr-FR,en,*'."\r\n".
'Host: ws.ovh.com'."\r\n".
''."\r\n".
'session=<id>'."\r\n".
"\r\n";

Requête POST getCredentials :

'POST /cloudnas/r0/ws.dispatcher/getCredentials HTTP/1.1'."\r\n".
'Content-Type: application/x-www-form-urlencoded'."\r\n".
'User-Agent: hubiC/1.0.9 (Windows NT 6.1; fr_FR)'."\r\n".
'Content-Length: 54'."\r\n".
'Connection: Keep-Alive'."\r\n".
'Accept-Encoding: gzip'."\r\n".
'Accept-Language: fr-FR,en,*'."\r\n".
'Host: ws.ovh.com'."\r\n".
''."\r\n".
'session=<id>'."\r\n".
"\r\n";

Et voilà. Ca va renvoyer les trois précieuses informations.

Certains pourraient me demander : mais comment avez-vous fait pour avoir ces informations ? Le serveur d'hubiC est en HTTPS ; 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 : OllyDbg, SSL_write.

Bon, comme j'aime aussi le Perl, je fournis le programme qui permet de récupérer les précieux sésames : http://www.protocol-hacking.org/public/hubic.pl

% ./hubic.pl 
Usage: ./hubic.pl -l login [-d] [-h]
% ./hubic.pl -l <mon_login_genre_une_adresse_email>
Password:
URL:      https://cloudnas1.ovh.com/XXXXXXXXXX/
Login:    cloudnas
Password: YYYYYYYYYY

mount -t davfs https://cloudnas1.ovh.com/XXXXXXXXXX/ /mnt

Maintenant, hubiC fonctionne sur tous les systèmes supportant un client WebDAV.

UPDATE : la presse en parle :

UPDATE : autres versions du programme :

Commentaires

1. Le jeudi, février 2 2012, 15:46 par sbz

Super, je te conseil d'essayer ospy [1] et rohitab api monitor [2] aussi pour débugger/tracer/sniffer les application windows.

1] https://code.google.com/p/ospy
2] http://www.rohitab.com/apimonitor

2. Le jeudi, février 2 2012, 15:55 par GR

Merci pour l'info.

J'avais testé rohitab, mais bien trop lourd pour faire un simple breakpoint sur une function (SSL_write dans mon cas).

3. Le jeudi, février 2 2012, 16:19 par N.

Merci, mais j'ai un petit souci avec le script, j'obtient
"postNasLogin failed"
Je viens de retester les identifiants, et il n'y a pas de problème sur le manager d'ovh, je peux me connecter.

Est-ce que cela viendrait que j'ai un "." dans mon adresse email? (mon mot de passe contient que des caractères alphanumérique)

Merci d'avance =)

4. Le jeudi, février 2 2012, 17:43 par Baxterx

Même problème que toi.
"postNasLogin failed" lorsque je valide mon mot de passe.

5. Le jeudi, février 2 2012, 18:26 par GR

Oui, vous devez installer le module Perl qui va bien pour gérer le HTTPS : LWP::Protocol::https.

Utilisez soit le package manager de votre système, soit la commande :

% sudo cpan LWP::Protocol::https
6. Le jeudi, février 2 2012, 18:54 par Baxterx

... en effet.
Par contre, je ne vois rien apparaître dans mon dossier /mnt. Mais je vais voir ça se plus près.

7. Le jeudi, février 2 2012, 19:01 par GR

C'est normal. L'outil affiche une ligne qu'il faut copier/coller pour exécution. C'est juste un helper pour montrer comment monter un partage WebDAV sous Linux.

8. Le jeudi, février 2 2012, 19:13 par Baxterx

Ok, mais au risque d'etre lourd, j'ai l'erreur suivante qui apparait:
"mount: unknown filesystem type 'davfs'"

je suis en train de rechercher un Internet mais rine d'interressant apparait.

9. Le jeudi, février 2 2012, 19:16 par GR

Là, ça sort de mon cadre. You are on your own.

10. Le jeudi, février 2 2012, 22:00 par AKoine

Merci, ça marche d'enfer !!! Monté dans Dolphin etc. Super !

@ Baxterx : t'as installé davfs2 ? Sur mon opensuse 12.1, le paquet n'était pas installé, il a fallu que j'aille le chercher dans des dépôts extra ...

11. Le jeudi, février 2 2012, 22:42 par mirtouf

Man, YOU really made my day !

Ton script + rsync et on a une petite sauvegarde distante accessible par webdav. Génial !

12. Le vendredi, février 3 2012, 05:11 par couloucoucou

Merci de faire le taff d'OVH à leur place! Je désespérais de pouvoir me servir d'Hubic de manière pratique et utile.

13. Le vendredi, février 3 2012, 07:21 par MrGermain

Kudos pour le travail!!!

Merci et bonne continuation

14. Le vendredi, février 3 2012, 09:53 par N.

Merci GR, c'était ça :)

15. Le vendredi, février 3 2012, 10:14 par Baxterx

Akoine:
Merci monsieur!! ;)
couloucoucou:
Apparement une version Mac et Linux est dans les cartons

16. Le vendredi, février 3 2012, 10:23 par AKoine

@Baxterx : My pleasure, sir. ;)

La version Mac est annoncée pour ce mois-ci, pas de date de sortie pour la version Linux par contre (même s'ils ont effectivement dit travailler dessus) ... :(

17. Le vendredi, février 3 2012, 10:43 par WeetA

Bonjour

merci pour ce script perl bien pratique.
J'ai converti viteuf (hors gestion erreurs) en powershell

UPDATE par GR : voir le lien suivant pour le script en PowerShell :

http://www.protocol-hacking.org/public/getHubicWebdavInfos.ps1

18. Le vendredi, février 3 2012, 11:00 par GR

@WeetA ça prend de la place ton truc. Si tu me mail le fichier je peux l'uploader et le mettre en lien (adresse : gr_at_protocol-hacking.org).

19. Le vendredi, février 3 2012, 12:29 par temp

MErci ... tu est mon dieux vivant au moins jusqu'a la fin du mois !

20. Le vendredi, février 3 2012, 13:10 par DD

Moi j'ai un problème avec linux
commande : ./hubic.pl -l nom@ndd.fr [-d] [-h]
j'ai : ./hubic.pl: Permission non accordée
Pourquoi ?

21. Le vendredi, février 3 2012, 14:10 par WeetA

@GR
j'vais refaire ça plus propre :) et je te l'envoie

22. Le vendredi, février 3 2012, 15:27 par AKoine

@DD : t'as vérifié que le fichier était exécutable ? Clic-droit dessus, propriétés, en général c'est une case à cocher à côté des permissions (propriétaire, groupe, etc.)

23. Le vendredi, février 3 2012, 15:40 par bruno

Ca semble super. Y'a t'il un moyen de passer les proxy ?

24. Le vendredi, février 3 2012, 20:04 par Pat

Et sinon, il y a CRDF Cloud qui fonctionne sans logiciel :).

25. Le vendredi, février 3 2012, 20:42 par sperenz55

Merci WeetA pour le script en powersheel mais quand je l'execute la 1er erreur c'est : Le serveur distant a retourné une erreur : (404) Introuvable.
J'en ai plein d'autre par la suite mais je suppose que cela provient juste de la page 404.

Merci encore pour l'effort !

26. Le vendredi, février 3 2012, 21:05 par DD

"@DD : t'as vérifié que le fichier était exécutable ? Clic-droit dessus, propriétés, en général c'est une case à cocher à côté des permissions (propriétaire, groupe, etc.)"
Merci c'est mieux, mais maintenant j'ai des messages d'erreur

27. Le vendredi, février 3 2012, 21:33 par romain

Merci pour votre travail.
Perso j'ai: erreur http: cannot resolve hostname (https) sous ubuntu que je ne sais pas resoudre.

28. Le samedi, février 4 2012, 10:42 par AKoine

@ romain : l'erreur, c'est quand tu veux utiliser le serveur via nautilus ? Si c'est ça, il faut virer le https:// au début, et spécifier que c'est une connexion sécurisée ...

29. Le samedi, février 4 2012, 12:45 par Tonio

Ca pose un pb si l'adresse mail comporte le caractère + ?

J'ai ce message en retour
URL: {"answer":null,"version":"1.0","error":{"__class":"result:error","status":301,"message":"This session id is not valid or expired : {\"answer\":null,\"version\":\"1.0\",\"error\":{\"__class\":\"result:error\",\"status\":310,\"message\":\"Wrong user id or password: Can't Login\",\"textStatus\":null},\"id\":0}","textStatus":"SessionExpired"},"id":0}
Login: {"answer":null,"version":"1.0","error":{"__class":"result:error","status":301,"message":"This session id is not valid or expired : {\"answer\":null,\"version\":\"1.0\",\"error\":{\"__class\":\"result:error\",\"status\":310,\"message\":\"Wrong user id or password: Can't Login\",\"textStatus\":null},\"id\":0}","textStatus":"SessionExpired"},"id":0}
Password: {"answer":null,"version":"1.0","error":{"__class":"result:error","status":301,"message":"This session id is not valid or expired : {\"answer\":null,\"version\":\"1.0\",\"error\":{\"__class\":\"result:error\",\"status\":310,\"message\":\"Wrong user id or password: Can't Login\",\"textStatus\":null},\"id\":0}","textStatus":"SessionExpired"},"id":0}

30. Le samedi, février 4 2012, 12:49 par Tonio

Je me réponds à moi même, on peut utiliser le nichandle donné par Ovh au lieu du mail et là plus de pb.

31. Le dimanche, février 5 2012, 13:38 par WeetA

@sperenz55, attention, les urls visibles (en rouge) sont tronquées.
il faut les remplacer par leur version complète via "copier l'adresse du lien" (ou équivalent)

32. Le dimanche, février 5 2012, 15:54 par WeetA

@GR, script powershell envoyé par mail

33. Le dimanche, février 5 2012, 17:14 par GR

J'ai uploadé les deux scripts (Python et PowerShell). Voir UPDATE à la fin du post. Merci aux contributeurs.

34. Le lundi, février 6 2012, 15:35 par sperenz55

Merci pour l'upload des scripts ! ca marche très bien

35. Le mercredi, février 8 2012, 13:54 par CircleCode

pour gérer correctement les caractères particuliers dans l’adresse mail ou le password, il faut urlencoder ces derniers. J'envoie par mail une version mise à jour du script python.

36. Le mercredi, février 8 2012, 21:25 par GR

J'ai mis à jour. Merci.

37. Le jeudi, février 9 2012, 21:33 par BobCaTT

Pouer les personnes interessees, lors de l;installation du client si la langue choisi n'est pas "Francais" alors la licence n'est pas affichee dans son integral a l'utilisateur.

La version anglaise retourne betement un lien vers ovh.co.uk, pour la version espagnole c'est carrement un encadre vide.

Je me demande donc des consequences que cela pourrait avoir devant un tribunal...

38. Le jeudi, février 9 2012, 21:39 par BobCaTT

Edit : Lors de la creation d'un compte, quelque soit le pays choisi, la langue proposee pour la licence n'est affichee qu'en francais.

Dommage !

39. Le samedi, février 11 2012, 00:36 par Totor

Super ce script.. ça marche du feu de dieu!!
Merci à donf!

40. Le samedi, février 11 2012, 02:35 par FanJoe

Merci pour ce script ! :-)
Ça fonctionne nickel !

41. Le mercredi, février 15 2012, 22:58 par qud

Merci pour ce script !
Fonctionne sans pb sur ubuntu (11.10) ;)

42. Le lundi, février 20 2012, 17:32 par willemijns

Bravo et merci ;)

43. Le vendredi, mars 2 2012, 11:23 par rangzen

GG!

44. Le vendredi, mars 2 2012, 15:57 par rangzen

The python script with config file :)
https://bitbucket.org/rangzen/hubic...

45. Le jeudi, mars 22 2012, 11:44 par jcv

Merci,
Enfin j'arrive à me connecter depuis mon Mac. L'appli Mac d'OVH est totalement incapable ;-(

Super job ;-)

46. Le jeudi, mars 22 2012, 17:48 par Hialmar

Merci beaucoup pour le script et le boulot (qui devrait être récompensé par OVH ;)

Au cas où d'autres auraient le même problème, si vous devez passer par un proxy il suffit de modifier le début du fichier ainsi :

my $ua = LWP::UserAgent->new;
$ua->agent("hubiC/1.0.9 (Windows NT 6.1; fr_FR)");
my $proxy = 'http://proxy.toto.com:8001'; // ICI on met le nom du proxy et le port
$ua->proxy(['http', 'https'], $proxy); // Et ça ça le rajoute à l'UA.
$h{_ua} = $ua;

47. Le samedi, mars 24 2012, 00:12 par smoofy

Pour ceux qui sont sous OSX, j'ai fait un script AppleScript pour monter automatiquement le volume.
Le login et mot de passe sont stockés dans Keychain Access (Trousseau d'accès).
J'ai dû modifier le script perl d'origine pour qu'il accepte le mot de passe en paramètre.
Dispo ici : http://dl.dropbox.com/u/20410649/hu...

48. Le mercredi, mars 28 2012, 15:04 par Franck Dernoncourt

Merci beaucoup ! Cela va me permettre de ne pas passer par hubiC-drive ni hubiC-browser avec lesquels les transferts de fichiers sont fastidieux...

Le script de python de Nicolas marche impeccable !

49. Le jeudi, mars 29 2012, 15:20 par rapetou

Bonjour,

Pour le hubic du boulot, ça marche parfaitement. Par contre pour celui personnel, j'ai un message d'erreur
URL: {"answer":null,"version":"1.0","error":{"__class":"result:error","stat
us":451,"message":"Query cloudnas::r0#getNas quota has been exceeded (500 per 36 00 seconds) and will be replenished in 28800 seconds.","textStatus":null},"id":0}

Est-ce que quelqu'un sait ce que cela veut dire ?

Merci

50. Le jeudi, avril 5 2012, 23:34 par Lucassen

Mortel GR !
Ca me fait une sauvegarde pas cher sur mon NAS Synology ! :)

Muchas Gracias !

51. Le mercredi, avril 25 2012, 13:43 par sbah

Alors là, chapeau !

52. Le lundi, avril 30 2012, 23:59 par Pierre

Super ! Grace a toi le service hubiC devient incontournable.
Pourquoi OVH ne communique-t-il pas sur l'accès WebDav?
Maintenant je vois hubiC comme un disque réseau sur mon linux, et les données importantes de mon NAS sont automatiquement sauvegardées.
Bravo et encore merci.

53. Le samedi, mai 5 2012, 07:48 par Dominique

C'est de la balle ! Merci pour le script.
C'est la meilleur offre de stockage public online pour Linux.

54. Le lundi, mai 7 2012, 14:11 par iblis

Merci pour le script. Juste, si t'as remarqué, l'echo du shell n'est pas restitué après exécution du script. Faut juste un ReadMode('normal'); après $password = <>;

55. Le mardi, mai 8 2012, 23:04 par i-blis

J'ai commis un script ruby qui fait la même chose un peu différemment et l'ai posté sur Github, pour ceux que ça intéressent : https://gist.github.com/2639276

56. Le vendredi, mai 18 2012, 08:14 par frtr

Bonjour, merci de partager les effets de vos compétences, je vous envie ... j'en profite et j'apprends. Par contre, j'accéde bien à mon espace via nautilus en webdav mais pas avec dejà up (sauvegarde sous ubuntu 12.04 à jour) pour mes sauvegardes ...Erreur HTTP : Cannot resolve hostname (cloudnas1.ovh.com/mon_id_serveur_hubic)
J'ai essayé tout une série de façon de faire, mais non... Une idée ?
Merci, frtr.

57. Le vendredi, juin 14 2013, 15:26 par idoin

Est-ce que tout cela fonctionne encore à la date d'aujourd'hui (mi-juin 2013)?? J'avais cru comprendre que la possibilité d'utiliser Hubic sous Linux avait complètement disparu ? Ce n'est donc pas le cas ? (je ne suis toujours pas inscrit à Hubic précisément pour cette raison, étant intégralemet sous Linux Ubuntu 13.04 ou Mageia 3).
Merci pour toutes précisions.

58. Le vendredi, juin 14 2013, 15:54 par GR

Je ne sais pas ;) l'inscription étant gratuite, tu peux tester et nous faire un retour ^^

59. Le mardi, juin 25 2013, 14:04 par Tfid

Non cela ne fonctionne plus.
OVH a changé de système pour Hubic. Donc le client webdav ne peux plus fonctionner.
Il faut maintenant utiliser un client swift.
Je prévois d'ailleurs de tester sous peu.
CF:
http://blog.guiguiabloc.fr/index.ph...

60. Le mercredi, juillet 24 2013, 12:33 par toine512

Le script ne fonctionne plus depuis bien 6 mois. La méthode d'authentification a un peu changé. Je crois qu'un hash est généré par le client à un moment, je ne m'en souviens plus vraiment.

Ajouter un commentaire

Le code HTML est affiché comme du texte et les adresses web sont automatiquement transformées.

Fil des commentaires de ce billet