devloop :: blog

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

dimanche 16 Novembre 2008

Closest book meme

Une chaine trouvé sur Planet SUSE et qui fera passer un peu de temps :p

  • Attrapez le livre le plus proche de vous.
  • Ouvrez-le à la page 56.
  • Trouvez la 5ème phrase.
  • Mettez en ligne sur votre blog le texte de cette phrase ainsi que les instructions de la chaine.
  • Ne cherchez pas à prendre votre livre favori ou le plus cool, prenez bien LE PLUS PROCHE.
Grâce au témoignages de repentis et aux écoutes téléphoniques, les enquêtes de la D.D.A. de Naples sont parvenus à reconstituer toute l'organisation commerciale des clans, des entrepôts aux boutiques.
L'extrait est de Gomorra par Roberto Saviano (traduction: Vincent Raynaud)

Le livre est très intéressant et la réalité sur la Camorra est inquiétante :( J'ai aussi vu le film après et je le trouve confus, on y voit les scènes mais les engrenages manquent cruellement. Je recommande de loin le bouquin.

J'ai un peu triché car mes deux livres les plus proches sont le Bescherelle et le Harrap's Shorter... difficile d'y trouver des phrases :p
Au moins vous avez échappé de peu à Le noyau Linux :D

Si vous participez à la chaine, pensez au trackback ;-)

vendredi 14 Novembre 2008

Cofanifunebri 2009 : Une bière bien corset !!

Cofanifunebri 2009 JuinFidèle à la loi des séries et des jeux de mots à la con, je ne pouvais m'empècher de vous faire part du calendrier 2009 de Cofanifunebri.

Cette année encore, l'entreprise a réussie à renouveler le principe avec beaucoup d'humour et de style 8-)
Seule déception : certains mois ne sont pas disponibles par le web, il faut commander le calendrier pour le voir dans son intégralité.

Calendier 2006
Calendirer 2007
Calendrier 2008

vendredi 7 Novembre 2008

Massacre en vue

Je viens de lire que Steven Spielberg compte faire un remake de Old Boy avec Will Smith dans le rôle principal... et malgré tout les excellents films qu'on lui doit je ne peut m'empêcher d'avoir très très peur :(

Je me dis que des fois il faut savoir s'abstenir :p

vendredi 31 Octobre 2008

10ème édition du tournoi NetHack par /dev/null/

Ce soir à minuit, pour l'occasion d'halloween, aura lieu l'ouverture d'un challenge organisé par le réseau /dev/null autour du rogue-like NetHack, et ce pour la 10ème année consécutive :)

Les inscriptions et les détails concernant le tournoi (serveurs, telnet ou ssh etc) seront délivrés à l'ouverture du tournoi. Les participants des tournois précédents ont eu le privilège de pouvoir réactiver leurs comptes avant les autres.

Même si je n'ai pas encore effectué la moindre ascension dans ce jeu pour geek-sociopathes, j'ai toujours l'espoir d'y arriver. Pour le moment si j'atteins le 5ème du jeu je serais content.
Je pense donc jeter un oeil à ce challenge pour voir à quoi ça ressemble et, peut-être, figurer dans l'un des classements de fin (j'ai peut-être mes chances pour la mort la plus inhabituelle ou la plus stupide, on ne sait jamais...)

Rest In Pieces... comme on peut le lire gravé sur certains tombeaux dans ce jeu impitoyable.

/dev/null NetHack Tournament

samedi 18 Octobre 2008

KDE4 et lnusertemp : le cas de l'erreur à l'insu de mon plein gré

Je suis passé à KDE4 depuis quelques temps maintenant et même si ça a pas été facile au début, je m'y suis fait. Je regrette toutefois que la version 4.1 n'ait pas été inclue comme stable dans la version actuelle d'openSUSE 11.0 mais uniquement sur les dépots Factory, ce qui fait que je tourne avec un KDE 4.0 avec des numéros de sous-version à ralonge :p

