Just Another Geek

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

Une image de moi

Archive du blog de Nicolas Bareil · restaurée à partir d’Internet Archive · commentaires fermés

lundi 28 mars 2005

Reverse DNS tout pourri

Rappel, un reverse DNS, c'est récupérer un (ou des) nom de domaine depuis une adresse IP. Un reverse cassé est lorsque :

% dig +short -x 1.2.3.4
smtp.plop.org
% dig +short smtp.plop.org
2.4.5.6

Maintenant, amusons nous à compter les reverses DNS cassés qui envoient des mails à mon serveur SMTP :

% zcat /var/log/exim4/mainlog*gz | awk 'BEGIN {                         \
                           ok = 0;                                      \
                           ko = 0                                       \
                         };                                             \
                                                                        \
                       /broken reverse/ {                               \
                           if (getline > 0 && $0 !~ /rejected/) {       \
                              ok += 1                                   \
                           } else {                                     \
                              ko += 1                                   \
                           }                                            \
                       };                                               \
                                                                        \
                       END {                                            \
                           print "ok=", ok, "ko=", ko                   \
                       }'
ok= 48 ko= 448

Ce qui signifie que 448 machines avec un reverse DNS cassé ont vu leur message refusé dès la session SMTP (Spamassassin, ou sanity check réalisé par Exim4) contre 48 serveurs SMTP qui, malgré leur DNS tout pourri, ont vu leur message accepté tout de même.

Après avoir jeté un coup d'oeil rapide aux messages acceptés, seul une dizaine ne sont pas du spam.

