PROJET AUTOBLOG


Le blog de Seboss666

Site original : Le blog de Seboss666

⇐ retour index

Différentes versions de PHP pour Debian

lundi 15 juillet 2019 à 18:30

Un des gros, gros avantages que j’ai découvert en utilisant CentOS chez LinkByNet, c’est le système très avantageux de Software Collections, notamment utilisé par Rémi Collet pour nous gratifier de dépôts extrêmement complets des différentes versions de PHP en circulation (voyez ça comme des PPA sous Ubuntu). Et je pestais à l’époque de ne pas avoir un système similaire sous Debian, jusqu’à récemment.

En effet, toutes les recherches que je faisais aboutissaient presque invariablement à une compilation manuelle à la fois compliquée à maintenir et très consommatrice en temps. Et je déteste les compilations manuelles. J’avais malgré tout fini par tenter d’utiliser phpbrew pour un client à la plateforme vieillissante et trop rigide pour permettre une mise à jour sereine.

Avec la sortie prochaine de CentOS 8, je vais pouvoir tester le remplaçant des SCL, à savoir les Streams, qui promettent un fonctionnement similaire, limite plus intégré, mais je n’ai pas encore creusé le sujet au-delà des annonces presse. Et je me suis une fois de plus tourné vers Debian pour savoir si la situation a évolué.

Il s’avère que cette fois, je suis tombé sur des résultats qui me plaisent beaucoup plus, à savoir qu’un développeur Debian du nom d’Ondřej Surý, qui s’occupe justement des paquets PHP qui sont inclus dans Debian, maintient un dépôt perso pour Debian et Ubuntu contenant les versions récentes de PHP, et qu’il est possible de les installer en parallèle. Oui, l’équivalent donc des dépôts de Rémi pour l’univers Redhat 🙂

Et on est sur le même niveau de sérieux finalement, bien que Rémi soit directement contributeur PHP, ce que ne semble pas être Ondřej, mais je ne comptes pas lui en tenir rigueur étant donné la générosité. Générosité récompensée par certains qui le soutiennent sur Patreon, à hauteur en moyenne de 5 dollars par personne par mois, pas dégueulasse pour un sacré boulot.

Les détails pour l’installation sont disponibles sur ce site (attention, design ultra-minimaliste). À savoir que Jessie, Strech, et la prochaine Buster (qui doit arriver bientôt si ce n’est pas déjà fait à la sortie de ce billet) sont supportées, pour les architectures x86 (32 et 64bit), et ARM (32 et 64bit également), les paquets sources sont évidemment proposés. Et grâce à ce dépôt, on peut installer de PHP 5.6 à 7.3 (même si cette dernière est déjà incluse dans Buster), tout en parallèle, ce qui est bien plus pratique pour gérer des projets historiques au code pas forcément adapté aux versions plus récentes (et je peux vous dire en tant qu’infogéreur que ça arrive très, très souvent, trop souvent pourrait-on dire).

Le seul manque finalement par rapport aux SCL est l’absence de « switch » au runtime. Je m’explique, quand vous avez plusieurs versions de PHP en parallèle, soit vous avez à disposition des alias comme le propose Rémi (php72, php73, etc) pour exécuter PHP en ligne de commande, soit vous allez à chaque fois chercher le chemin du binaire à lancer. Lourd, pas pratique, et des outils comme composer et frameworks comme symfony sont des champions de la feignantise en ne cherchant qu’une unique commande « php », qui parfois n’existe même pas par elles-mêmes si l’on a que des sources SCL pour PHP. Il existe donc une commande pour « créer » cet alias php à la volée :

$ scl enable php72 'php -v'
PHP 7.2.0 (cli) (built: Nov 28 2017 10:27:47) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2017 Zend Technologies
with Zend OPcache v7.2.0, Copyright (c) 1999-2017, by Zend Technologies
with Xdebug v2.6.0alpha1, Copyright (c) 2002-2017, by Derick Rethans

De cette manière, tous les outils de développeurs feignants savent fonctionner dans la version attendue (pratique aussi quand on enchaîne les commandes PHP dans un fichier Makefile).