Récemment, le plasmoïde de boîte à miniatures (le systray) ne s'affichait plus correctement : il était désespérément vide, comme les icones des applications iconifiées étaient invisibles.
J'ai attendu quelques mises à jour KDE pour voir si cela résolvais le problème mais aucun changement ne s'est produit. Finalement j'ai supprimé mon répertoire .kde4 et après différentes reconfigurations du bureau, les icones sont finalement revenues.

Et ce matin, impossible d'ouvrir une session KDE4 :(
Arrivé sur l'écran de login de XDM, j'avais droit à un message startkde: Call to lnusertemp failed (temporary directories full?). Check your installation.
Dans le doute, j'ai fait un peu de ménage dans mon répertoire personnel mais le message s'affichait toujours...

J'ouvre finalement une session sous LXDE et je commence à fouiller où peut être le problème.

Comme on pouvait s'y attendre, l'erreur est générée dans le script de lancement de KDE dans le fichier /usr/bin/startkde.
Le script est assez bien commenté et on comprend facilement ce qu'il se passe :
lnusertemp=`kde4-config --path exe --locate lnusertemp`
if test -z "$lnusertemp"; then
  # Startup error
  echo 'startkde: ERROR: Could not locate lnusertemp in '`kde4-config --path exe` 1>&2
fi

# Link "tmp" "socket" and "cache" resources to directory in /tmp
# Creates:
# - a directory /tmp/kde-$USER and links $KDEHOME/tmp-$HOSTNAME to it.
# - a directory /tmp/ksocket-$USER and links $KDEHOME/socket-$HOSTNAME to it.
# - a directory /var/tmp/kdecache-$USER and links $KDEHOME/cache-$HOSTNAME to it.
# Note: temporary locations can be overriden through the KDETMP and KDEVARTMP
# environment variables
for resource in tmp cache socket; do
    if ! "$lnusertemp" $resource >/dev/null; then
        echo 'startkde: Call to lnusertemp failed (temporary directories full?). Check your installation.'  1>&2
        test -n "$ksplash_pid" && kill "$ksplash_pid" 2>/dev/null
        xmessage -geometry 600x100 "Call to lnusertemp failed (temporary directories full?). Check your installation."
        exit 1
    fi
done
La première partie du script permet de trouver où est situé le binaire lnusertemp. Le résultat est le chemin /usr/lib/kde4/libexec/lnusertemp.
Ensuite ce programme est appelé avec les arguments tmp, cache et socket.
Si l'un des appels renvoit un code d'erreur (valeur de retour différente de 0) alors notre fameux message d'erreur est affiché.

