Combien de fois, durant une formation, on m’a demandé si je pouvais donner un dump de la session shell.
playitagainsam, ou PIAS, a exactement pour but de faire cela: il lance un shell, enregistre ce qu’on y a tapé, et quand on quitte le shell, sauvegarde le tout dans un fichier. Ensuite, on peut lire le contenu du fichier et revoir la session shell telle qu’elle a été tapée.
C’est un programme Python, on peut donc le pip installer :
pip install playitagainsam --user |
Ensuite, on lance une session à enregistrer avec la sous commande record :
pias record nom_du_fichier_ou_sauver_l_enregistrement |
PIAS va lancer un nouveau shell, par défaut le même que votre shell actuel (souvent bash, pour moi fish), mais vous pouvez préciser un type de shell spécial avec --shell
. Ex :
pias record ex1 --shell ipython |
A partir de là il n’y a rien à faire. On peut travailler normalement et oublier qu’on a utilisé PIAS. Une fois qu’on a terminé sa petite affaire, il suffit de sortir du shell (CTRL + D, exit, etc), et la session va être sauvegardée dans un format JSON facile à corriger à la main si vous souhaitez la rendre plus agréable :
{ "events": [ { "act": "OPEN", "size": [ 162, 33 ], "term": "1c53f048e3a74984b2a93af175e24e87" }, { "act": "PAUSE", "duration": 0.10042214393615723 }, { "act": "WRITE", "data": "\u001b]0;sam@sametmax.com: /tmp\u0007sam@sametmax.com:/tmp$ ", "term": "1c53f048e3a74984b2a93af175e24e87" }, { "act": "ECHO", "data": "touch essai", "term": "1c53f048e3a74984b2a93af175e24e87" ... } |
Quand vous voulez rejouer la session :
pias play fichier_d_enregistrement |
Par défaut il faut appuyer sur une touche quelconque du clavier pour voir apparaitre chaque caractère, donnant l’impression que vous êtes un hacker de Hollywood. C’est rigolo, mais parfaitement chiant à la longue. On peut faire jouer la session automatiquement avec l’option --auto-type
qui va taper chaque ligne automatiquement. Il suffira alors d’appuyer sur entrée à chaque ligne pour avoir le résultat suivant. C’est mon mode préféré.
Si vous êtes un gros feignant, vous pouvez tout jouer en automatique en rajoutant l’option --auto-waypoint
qui va vous dispenser de taper entrée à chaque fin de ligne. Ex :
pias play ex1 --auto-type --auto-waypoint |
La session jouée est simulée. Elle n’a aucun impacte sur le système. Si vous faites un mkdir
dans bash ou un shutil.rmtree
dans python, ça ne fera rien.
Néanmoins, parfois il est utile d’avoir le effets réels des commandes. Dans ce cas on peut utiliser --live-replay
. Attention, faites bien gaffe à ce que vous allez jouer…
playitagainsam est intéressant pour tout ce qui est formation et tutorial, d’autant plus qu’il existe un player javascript pour faire la démonstration de vos sessions shell sur un blog ou un slideshow.
Dans le même genre, si tu utilises IPython, tu peux utiliser la commande magique %save. Tu lui spécifies d’où à où tu veux aller, et il exporte ça dans un fichier .py, que tu peux ré-exécuter. Sympa :)
Je connaissais déjà la commande script, mais là ça m’a l’air beaucoup plus puissant. Je me mets ça de côté pour mes pentests :D
Merci pour le partage!
Génial ce truc ! La première idée qui me viens en tête, c’est que ça peut être pratique pour faire des mises en prod…
Génial comme idée Sam !
Un truc qui serait frais à implémenter, mais c’est peut-être compliqué, ce serait l’export en gif pour pouvoir illustrer rapidement le résultat d’une commande ou d’une série de commandes avec un rendu plus jolie que si c’était screenshooté.
@H3 : un peu comme un script shell ?
@H3 grolvl…
J’espère quand même que c’est une blague.
@Gontran @Shagshag : Tout le monde ne sais pas coder un script shell, comme ça, out of the box…
@H3:
Pas d’offense, il n’y avait pas d’hypocrisie dans ma question.
En fait un script shell est un fichier texte avec les commandes à taper dans la consoles les unes à la suite des autres.
à l’exécution elles sont exécutées dans l’ordre.
Exemple :
#!/bin/bash
echo 'Hello world!'
mkdir 'foo'
touch 'foo/bar'
ls 'foo'
La seule subtilité étant la première ligne qui indique quel shell utiliser.
Donc si on sait utiliser pias on sait créer un script shell.
Dans le même genre ya shelr http://www.planet-libre.org/?post_id=11531
Il y a aussi https://asciinema.org/