Donc là sous Debian il faudra encore « bidouiller » un peu pour arriver au même résultat, mais déjà s’affranchir de la compilation manuelle et la possibilité d’avoir plusieurs versions en parallèle facilement est un gros plus. Encore merci Ondřej 🙂

On change le PC de jeu ! (part 2)

vendredi 12 juillet 2019 à 18:30

Pour les petits nouveaux qui viennent d’arriver, je viens de démarrer un projet pour changer de PC de jeu. On a eu le gros des annonces, les disponibilités, les détails sont apparus entre temps, les tests aussi, quelles sont donc les conséquences sur mes prochains choix, mes craintes, mes confirmations ? Si finalement on en est pas encore à l’achat, il est tout de même intéressant de faire le point.

Soucis avec les cartes mères B450 non mises à jour, pas de bootkit pour aider, tarifs hors de prix pour les X570. Les SSD PCI-Express 4 sortent avec des radiateurs de la mort, manifestement le gain de performances se fera avec un gros impact sur la consommation. C’est donc moins pressé que j’envisage ces solutions, ce qui m’arrange car je dois encore surveiller mes finances. Pire, AMD joue la carte de la désactivation pour vanter ses nouvelles plateformes très chères 🙁

Les tarifs sont tenus sur les CPUs, en plus AMD a enfoncé le clou avec un modèle particulièrement furieux pour un tiers du prix de la prestation équivalente chez Intel. Donc définitivement, je vais chez AMD pour le prochain CPU. Mais l’histoire du PCI-E 4 me fait dire que ce n’est peut-être pas aussi nécessaire qu’on le pense, je pourrais donc grandement baisser la facture en démarrant sur du 3.0, à surveiller les bonnes affaires qui devront être très convaincantes pour me faire revenir sur ce point.

Plus mitigé sur les Radeon, finalement, avec les détails qui affluent, la consommation ne semble pas si intéressante malgré la finesse de gravure annoncée. Les premiers tests semblent cependant montrer que les cartes tiennent leurs promesses sur la majorité des plans, bien que ce soit du résultat préliminaire, les testeurs attendaient plus, mais avec les partenaires qui pourront s’approprier les puces et les designs, on risque de voir arriver des modèles très, très intéressants. Reste à voir comment AMD va pouvoir capitaliser sur cette nouvelle architecture, on l’attend toujours pour mettre une raclée à Nvidia sur le haut de gamme, espérons que ça ne fasse pas le même refrain qu’avec la Radeon VII.

Ça n’empêche pas de rager pendant ce temps sur des promos de ouf sur les composants actuels, qui permettraient de gratter une config à vraiment pas cher. Si vraiment nous n’êtes pas aussi exigeant que moi et aussi contraint en termes de budget, c’est une période très intéressante pour rafraîchir une config ou se remonter un rig rapidement qui enverra du lourd.

Début juillet, à l’approche de la disponibilité des Radeon X5700(XT) et des tests indépendants, Nvidia de son côté dégaine un rafraîchissement complet de sa gamme RTX avec les « Super », et le moins qu’on puisse dire, c’est qu’ils veulent occuper l’espace au maximum pour faire de l’ombre, à croire que le caméléon a vraiment peur d’un retour en force de son concurrent, avec un alignement tarifaire très intéressant à constater. Dans le même temps on commence à voir les modèles « anciens » baisser carrément, ce qui continue de provoquer des démangeaisons, mais je tiens bon.

7 juillet : disponibilité officielle, fin des NDA, sortie des tests

C’est après la fin de LeHACK que l’omerta a pris fin. Après une micro nuit de sommeil bien méritée j’ai donc dévoré les tests de Cowcotland, plus intéressés par ceux de la Radeon RX5700XT évidemment, puisqu’on était pratiquement certain avec les fuites que les Ryzen 3000 démontaient du géant bleu au petit déjeuner.