Un strace sur la comande lnusertemp tmp nous montre que tout se passe bien de ce côté :
stat64("/home/devloop/.kde4", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
uname({sys="Linux", node="shirley", ...}) = 0
lstat64("/home/devloop/.kde4/tmp-shirley", 0xbf96e1d4) = -1 ENOENT (No such file or directory)
lstat64("/tmp/kde-devloop", 0xbf96ccec)  = -1 ENOENT (No such file or directory)
mkdir("/tmp/kde-devloop", 0700)          = 0
stat64("/tmp/kde-devloop", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
getuid32()                              = 1000
symlink("/tmp/kde-devloop", "/home/devloop/.kde4/tmp-shirley") = 0
exit_group(0)
en revanche avec l'argument cache, un problème apparait :
stat64("/home/devloop/.kde4", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0
uname({sys="Linux", node="shirley", ...}) = 0
lstat64("/home/devloop/.kde4/cache-shirley", {st_mode=S_IFLNK|0777, st_size=24, ...}) = 0
readlink("/home/devloop/.kde4/cache-shirley", "/var/tmp/kdecache-devloop", 4096) = 24
lstat64("/var/tmp", {st_mode=S_IFLNK|0777, st_size=17, ...}) = 0
write(2, "Error: \"/var/tmp\" is not a direc"..., 38Error: "/var/tmp" is not a directory.) = 38
exit_group(1)
Et effectivement /var/tmp n'est pas un répertoire mais un lien symbolique vers une autre partition... J'avais mis cette redirection en place pour résoudre un problème de place lors d'une tentative de compilation du noyau...
Techniquement, KDE devrait pouvoir fonctionner malgré ce lien symbolique mais une vérification est quand même présente :|
Plusieurs solutions : supprimer le lien symbolique et recréer le répertoire d'origine, recréer le lien symbolique moi-même ou encore modifier startkde (voire lnusertemp ^_^ ).

J'ai opté pour la première solution et KDE s'ouvre bien... par contre la barre des miniatures est toujours un peu capricieuse :(

samedi 11 Octobre 2008

Wapiti 2.0.0 Béta

Alors que Wapiti a dépassé doucement mais surement la barre des 16200 téléchargements sur SourceForge, les plus observateurs auront remarqué la sortie d'une version 2.0.0 béta avant-hier soir.

La question que vous vous posez certainement c'est comment l'on peut passer d'une version 1.1.7-alpha à une version 2.0.0-béta...
Tout simplement avec beaucoup de changements !! Et il s'en est passé des choses depuis la sortie de la précédente version.

Premièrement, le nombre de développeurs est passé de 1 à 3 grace à l'aide de 2 développeurs espagnols de ICT-Romulus.
Leur souhait était de pouvoir apporter des nouvelles fonctionnalités à Wapiti, notamment pour faciliter son intégration dans un projet de framework J2EE basé sur Maven (si j'ai tout compris lol).
Dans tous les cas ils ont proposé de participer au développement de Wapiti afin que tout les utilisateurs puissent profiter de leurs idées et de leurs modifications :) Cela est passé par la mise en place d'un espace SVN pour le projet pour faciliter le développement.

Leur objectif principal était de travailler sur le rendu final fournit par Wapiti. Ainsi il est possible d'obtenir un compte rendu des vulnérabilités dans 3 formats différents : XML, HTML et texte simple. Pour cela les options -f (format) et -o (output) ont été rajoutés.
Ils ont aussi réussi à séparer les payloads du code, ce qui rend plus simple leur ajout. Le code a été aussi revu et est plus modulaire.
Des règles de détection pour les failles SQL ont aussi été rajoutées.

De mon côté j'ai pû enfin résoudre le problème des boucles sans fin lors du scan d'urls en ajoutant l'option -n (ou --nice) qui permet de définir un seuil de tolérance au niveau des urls du même type.
Ainsi si les pages suivantes ont déjà été scannées :
http://server/p?a=x&b=1&c=x
http://server/p?a=x&b=2&c=x
http://server/p?a=x&b=2&c=y

Avec un seuil de 2, quand l'url http://server/p?a=x&b=3&c=x sera trouvée, elle sera exclue car déjà 2 urls du même pattern ont déjà été trouvées (http://server/p?a=x&b=*&c=x).
Même chose avec l'url http://server/p?a=x&b=2&c=z.
Par défaut aucun seuil n'est spécifié (ce qui revient à le fixer à 0). A vous de voir la valeur qui vous semble juste (10 me parait en bon compromis pour faire beaucoup de possibilités sans tourner en boucle).

J'ai aussi réussi à faire fonctionner l'authentification HTTP (option -a) en pompant sur le code de sqlmap. Même si les instructions sont sensiblement différentes par rapport à ce que Wapiti faisait, le principe est le même et je ne saurais pas dire pourquoi ça ne fonctionnait pas auparavant (alors que proxies et cookies fonctionnaient)... un des mystères de Python :-/
Malheureusement, étant donné la façon dont les modules urllib2 fonctionnent, il est préférable de retirer l'authentification sur le serveur et d'utiliser Wapiti simplement. En effet pour chaque url, si l'authentification est présente, Python va émettre deux requêtes : une première sans authentification qui va renvoyer une erreur 401. Et une seconde avec les identifiants pour passer la vérification :-/

Enfin la nouvelle méthode de scan XSS est complètement implémentée et la librairie Beautiful Soup a été mis à jour.

Pour la prochaine version, différents changements sont à faire comme pouvoir gérer les erreurs HTTP 500 (nouveau bug), améliorer la qualité des rapports de scan, limiter le nombre de plantages liés au décodage Unicode :( et enfin travailler sur la vitesse de scan de Wapiti.
En effet lors de certains tests, on s'apperçoit que Wapiti peut avoir un effet DoS sur le serveur web (voir que les 152 process lancés par Apache pour répondre aux requêtes sont tous occupés c'est pas top...) Il faut donc essayer d'envoyer le plus de requêtes possibles par connexion (ou trouver la juste proportion entre les deux)

Dans tous les cas, je ne peux que vous conseiller de passer à cette nouvelle version qui apporte des fonctionnalités importantes :)

Télécharger Wapiti-2.0.0-béta.

lundi 29 Septembre 2008

Euh... Kamoulox ?

Spam faute d'orthographe
Je reste dubitatif sur les nouvelles techniques de spam (et de scam) de certains...

dimanche 28 Septembre 2008

La Zapette de Canal+ version 2

Grolandaises, grolandais,

Vous avez sans doute remarqué que les flux RSS utilisés par la Zapette n'étaient plus à jour, résultat : apu vidéos !
J'ai donc apporté quelques modifications pour que les flux soient récupérés sur rss-one où ils sont valides.

Pour récupérer le bouzin, c'est ici : Zapette de Canal+ v2

mercredi 17 Septembre 2008

Parabellum - Capsule à freak

J'ai monté ma cuve à gaz à l'envers
En l'air j'ai tout envoyé
Ils se sont plains jusqu'à la stratosphère
Les militaires ont gueulé
Depuis j'ai trouvé un boulot super
Je travaille dans la chimie
Des vaccins contre le sida pas très chers
J'les vends qu'aux plus démunis

Refrain
Ma capsule à freak
Et cap sur l'Afrique
Ma capsule à freak
Croquez le premier
Ma capsule à freak
Et cap sur l'Afrique
Mieux vaut se barrer !
C'est trop la panique

J'ai bricolé des foetus de hamsters
J'en ai cramé des milliers
Du pâté de tête aux protozoaires
Le prix Nobel assuré !
J'ai monté ma cuve à gaz à l'envers
En l'air j'ai tout envoyé
Quand j'ai ressorti la tête du cratère
Soudain je me suis rappelé

Refrain

Dans chaque module : 5 modules au total
Propose une activité basée sur la reconnaissance vocale
Cet exercice fait en synthèse du vocabulaire est la syntaxe absolue dans l'ensemble des exercices du module...


Oppenheimer,
Einstein,
Sakarov
Et BOUM...
J'vais tout faire péter !

J'ai cloné les fesses de Miss Univers
Des cerveaux d'économiste
Ne me demandez pas à quoi ça sert
Le secret bancaire... Existe
J'ai monté ma cuve à gaz à l'envers
En l'air j'ai tout envoyé
L'important maintenant est de se faire
La malle et d'appareiller

Refrain

Présent sur l'album Bunker (2002)

lundi 15 Septembre 2008

Wapiti 1.1.7 Alpha

Je viens à l'instant de placer sur sur SourceForge une nouvelle version de Wapiti.

C'est une version alpha (avec tout que ça implique) de la prochaine version à venir (la 1.1.7). L'objectif étant de montrer vers où se dirige Wapiti dans son développement, quelles sont les améliorations en cours et permettre à ceux qui ont des modifications à soumettre de se baser sur un code plus à jour que la version précédente.
Je compte aussi sur tous ceux qui utiliseront cette version pour soumettre les bugs qu'ils trouveront, en particulier s'il s'agit de stabilité.

La principale nouveauté c'est la nouvelle fonction de détection de failles XSS (actuellement nommée new_attackXSS) qui se base sur mes expérimentations avec la librairie Beautiful Soup pour détecter où se situe le code injecté dans la page (d'un point de vue DOM/HTML...) et choisir en conséquence le payload le mieux adapté.
Ce n'est pas la seule amélioration sur ce point puisque vous verez dans le fichier XSS.py un certain nombre de payloads dont l'objectif est de pouvoir passer d'éventuels filtres anti-XSS.
Parmis les filtres visés il y a :
  • ceux qui filtrent sur le mot script
  • ceux qui retirent les quote (apostrophes) et double-quotes (guillements)
  • ceux qui filtrent les signes inférieur et supérieur des balises HTML/XML
L'algorithme pour détecter les XSS a sensiblement changé :

Pour une url que l'on aura trouvé, avec des paramêtres A, B et C, on va essayer d'injecter du code dans chacune des variables séparément mais toutes ces variables resteront présentes dans l'url telle qu'on l'a trouvée (le payload se déplace de variables en variables dans l'url)
Au lieu d'attaquer directement avec un payload, Wapiti commence par injecter un identifiant alpha-numérique de 10 caractères et vérifie que se dernier est bien injecté dans la page.
Si c'est le cas, il va étudier cette page et pour chaque occurence de l'identifiant il va déterminer quelle liste de payloads utiliser en fonction de sa position dans la page.
Dès qu'un payload semble fonctionner, il sort de la boucle et passe à la variable suivante (ou la page suivante s'il a fait toutes les variables)