En conséquence, cela signifie qu'il n'est pas possible de mettre en production ce type de règle car elle déclenche trop de faux-positif (10 pour 500 messages, c'est beaucoup trop). C'est dommage car cette solution est très économe en ressources et permet de bloquer très tot les messages...

jeudi 24 mars 2005

Grève des transports ?

J'adore les pertes de paquets ! Aujourd'hui, ma connexion ADSL dégroupée Free a déraillé complètement pendant une demie-heure : plus de 15% des paquets étaient perdus.

Le truc chouette. C'est que comme par hasard, tous les paquets DNS étaient perdus, pas un seul n'est arrivé, ou en tout cas, pas une seule réponse n'est parvenue. Et sans DNS, on peut pas faire grand chose : le serveur SMTP refuse tout temporairement étant donné qu'il ne peut pas faire de vérification DNS, on ne peut plus visiter de sites Internet, bref la joie.

C'était d'ailleurs assez étonnant que les connexions TCP fonctionnaient aussi bien (ma connexion ssh était juste un peu lente, mais pas de blocage particulier).

vendredi 18 mars 2005

Oups, panique a bord

Note pour plus tard, ne plus JAMAIS faire cp /usr/local/ssl/lib/*(.) /usr/lib/ pour la mise à jour d'Openssl lorsque vous êtes connecté en ssh car dès que les fichiers seront copiés, la communication sera coupée INSTANTANÉMENT ! Les clients ainsi que le serveur sshd seront tous killés !

Résultat, la machine, installée dans une belle salle machine située aux États-Unis se retrouve coupée du monde. Et là... c'est vraiment le drame car vous êtes un hébergeur [archive] tout de même, et le client attend.

Par chance, les connexions sortantes du serveur ne sont pas bloquées par le firewall (pas bien, quoique...) et vous avez un Apache qui peut executer vos scripts CGI uploadés via FTP (et non par SFTP comme d'hab').

Vous vous dîtes "facile", y a qu'à uploader un script qui appelle netcat afin de faire un reverse shell (oublier le reverse ssh puisque je vous ai dit qu'il était complément mort). Ce shell tournera avec l'identité d'Apache mais c'est pas grave, vous ferez un /bin/su... sauf que netcat n'ouvre pas un tty et donc su ou sudo refusent de travailler !

Le temps presse et vous vous rappelez de rrs [archive], un programme conçu pour faire des reverses shells proprement : il ouvre un tty au moins. Donc vous le compilez à la va-vite et l'uploadez par votre moyen favori...

Et c'est gagné ! La coupure ssh a duré 40 minutes, promis la prochaine fois, je ferais mieux :(

Non mais quelle idée de ne pas utiliser une distribution Debian et ses paquets magiques...

Update : Ah oui et puis j'ai oublié de dire que j'avais essayé phpshell.php [archive] mais comme le safe_mode est utilisé... Pas possible.

dimanche 13 mars 2005

HTTP Uploader

uploader.perl [archive] est un simple script Perl/CGI qui permet d'uploader des fichiers quelconques dans un répertoire donné. Le script est capable de calculer la somme MD5 du fichier reçu et de l'écrire dans un fichier MD5SUM.txt afin de vérifier le résultat plus tard. D'ailleurs, je fais afficher ce fichier lorsque je visite le répertoire d'upload grâce à mod_autoindex d'Apache et la directive :

 ReadmeName MD5SUM.txt 

vendredi 4 mars 2005

Analyse des logs Kismet en fonction du temps

En tant que pauvre étudiant qui se respecte, je n'ai pas les moyens de m'acheter une carte GPS PMCIA afin de conserver la localisation des access points découverts lors de balades wardrivantes [archive]. Une méthode qui vaut ce qu'elle vaut est de se baser sur le temps.

viewkismetlogs.perl [archive] crée une image représentant les minutes écoulées depuis le début sur une règle. Si un réseau est découvert, un baton est tracé sur cette règle et est coloré en orange/vert si ce point d'accès utilise WEP.

Mais plutot que de blablater, voici un exemple d'image [archive] qui clarifiera tout.

viewkismetlogs.perl [archive] récupère les informations via les fichiers XML que Kismet [archive] crée (/var/log/kismet/*xml sous Debian).

samedi 26 février 2005

Explication du billet précédent

extensions=''${(fR)${(M)${(f)"$(< /etc/mime.types)"}##video*}##video[[:alnum:]./-]##[\t ]#}''
  1. $(< /etc/mime.types) - on extrait le contenu du fichier
  2. ${(f)"..."} - on fait du line-splitting
  3. ${(M)${...}##video*} - on ne sélectionne que les lignes matchant video*
  4. ${(R)${...}##video[[:alnum:]./-]##[\t ]#} - on matche la partie gauche de la ligne et on garde le reste.

Maintenant, la variable $extensions contient les extensions dans un fouilli pas encore utilisable : ce qu'on veut, c'est construire une expression rationnelle qui matche un nom de fichier associé à une vidéo. On veut *(wmv|avi|mkv|mpg). Pour le moment, on a une chaine de ce genre :

wmv     avi mkv         mpg
videos="(#i)*(${(j:|:)${(z)extensions}})"
  1. ${(z)extensions} - on fait un word-splitting classique (les éléments sont séparés par $IFS)
  2. ${(j:|:)...} - on joint tous les mots/éléments par le caractère '|'
  3. (#i)*(...) - on mets le flag "case insensitive" et le {début,fin} de l'expression rationnelle.

vendredi 25 février 2005

Globbing des fichiers vidéos

Comme je racontais la dernière fois, j'ai un répertoire où j'entasse tous les fichiers de la journée, cela peut être des vidéos, papiers, codes, etc.

J'aime bien visionner toutes les vidéos sans avoir me prendre la tete, donc j'aimerai bien faire :

% mplayer *

Ca marche, mais vous êtes d'accord que c'est pas terrible : mplayer tente de lire même les fichiers pdf et ca ne lui plait pas toujours... Alors on tente d'affiner :

% mplayer *(avi|mpg|mkv)

Mais comme le veut Murphy, on oublie toujours d'indiquer un format, et puis c'est long de taper (et de se souvenir) de toutes les extensions possibles.

Utilisons alors le fichier /etc/mime.types pour récupérer toutes ces extensions. Utilisons du Perl pour faire ca :

% videos="(#i)*($(perl -lane 'push @x, $F[1] if /video/ && defined $F[1];END{print join q/|/,@x}' /etc/mime.types))"
% echo $videos
(#i)*(dl|fli|gl|mpeg|mp4|qt|mxu|dif|lsf|mng|asf|wm|wmv|wmx|wvx|avi|movie)
% echo $~videos
bl.avi bl.AVI

Ce qui marche plutot bien... Mais comme c'est encore trop simple comme solution, utilisons zsh uniquement : pas besoin de gaspiller un fork() !

% extensions=''${(fR)${(M)${(f)"$(< /etc/mime.types)"}##video*}##video[[:alnum:]./-]##[\t ]#}''
% videos="(#i)*(${(j:|:)${(z)extensions}})"

(bon, j'y ai passé une heure, mais ca a plus de gueule non ? On pourrait encore factoriser une ou deux expressions mais j'ai mal à la tête...)

Pourquoi faire simple lorsqu'on peut faire compliqué ?

mardi 15 février 2005

Sebek et read() LD_PRELOAD hijacking

Pourquoi faire simple quand on peut faire compliqué ? Voici une solution tellement simple [archive] afin de bypasser Sebek [archive] que ca me dégoûte d'avoir passé autant de temps sur une chose du même genre en me cantonnant à n'utiliser que l'appel système mmap() pour remplacer read().

En plus, y avait tellement de limitations à ma version que c'était pas drôle :(

dimanche 30 janvier 2005

Linux expo == spammeur

Je suis encore vachement contrarié contre Solutions Linux [archive] : l'année dernière, je m'y étais inscris avec une adresse en foo+linux-expo@bar.org, manque de pot, leur script d'insertion en base de données était foireux, il avait enregistré l'adresse foo_linux_expo@bar.org à la place.

Et v'la t'y pas que depuis l'année dernière, je recois une dizaine de spams sur cette fameuse adresse. Solutions Linux venderait nos adresses mails aux vilains spammeurs ? Ou alors leur base a été compromise (mon oeil) ?

samedi 29 janvier 2005

{Turbo,Kompressor,16s,v12,NOS} ssh login

Miracle, parlons aujourd'hui de shell, mais pas (forcément) de zsh.

Dans son livre "The Linux Server Hacks" [archive], Rob Flickenger nous propose une astuce qu'il nomme "Turbo-mode ssh login", le principe est d'écrire un shell script qui se résume à ssh $(basename $0) $*, ensuite, on fait une montagne de liens symboliques

% ln -s ssh-to serveurA.org
% ln -s ssh-to serveurB.org

Ensuite, yapluka :

% serveurA.org
Password:

C'est bien, mais on a pas toujours le même login sur toutes les machines distantes, donc voici ma version :

#! /bin/sh

if [[ "x$1" = x-* ]]; then
    login=${1#-}
    shift
fi

ssh "${login:+$login@}$(basename "$0" )" $*

Maintenant :

% ln -s ssh-to serveurA.org
% ln -s ssh-to serveurB.org
% serveurB.org -monlogin
Password for monlogin@serveurB.org:
../..
% serveurA.org
Password:

samedi 22 janvier 2005

zsh un jour, zsh toujours !

Oui je sais, je commence à parler un peu trop de ce merveilleux shell qu'est zsh. Tant pis pour vous, c'est mon blog après tout :)

Toujours dans ma quête du moindre effort, j'aime pas retaper quelque chose que j'ai déjà tapé, surtout lorsque c'est un long path. Par exemple, lorsque vous voulez changer l'extension d'un fichier :
% mv /foo/bar/yop/yup/blabla.xt
Vous en êtes là et vous avez la flemme de retaper tout le path alors vous prenez votre souris (ou vous vous mettez en copy-mode sous screen [archive]) et vous faites un bon vieux copy/yank. Ca marche, mais c'est chia^Wfatiguant..

Voici un widget zsh qui prend le mot précédent de la ligne de commande et le copie là où est votre curseur.

copiteur () {
        zle backward-word
        zle kill-line
        zle yank
        zle yank
}
zle -N copiteur
bindkey '\el' copiteur # ESC-l

vendredi 21 janvier 2005

Être calife à la place du calife...

Je me fais tout le temps avoir : je tape une ligne de commande et juste avant de taper <Entrée>, je me rappelle que j'ai oublié de rajouter sudo au début. Résultat, de précieuses milisecondes perdues :)

Les widgets zsh viennent à ma rescousse :

Read next [archive]

samedi 25 décembre 2004

Zsh, president !

Certains pensent que les globbing modifiers de zsh sont inutiles et ne servent qu'à troller.

Voici donc un exemple-concret-de-pourquoi-ca-rulez : il m'arrive très fréquemment de télécharger des dizaines de vidéos en même temps (avec Mozilla Firefox), mais comme je n'aime pas attendre, je veux voir celles qui sont finies de téléchargées et laisser les autres tranquille.

Je demande alors la liste des fichiers réguliers modifiés il y a moins de 15 minutes mais n'incluant pas les fichiers modifiés il y a moins de 20 secondes. (15 minutes < temps voulu < 20 secondes). Cela donne :

% mplayer *(.mm-15^ms-20)

mercredi 22 décembre 2004

Comment (faire) taire ?

Je suis toujours en train de me plaindre des commentaires anonymes de ce blog, pourquoi ? Parce qu'ils n'apportent rien en général !

Donc si vous n'avez rien à dire, retenez vous, je vous assure que ca ne vous tuera pas. De même, la personne derrière le pseudo plop a le droit de laisser son mail (bien que je crois savoir cette personne est un joueur de JDR avec un prénom composé).

mardi 14 décembre 2004

Je suis bien ou je suis ?

Projet Java pour la licence professionnelle Sécurité et Qualité des réseaux : réaliser une calculatrice.

Déjà que je me suis suffisamment plaint de faire du Java, alors là, c'est le ponpon. Pourquoi est-ce que les profs ne font pas des efforts d'imagination ? Nous sommes une licence orientée SÉCURITÉ tout de même...

/me doit aller réviser QoS, le cours du prof qui ne sait pas écrire SYN sans regarder sa feuille :)

Tous les billets →