Eh bien je sais une chose : j’attends avec impatience l’arrivée des cartes partenaires en septembre avec de vrais systèmes de refroidissement (et les premières annonces ne tardent pas à tomber). Elles envoient du très lourd déjà par rapport à ce qu’on craignait (avec des chiffres même parfois au dessus des présentations d’AMD y’a un mois), mais le ventirad de ces nouvelles cartes est une honte en 2019 quand on voit ce que fait Nvidia en parallèle. De toute manière le budget n’est pas encore prêt, d’autant qu’il a fallu tacler la sobriété que je voulais appliquer au mois de Juillet à cause d’une décision à la fois géniale et très chiante de Zerator, celui d’organiser la prochaine Trackmania Cup en 2020 à l’AccorHotels Arena, un lieu super mais qui impose d’acheter ses billets tout de suite, sachant que les places Carré Or sont partis en moins de 24h. Et la frangine de rager parce qu’elle a pas de budget, j’ai donc avancé les fonds, en incluant en plus ma mère, qui a fini par accrocher aussi et qui n’a pas perdu une miette sur Twitch de la finale 2019.

Je vais encore suivre quelques tests indépendants (anandtech a fait un joli comparatif qui a fini de me convaincre si c’était encore nécessaire), et surtout surveiller la situation des cartes mères pour le PCI-Express 4, même si on peut envisager de partir sur un Ryzen 2700 en fonction des bonnes affaires, j’ai vraiment envie de construire une plateforme pour le futur, je n’ai donc pas envie de faire l’impasse sur ce point. Les chipsets B550 promettent justement de remplir correctement cet espace plutôt que de tabler sur l’intelligence d’une conception de carte mère B450 conçue pour du PCIE3 qui accepterait les évolutions de fréquence/voltages pour le PCIE4.

Malgré quelques ajustements sur mon tableau initial et quelques évolutions de prix, on est toujours sur une base de 1100€, avec quelques compromis. C’est encore cher, d’où la surveillance active des bonnes affaires et des promotions pour faire baisser ce score peu glorieux. Avec le décalage d’achat je pourrai même profiter du black friday et de ses déstockages de tarés.

Petite contrainte supplémentaire, j’ai décidé de tenter de me passer d’Amazon pour passer mes commandes. Ce qui veut dire à coup sûr qu’il faudra ajouter à la facture moult frais de ports monstrueux étant donné la magie de la Poste, qu’on peut limiter avec les relais colis dont j’ai quelques adresses autour de chez moi. On verra bien u prochain épisode, qui cette fois devrait être consacré aux premiers achats 🙂

Vous connaissez le Courrier du Hacker ?

mardi 9 juillet 2019 à 18:30

Carl Chenet est un acteur beaucoup plus impliqué que moi dans ce qu’on appelle encore la Communauté du Logiciel Libre, que ce soit via son blog, le site LinuxJobs pour les chercheurs d’emploi, et le Journal du Hacker dont j’ai déjà eu l’occasion de parler à maintes reprises, même si peu en détails. Il m’a recontacté récemment pour demander si je m’étais intéressé au Courrier du hacker; et si j’avais vu passer les annonces de loin, ça ne m’intéressait pas plus que ça. Pourtant, ça pourrait VOUS intéresser !

Au commencement, était le Journal du Hacker

Le constat de Carl, c’est qu’il n’existait pas de site à la Hacker News, site américain existant depuis fort fort longtemps, en langue française. En bon développeur et contributeur qu’il est, il a trouvé une base de code sur laquelle capitaliser pour lancer sont propre « Hacker News », d’abord appelé Journal du Pirate.

Le concept, ce sont les utilisateurs qui partagent les articles qu’ils trouvent intéressants, et peuvent voter pour augmenter la visibilité des articles postés par les autres, ainsi que les commenter. Le site de plus propose un flux RSS pour suivre les nouveaux liens, ce qui me plaît particulièrement puisque cette technologie est mon outil principal de veille. Il est donc vrai que je ne contribue que très peu, principalement par manque de temps, pourtant certains utilisateurs partagent volontiers mes articles dessus, et il n’est pas rare qu’il soit majoritaire sur Twitter en termes de sources de visites enregistrées par Matomo :

Ça c’est sur le mois de Juin 🙂

Ajoutez à ça un relai des articles sur Twitter, Diaspora* et Mastodon, et vous pouvez booster la visibilité d’un article de manière assez impressionnante. Le « JdH » va bientôt avoir cinq ans et son succès ne se dément pas, longue vie à lui 🙂

Le besoin de curation