La plupart des payloads sont user-friendly, il suffit de recopier l'url proposée par Wapiti pour voir un beau alert. Mais d'autres ne donnent pas un résultat immédiatement visible (par exemple ceux qui injectent un String.fromCharCode) pour des raisons de taille du payload.
Enfin parmis les payloads on trouve ceux qui cherchent juste à appeler un script externe.
Dans l'ensemble, l'objectif était que Wapiti puisse donner à l'utilisateur une url d'attaque se rapprochant au mieux de ce qu'il aurait pû trouver lui-même avec son navigateur.

Les navigateurs qui (mattez la transition 8-) ) ne réagissent malheureusement pas tous de la même façon devant une page malformée. Lors de l'injection du payload, celui-ci peut se retrouver à différents endroits de la page, par exemple dans le title de la page alors qu'on le retrouvera puis loin dans le href d'un lien ou enfin dans un code CSS.
Pour commencer, on ne peut pas injecter directement du javascript dans la balise title : il faut fermer cette balise puis ouvrir une balise script.
Comme le payload est propre à la variable on va le retrouver aux différents endroits correspondants de la page. Donc notre balise title que l'on aura fermée va se retrouver dans le href et dans le code CSS...
Puisque les navigateurs ont généralement une lecture linéaire, le résultat obtenu avec la première injection devrait être satisfaisant... Mais si on est obligé de passer par la seconde occurence du payload dans la page, il va falloir faire avec le code injecté dans la balise title qui peut rendre le code HTML chaotique et empécher l'interprétation du payload en seconde position...

