Lua Lui, Ho baby..Me gotta go now !

C’est quoi donc ?

Aujourd’hui on vas voir un truc qui est assez sympas. Le scripting LUA associé a nos petits outils réseaux.

LUA est un énième language de script (Voir son wikipedia pour plus de détails). Ce qui est sympas avec ce language c’est qu’il s’interface avec Tshark et/ou les dernières versions de Suricata.

Cela permet d’étendre par de petits scripts les possibilités de ces soft. Sous tsharK cela permettra par exemple sortir les stats les plus tordues en restant dans sa petite console texte. Mais c’est potentiellement très violent, cela peut aller jusqu’à écrire son propre dissecteur de protocol.  Alors certes les puristes diront que c’est du script..donc ça rame… Mouais.. je vous laisserai vous faire votre opinion… c’est pas si pénalisant que cela.

C’est partit Maryse

Voyons maintenant comment cela s’enmanche avec tsharK. C’est assez simple en fait, je ne reviendrais pas sur le language Lua lui même qui est, avouons le, un étrange mix de divers languages (On dirait du python qui se fout de l’indentation munis des commentaires à la sql et fournis un jeu de fonction très spartiate..bref c’est très étrange, mais simple et pas désagréable. Bref étonnamment pas trop velus quoi. (Qui comprendra la vanne ??)). Non, je répète je ne ferait pas de cours de Lua, mais on va voir comment l’interfacer avec notre pote tsharK.

Le Projet

Faisons un compteur de requêtes ‘POST’ .. c’est débile mais c’est un bon TP pour commencer.

il y a trois choses à faire, premièrement déclarer un hook. Ce hook est basé sur n’importe quel filtre Wireshark. Par exemple dans notre cas on veut incrémenter un compteur à chaque requête http de type “POST” qui passe… On va donc va faire un hook sur les “http.request” et à chaque fois qu’une “http.request” va se pointer notre hook sera appelé. Le hook vérifia que c’est bien un post et incrémentera un compteur.

Voici a quoi cela ressemble :

Je définit mon compteur nommé C_POST, je l’initialise à 0. Ensuite je définit un nouveau listener qui sera appelé quand se présentera une paquet correspondant au filtre wireshark “http.request”. C’est notre fameux Hook. Le premier nil (équivalent d’un null ;) ) du listener sert à poser un filtre sur notre hook. Ici pas de filtres TOUS les paquets de requête http attrapés par tsharK seront envoyées au Hook

Passons à l’étape 2 ; 

je crée un autre object method_f qui sera remplis avec ce que contient le filtre wireshark “http.request.method”.

Et ensuite la fonction “packet” de notre hook.. nommé “tap_http_rq”.  Ligne 4 je récupère la méthode depuis l’objet et je la convertit en string. Au passage je la convertit en uppercase (Le puriste dirait que si c’est pas un POST majuscule ca devrait dégager.. mais bon je suis sympas).

Ligne 5, je vérifie que c’est bien un POST.. si c’est un POST j’incrémente mon compteur

Voila on a presque finis… maintenant à la fin de la capture, on va afficher le résultat de notre comptage.

La fonction “draw” de notre hook est appelée quand tshark a finit de processer les paquets. J’affiche donc “Post Request : lechiffre” Car oui sous Lua un “..” concatène. (Pourquoi “..” !! ). J’utilise pas un simple print mais un debug, mes stats s’afficheront dans le STDERR. Ca me permet de lancer tshark avec l’output vers /dev/null pour ne pas salir mon terminal (le -q).

On sauve tout cela dans un fichier nommé count_post.lua et pour finir … Lancons tshark en invoquant notre script :

Sur certaine distribution, Lua n’est pas actif dans tshark ou wireshark. Si cela arrive, ouvrez le fichier “/etc/wireshark/init.lua” et commentez la ligne “disable_lua = true;”

Epilogue

Pour ceux que ca a branché, j’ai posé mes premiers scripts dans mon github https://github.com/Th4nat0s/lua_scripts, un compteur de requêtes/réponses et un autre bien sympas qui montre qui hit à mort un site web.

A+

This entry was posted in Network and tagged , . Bookmark the permalink.

Leave a Reply

Your email address will not be published. Required fields are marked *

AlphaOmega Captcha Classica  –  Enter Security Code