Avec le succès grandissant, le nombre de liens quotidiens devient important, je ne lis pas tout, si le titre me plaît, soit j’ai le temps de le lire tout de suite, soit je le garde en « non-lu » dans FreshRSS le temps d’être à la cool (ou sur un écran confortable, plus que celui de mon smartphone). Mais ça fait encore beaucoup, et parfois, on aime avoir des outils qui feraient le tri.

Les votes sur le site sont déjà une forme de tri, mais ça casse un peu la temporalité, et un article sorti un peu trop tôt risque de ne pas être bien noté tout de suite, et quand sa pertinence sera totale, il ne sera pas remonté car trop ancien et déjà oublié, dommage. Cette notion de tri et de sélection, c’est ce qu’on appelle la curation.

C’est un peu ce que je fais déjà avec mes propres billets « Liens en vrac et en Français », pour ceux qui suivent le JdH il est évident que plusieurs des articles relayés ont été découverts par ce biais. Ça reste toutefois ma sélection, avec mes centres d’intérêts, et parfois une emphase volontairement mise sur un sujet en particulier quand le nombre d’articles le justifie. Et un point de vue unique n’est jamais bon pour nourrir un cerveau, ou plusieurs dans le cas d’une publication.

Carl opérait déjà lui aussi un début de curation, via ses propres billets de blog « Liens intéressants du Journal du Hacker », hebdomadaires, mais la diffusion n’est pas optimale, le blog n’a pas vocation à être un canal de diffusion prioritaire pour un contenu en lien avec le JdH.

Ah, cette bonne vieille newsletter

Le concept de newsletter remonte à loin, très loin, et même s’il a été dévoyé à des fins de marketing, de ciblage publicitaire honteux (qui n’a pas été agressé par un popup à l’arrivée sur un site vous demandant votre adresse mail pour recevoir des informations et/ou des bons plans par mail ?), il reste un outil qui s’avère particulièrement adapté pour l’exercice qu’effectuait Carl. Admirez plutôt : au lieu d’avoir à surveiller une publication sur un blog, vous recevez directement, dans votre boite mail, une sélection hebdomadaire des meilleurs liens du Journal du Hacker. En clair, vous n’avez plus à aller chercher le contenu, il vient à vous, et même si je n’en ai pas directement besoin, j’avoue que j’aime ce fonctionnement, qui me rappelle mon article sur les notifications.

Ajoutez à ça la possibilité de consulter les archives des précédents numéros sur un site web dédié, ainsi qu’un partage de ces mêmes archives sur les mêmes réseaux sociaux mentionnés plus haut, et vous avez là un outil très appréciable, et manifestement très apprécié si l’on en croit les chiffres remontés par Carl. Les archives sont notamment pratiques si on veut se faire une idée avant de s’inscrire, voire choper un ou deux trucs intéressants qui datent d’avant son inscription.

Mieux, je disais que le concept avait été dévoyé par les publicitaires, qui s’amusent à tenter de profiler un max et revendre les profils associés aux adresses, augmentant dès lors la probabilité de se faire inonder de merde dans sa boite mail. Ici ça n’est pas le cas, il n’y a donc aucun risque, le seul que vous aurez, c’est d’être hébergé chez Microsoft qui pourra facilement décider de placer le Courrier dans les spams, voire pire en quarantaine (et je peux vous dire que c’est merdique comme système, au boulot on a des mails clients qui finissent en quarantaine, on est prévenu que plusieurs jours après).

Ça ne coûte rien d’essayer, ni même de l’adopter

Pour l’instant je préfère continuer de fonctionner à ma manière, avec le flux RSS du JdH. Mais dans tous les cas, vous ne perdrez rien, ou vraiment pas grand chose à part du temps, à l’essayer si vous souhaitez aborder votre veille dans d’autres conditions : le mail sort généralement le vendredi, vous laissant le week-end pour découvrir les articles à la cool. Et la désinscription est aussi simple que l’inscription, pensez-y quand vous demanderez à un site X d’aller supprimer votre adresse et demander aux partenaires à qui elle a été vendue d’en faire de même… Un grand merci donc à Carl pour son implication à rendre notre consommation d’information plus agréable 🙂

PS : si vous cherchez encore le lien pour vous inscrire, autant que je le remette ici : Courrier du Hacker