Cette interprétation étant propre au navigateur (sa capacité à gérer les erreurs), on ne peut jamais être à 100% sûr que le payload généré sera fonctionnel sur l'un des principaux navigateurs.
Dans Wapiti, la gestion de ces erreurs se fait à l'aide de Beautiful Soup qui se rapproche probablement du comportement qu'aura un navigateur.
J'ai aussi fait des tests avec Tidy et les différences sont radicales. Alors que Beautiful Soup cherche plutôt à fontionner malgré les erreurs, Tidy les corrige ou les supprime donnant des résultats parfois surprenants.

C'est l'une des raisons que me pousse à me recentrer sur l'utilisation de Beautiful Soup pour les futures versions de Wapiti, la seconde raison d'importance est qu'il est difficile pour un utilisateur de Windows de disposer de Tidy avec Python (les pauvres, déjà qu'ils ont pas un OS facile :p )

Pour terminer sur cette partie, ce nouveau moteur XSS ne concerne pour le moment que la méthode GET, je dois encore la mettre en place pour le POST.
Il y a aussi un système d'historisation des requêtes (pour la détection des XSS permanents) qui est en cours de réécriture.

En dehors de ça, quelques bugs corrigés, le plus important concernait les formulaires où la méthode (GET ou POST) n'était pas spécifié. Désormais GET est utilisé par défaut (comme voulu par les standards HTML).

Wapiti 1.1.7-alpha