Même si le but n’a pas été atteint pour l’instant, de premiers résultats intéressants sont présentés :)

image

 

Pré-requis

 

1. Configuration de DotClear

Afin de respecter les bonnes pratiques de sécurité, nous allons créer un compte utilisateur dans DotClear ayant juste les permissions requises pour l’export des billets. Après avoir crée le compte blurp, on lui attribue la permission “gérer tous les billets et commentaires” pour le blog à exporter.

image

Dans les paramètres du blog, assurez-vous tout en bas de la page que l’interface XML-RPC est bien activée. Notez également l’URL du serveur.

image

 

2. Mise en place sur le poste de travail

Je pars de l’idée que Blurp est installé sur l’ordinateur et que les paramètres de proxy de la JRE utilisée par Blurp ont été édités comme suit:

  • http.proxyHost=localhost
  • http.proxyPort=8080
  • http.proxyHost=localhost
  • http.proxyPort=8080

Afin d’auditer voire éditer les requêtes que Blurp va faire, nous allons installer Burp – un outil fréquemment utilisé pour l’audit de sécurité d’application web. La version gratuite est de loin suffisante pour les besoins que nous allons avoir.

image

Finalement, il est également nécessaire de noter l’adresse IP du site Internet hébergeant notre blog – dans cet exemple ce sera 93.88.254.17.

 

3. Début de l’analyse des flux HTTP de Blurb

Comme mentionné dans un précédent billet, il semble que DotClear ait maintenant une interface XML-RPC préférant l’API WordPress à Movable Type.

Dans la fenêtre d’import de blog, donnons les coordonnées de notre utilisateur blurb et sélectionnons comme service WordPress:

image

La requête interceptée par burp est la suivante:

POST /xmlrpc.php HTTP/1.1
Content-Type: text/xml
User-Agent: Blurb BookSmart 3.0.3
Cache-Control: no-cache
Pragma: no-cache
Host: wordpress.com
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
Proxy-Connection: keep-alive
Content-Length: 199

<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>wp.getUsersBlogs</methodName>
<params><param><value>blurp</value></param>
<param><value>[ceci fut mon mot de passe…]</value>
</param></params></methodCall>

 

4. Re-routage des requêtes vers notre blog

Burp va nous permettre de mettre un certain nombre de règles afin d’envoyer cette requête non pas chez WordPress.com mais directement sur notre blog. Pour ce faire, nous devons:

  • faire en sorte que la requête parte sur notre blog au lieu de wordpress.com
  • réécrire les URLs afin qu’elles soient adaptées pour DotClear

 

4.1 Correction de la résolution hostname - IP

Comme toutes les requêtes sont passées via notre proxy Burp, nous pouvons y changer l’assignation hostname – adresse IP. Cela se fait facilement dans l’onglet Options de Burp:

image

4.2 Redirection appropriée des URLs

Il est également nécessaire de corriger les URLs ainsi que le champ Host: de l’entête HTTP. Les options nécessaires à cela sont disponibles dans l’onglet Proxy – sous-onglet options – section match and replace.

Il est nécessaire d’ajouter les règles suivantes:

Type Match Replace
request header POST /xmlrpc.php POST /[Votre URL]/index.php?xmlrpc/default
request header Host: wordpress.com Host:www.ness.ch

image

4.3 Test de connexion

Le grand moment est là – vérifions si nous arrivons à récupérer la liste des blogs:

image

Bingo, la liste nous est retournée!

image

 

5. Ce qui ne marche pas… encore

Malheureusement, la suite de l’import ne marche pas.

image

Au lieu d’utiliser des APIs standards XML/RPC, Blurb fait des requêtes spécifiques à WordPress et pour lesquels il n’existe pas d’équivalent DotClear – du moins d’après mes premières investigations. Telle était ma liste de règles Burp avant que j’abandonne provisoirement cette voie.

Type Match Replace
request header POST /xmlrpc.php POST /[Votre URL]/index.php?xmlrpc/default
request header POST /wp-login.php POST /[Votre URL]/admin/auth.php
request header POST /wp-admin/export.php\?download=true&author=all POST /[Votre URL]/admin/plugin.php?p=importExport&t=e&f=dcExportFlat
request header Host: wordpress.com Host:www.ness.ch