Writeup #LeHACK 2019, StegCryptoDIY #1

mardi 9 juillet 2019 à 13:41

Autre challenge du wargame de LeHACK, dont j’avais perdu certains éléments mais que j’ai refait ce matin (j’avais gardé le matériau de base), un « simple » exercice de stéganographie, comme son nom l’indique. En deux parties, mais je n’ai validé que la première.

Voici donc l’image qui servait de base à ce challenge en deux parties :

Les couleurs auraient pu indiquer quelque chose au niveau des pixels, mais rien à noter quand on joue avec les outils de GIMP. Pareil dans les métadonnées, cependant, en repassant sur un basique strings, on découvre un truc :

$ strings leHACK19_chall.png
duMBTiA9IDExNzU1MDY4OTQ0MTQyOTY5NDk4NzQzMjQ1OTg0NzYxMTgxMzI1NjA1MzA0NjI1Mjg2OTU4NzIxMzkxNzY2MDkxMjgzMTMyMzk4NDM3NjQ1MDM4MzQ5Nzc1ODk4OTIzNDY1MzMxMjYwMzA4MDY0NjExMTY3OTI2MTg3Mzk5Mzg0NzIzMzYwOTQxODgzNzMyMTc0OTAxNjY2ODAzICxnMSA9IDM4MDg4MTk1MDU1NjQ5OTk1NDUyNTI2MjM2MzExOTI1MDMyMTIxODY1OTgwODg1NTUzNDM3MzgxMTExNjUzODI2MjM0MjE3MjAxMTk4Mzc1NDQ2NTgxNzM4MjI0NjE4MzQwNzYzNDc3OTUxNTkzNjY1OTMxNzc2NjkwNTg3MDUwODcyNjY4OTg0NDQ4MTg5MjY2Njg1ODQ1MTksIGcyID0gODcyMTc4NzQwMDMyNzc4Mzc0ODAxNDg0OTAzNzYyNjAzOTM5NzgwNzYxMjM3MjgwNDAxNjY0MzY1MzA0NzU3NTk3NjAwOTgyNzAwMzQ0Nzc3ODg2MTI2MjAzNjc1MjMyNjgyNzYxMzA3ODM0NjIyNTE5MjU4MTcwODI0MDgyMDMyNTg2NzY1ODc0MjA3ODY5NDQ0NTY3Nzg3NyBJIHVzZSB0aGlzIGZ1bmN0b25zIGZvciBlbmNpcGhlcmluZyBvdXIgc2tleSA6IGVuY2lwaGVyKGludC5mcm9tX2J5dGVzKHNrZXksJ2JpZycpLGcxLGcyLE4pIHdpdGggZGVmIGVuY2lwaGVyKG0sZzEsZzIsTik6IHMxPXJhbmRvbS5yYW5kcmFuZ2UoMioqMTI3LDIqKjEyOCkgczI9cmFuZG9tLnJhbmRyYW5nZSgyKioxMjcsMioqMTI4KSByZXR1cm4gKG0qcG93KGcxLHMxLE4pKSVOLCAobSpwb3coZzIsczIsTikpJU4gYW5kIGhlcmUgaXMgYSBmbGFnOiBsZWhhY2syMDE5e2FlZjk1NTZhNTc1Y2M5ZGU4ZmM5NjA5YmQwMzRkNjNmZTBhMDE0NzBlYjQwMTM3ODI1M2Y3MjNiYmM1Y2MxNmN9

Et dans l’intitulé, on nous dit que Dumb et Dumby cherchent à communiquer de manière sécurisée. Ben voilà, on a un début de piste. Je stocke cette chaîne dans un fichier test.txt, et j’ai joué la carte de l’évidence, et tenté le base64 :

$ base64 -d test.txt > result.txt
$ cat result.txt
v�N = 11755068944142969498743245984761181325605304625286958721391766091283132398437645038349775898923465331260308064611167926187399384723360941883732174901666803 ,g1 = 3808819505564999545252623631192503212186598088555343738111165382623421720119837544658173822461834076347795159366593177669058705087266898444818926668584519, g2 = 8721787400327783748014849037626039397807612372804016643653047575976009827003447778861262036752326827613078346225192581708240820325867658742078694445677877 I use this functons for enciphering our skey : encipher(int.from_bytes(skey,'big'),g1,g2,N) with def encipher(m,g1,g2,N): s1=random.randrange(2**127,2**128) s2=random.randrange(2**127,2**128) return (m*pow(g1,s1,N))%N, (m*pow(g2,s2,N))%N and here is a flag: lehack2019{aef9556a575cc9de8fc9609bd034d63fe0a01470eb401378253f723bbc5cc16c}

Bon, lors de la validation du flag, il y a eu un léger couac, car en fait ils avaient paramétré les résultats pour que le plus évident, celui qu’on voit au bout de la ligne, soit la deuxième étape. Je suis allé voir les orgas, au début on m’a dit que non, surtout qu’on peut pas valider le deuxième tant qu’on a pas validé le premier, et pendant mon argumentation plusieurs compétiteurs sont venus se plaindre du même challenge. Ca a pris une seconde à faire la correction, et j’ai pu valider le challenge 🙂

Je n’ai par contre pas réussi à comprendre le fonctionnement pour la deuxième étape, c’est un algorithme mais comme je suis pas bon, et qu’il semble y avoir une composante random, je suis un peu perdu. Mais comme il semble que j’ai tous les éléments en ma possession, je pense me remettre dessus à froid pour voir si j’ai pas moyen de moyenner un truc.

Writeup #LeHACK 2019, 103spx

dimanche 7 juillet 2019 à 19:25

Autre challenge réussi à la sueur de mon front, ce challenge était beaucoup plus intéressant et m’a donné un peu de fil à retordre. Voyons donc comment je m’en suis sorti.

Le fichier à récupérer s’appelle « USB_a_analyser », sans extension, il fait 247Mo. File nous donne une première indication de ce à quoi on a affaire :

$ file USB_a_analyser 
USB_a_analyser: DOS/MBR boot sector, code offset 0x52+2, OEM-ID "NTFS    ", sectors/cluster 8, Media descriptor 0xf8, sectors/track 62, heads 8, dos < 4.0 BootSector (0x80), FAT (1Y bit by descriptor); NTFS, sectors/track 62, sectors 507903, $MFT start cluster 4, $MFTMirror start cluster 31743, bytes/RecordSegment 2^(-1*246), clusters/index block 1, serial number 06d84ef355f47cf91

On a vraisemblablement affaire à une image d’un disque, mais les choses se compliquent quand on tente de faire l’inventaire détaillé des partitions :

$ sudo fdisk -l ./USB_a_analyser 
Disque ./USB_a_analyser : 248 MiB, 260046848 octets, 507904 secteurs
Unités : secteur de 1 × 512 = 512 octets
Taille de secteur (logique / physique) : 512 octets / 512 octets
taille d'E/S (minimale / optimale) : 512 octets / 512 octets
Type d'étiquette de disque : dos
Identifiant de disque : 0x00000000

J’attaque un basique « strings », et je vois un message intéressant :

Si un jour je relis ce message, le mot de passe utilis
 pour chiffrer mon plus grand secret 
tait "vgrohhfyek0wkfi5fv13anexapy3sso6" et j'av
s utilis
 openssl.
En revanche, j'ai effac
 par erreur le fichier contenant mon plus grand secret (voir s'il existe des techniques de la mort pour le retrouver mon fichier secret.xz sha256(0fb08681c2f8db4d3c127c4c721018416cc9f9b369d5f5f9cf420b89ee5dfe4e) de 136 octets) et de toute fa
on, impossible de me rappeler de l'algo utilis
 -_- (donc si je le retrouve... il faudra aussi retrouver l'algo pour utiliser ce mot de passe).

Beaucoup d’informations ici, on sait donc qu’il faut récupérer un fichier qui a été chiffré avec openssl avec le mot de passe mentionné. Certes on a pas le nom du fichier, ni l’algorithme utilisé, mais on s’en préoccupera plus tard. Dans ma trousse à outils il y a donc binwalk et foremost, qui se font un plaisir d’analyser le contenu d’un fichier pour en extraire d’autres. J’ai déjà pu extraire des photos cachées dans d’autres photos. Ils me trouvent des pages web avec photos de mobylettes (le nom du challenge n’est pas là par hasard), mais rien qui ressemble à un fichier chiffré avec openssl. Rien d’autre dans les strings, ce qui implique que le fichier n’est pas stocké en clair.

Il paraît qu’elle a fait rêver pas mal de jeunes 🙂

Le fichier semble contenir une ou plusieurs partitions, j’entreprends alors de chercher comment faire pour les monter directement depuis le fichier dans un dossier temporaire. Comme je l’ai dit la difficulté c’est que fdisk ne me donne pas de détails sur les offsets à indiquer pour le montage, et toutes mes recherches pointent sur le fait qu’il faut cette information. C’est alors que Djerfy me glisse une suggestion : « t’as essayé volatility ? »

A là base c’est une suite d’outils en python pour extraire quantité d’informations sur des systèmes majoritairement Windows, ce qui n’est pas si con puisque le fichier contient des partitions NTFS et FAT32. Je ne connaissais pas, je m’empresse d’installer, lis un peu la doc et l’aide embarquée, et j’en viens à ça :

$ volatility -f ./USB_a_analyser mftparser --output=body -D ./vol_extract --output-file=extract.body
$cat extract.body
(...)
0|[MFT STD_INFO] message.txt (Offset: 0x14000)|64|---a-----------|0|0|0|1562415259|1562415034|1562415159|1562415159
0|[MFT FILE_NAME] Peugeot103SPXFILI.jpg (Offset: 0x14400)|65|---a-----------|0|0|0|1562415159|1562415159|1562415159|1562415159
0|[MFT STD_INFO] Peugeot103SPXFILI.jpg (Offset: 0x14400)|65|---a-----------|0|0|0|1562415159|1562370380|1562415159|1562415159
0|[MFT FILE_NAME] .Trash-1000\files\secret.xz (Offset: 0x14800)|66|---a-----------|0|0|136|1562415159|1562414956|1562415159|1562415159
0|[MFT STD_INFO] .Trash-1000\files\secret.xz (Offset: 0x14800)|66|---a-----------|0|0|136|1562415159|1562414956|1562415256|1562415159
0|[MFT FILE_NAME] Peugeot 103 SPX : tous les modèles de 1987 à 2003 | Actualités de la mobylette par Mobylette Mag_files (Offset: 0x14c00)|67|---a---------D-|0|0|0|1562415169|1562415169|1562415169|1562415169
0|[MFT STD_INFO] Peugeot 103 SPX : tous les modèles de 1987 à 2003 | Actualités de la mobylette par Mobylette Mag_files (Offset: 0x14c00)|67|---a-----------|0|0|0|1562415222|1562415170|1562415170|1562415169
(...)

Mais c’est gentil de lui donner un tel nom ! On a donc un fichier secret.xz, supprimé comme l’indiquait l’indice original car dans un dossier « .Trash-1000 », il a été mis dans la corbeille (l’auteur aurait donc pu le récupérer, mais ça serait moins drôle pour nous). Par contre, alors que je passe l’option -D je n’arrive pas à récupérer le moindre fichier, rien dans le dossier « vol_extract » créé pour ce besoin. Rageant…

J’en vient à tenter le tout pour le tout : je monte directement le fichier dans un dossier avec le type ntfs. Ma surprise fut totale quand j’ai vu la commande se terminer sans erreur :

$ l tmp/.Trash-1000/files/
total 201K
drwxrwxrwx 1 root root 4,0K 06.07.2019 14:14  ./
drwxrwxrwx 1 root root    0 06.07.2019 14:14  ../
drwxrwxrwx 1 root root 4,0K 06.07.2019 14:13 "CERT-FR – Centre gouvernemental de veille, d'alerte et de réponse aux attaques informatiques_files"/
drwxrwxrwx 1 root root 4,0K 06.07.2019 14:12 'Peugeot 103 — Wikipédia_files'/
-rwxrwxrwx 1 root root  33K 06.07.2019 14:13 "CERT-FR – Centre gouvernemental de veille, d'alerte et de réponse aux attaques informatiques.html"*
-rwxrwxrwx 1 root root 151K 06.07.2019 14:12 'Peugeot 103 — Wikipédia.html'*
-rwxrwxrwx 1 root root  136 06.07.2019 14:09  secret.xz*

Eh oui, notre secret.xz est bien là. Je le copie donc sur mon disque, et l’extrait. Le fichier a bien été chiffré avec openssl :

$ file secret
secret: openssl enc'd data with salted password

Nous voilà donc à la phase finale : identifier l’algo utilisé pour chiffrer le secret. Le souci, c’est que ça va être trop compliqué d’aborder ça de manière artisanale :

$ openssl help
Standard commands
asn1parse         ca                ciphers           cms               
crl               crl2pkcs7         dgst              dhparam           
dsa               dsaparam          ec                ecparam           
enc               engine            errstr            gendsa            
genpkey           genrsa            help              list              
nseq              ocsp              passwd            pkcs12            
pkcs7             pkcs8             pkey              pkeyparam         
pkeyutl           prime             rand              rehash            
req               rsa               rsautl            s_client          
s_server          s_time            sess_id           smime             
speed             spkac             srp               storeutl          
ts                verify            version           x509              

Message Digest commands (see the `dgst' command for more details)
blake2b512        blake2s256        gost              md4               
md5               mdc2              rmd160            sha1              
sha224            sha256            sha3-224          sha3-256          
sha3-384          sha3-512          sha384            sha512            
sha512-224        sha512-256        shake128          shake256          
sm3               

Cipher commands (see the `enc' command for more details)
aes-128-cbc       aes-128-ecb       aes-192-cbc       aes-192-ecb       
aes-256-cbc       aes-256-ecb       aria-128-cbc      aria-128-cfb      
aria-128-cfb1     aria-128-cfb8     aria-128-ctr      aria-128-ecb      
aria-128-ofb      aria-192-cbc      aria-192-cfb      aria-192-cfb1     
aria-192-cfb8     aria-192-ctr      aria-192-ecb      aria-192-ofb      
aria-256-cbc      aria-256-cfb      aria-256-cfb1     aria-256-cfb8     
aria-256-ctr      aria-256-ecb      aria-256-ofb      base64            
bf                bf-cbc            bf-cfb            bf-ecb            
bf-ofb            camellia-128-cbc  camellia-128-ecb  camellia-192-cbc  
camellia-192-ecb  camellia-256-cbc  camellia-256-ecb  cast              
cast-cbc          cast5-cbc         cast5-cfb         cast5-ecb         
cast5-ofb         des               des-cbc           des-cfb           
des-ecb           des-ede           des-ede-cbc       des-ede-cfb       
des-ede-ofb       des-ede3          des-ede3-cbc      des-ede3-cfb      
des-ede3-ofb      des-ofb           des3              desx              
idea              idea-cbc          idea-cfb          idea-ecb          
idea-ofb          rc2               rc2-40-cbc        rc2-64-cbc        
rc2-cbc           rc2-cfb           rc2-ecb           rc2-ofb           
rc4               rc4-40            seed              seed-cbc          
seed-cfb          seed-ecb          seed-ofb          sm4-cbc           
sm4-cfb           sm4-ctr           sm4-ecb           sm4-ofb

On le voit dans la partie « Cipher commands », y’a du monde, je ne me vois pas tout faire à la main un par un. Et rien dans le contenu du fichier ne permet de guider un type d’algo plutôt qu’un autre.

J’ai donc extrait la liste de ces cipher commands, organisées dans un fichier, et j’ai là aussi tapé un script à l’arrache pour faire le boulot :

cat script.sh 
#!/bin/bash +x
for i in $(cat cipherlist.txt); do openssl $i -in secret -out "secret.${i}" -d -k vgrohhfyek0wkfi5fv13anexapy3sso6 ; done

J’ai en résultat, un fichier par cipher. Alors y’a beaucoup de fichiers, et malgré une taille identique pour beaucoup d’entre eux, la somme de contrôle me dit qu’ils sont tous différents. Je me rabats donc sur un classique mais toujours efficace grep afin de pouvoir identifier mon vainqueur :

$ grep lh_ secret.*
secret.aes-192-ecb:flag : lh_6c31ba64e522b5f9326b7bee0abef6547f60d214

Et voilà 🙂